90
107
if (form_factor_ == oxide::FORM_FACTOR_PHONE ||
91
108
form_factor_ == oxide::FORM_FACTOR_TABLET) {
93
dbus::Bus::Options options;
94
options.bus_type = dbus::Bus::SYSTEM;
95
options.connection_type = dbus::Bus::PRIVATE;
96
bus_ = new dbus::Bus(options);
98
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
99
kUnityScreenServiceName,
100
dbus::ObjectPath(kUnityScreenPath));
101
scoped_ptr<dbus::MethodCall> method_call;
103
new dbus::MethodCall(kUnityScreenInterface, "keepDisplayOn"));
104
scoped_ptr<dbus::MessageWriter> message_writer;
105
message_writer.reset(new dbus::MessageWriter(method_call.get()));
107
scoped_ptr<dbus::Response> response(object_proxy->CallMethodAndBlock(
108
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
110
dbus::MessageReader message_reader(response.get());
111
if (!message_reader.PopInt32(&cookie_)) {
112
LOG(ERROR) << "Invalid response for screen blanking inhibition request: "
113
<< response->ToString();
116
LOG(ERROR) << "Failed to inhibit screen blanking";
109
ApplyBlockUnityScreenService();
111
ApplyBlockFreedesktop();
126
118
if (form_factor_ == oxide::FORM_FACTOR_PHONE ||
127
119
form_factor_ == oxide::FORM_FACTOR_TABLET) {
128
if (cookie_ != kInvalidCookie) {
130
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
131
kUnityScreenServiceName,
132
dbus::ObjectPath(kUnityScreenPath));
133
scoped_ptr<dbus::MethodCall> method_call;
135
new dbus::MethodCall(kUnityScreenInterface, "removeDisplayOnRequest"));
136
dbus::MessageWriter message_writer(method_call.get());
137
message_writer.AppendInt32(cookie_);
138
object_proxy->CallMethodAndBlock(
139
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT);
140
cookie_ = kInvalidCookie;
144
bus_->ShutdownAndBlock();
120
RemoveBlockUnityScreenService();
122
RemoveBlockFreedesktop();
126
void PowerSaveBlocker::ApplyBlockUnityScreenService() {
128
dbus::Bus::Options options;
129
options.bus_type = dbus::Bus::SYSTEM;
130
options.connection_type = dbus::Bus::PRIVATE;
131
bus_ = new dbus::Bus(options);
133
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
134
kUnityScreenServiceName,
135
dbus::ObjectPath(kUnityScreenPath));
136
scoped_ptr<dbus::MethodCall> method_call;
138
new dbus::MethodCall(kUnityScreenInterface, "keepDisplayOn"));
139
scoped_ptr<dbus::MessageWriter> message_writer;
140
message_writer.reset(new dbus::MessageWriter(method_call.get()));
142
scoped_ptr<dbus::Response> response(object_proxy->CallMethodAndBlock(
143
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
145
dbus::MessageReader message_reader(response.get());
146
if (!message_reader.PopInt32(&unity_cookie_)) {
147
LOG(ERROR) << "Invalid response for screen blanking inhibition request: "
148
<< response->ToString();
151
LOG(ERROR) << "Failed to inhibit screen blanking";
155
void PowerSaveBlocker::RemoveBlockUnityScreenService() {
156
if (unity_cookie_ != kInvalidCookie) {
158
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
159
kUnityScreenServiceName,
160
dbus::ObjectPath(kUnityScreenPath));
161
scoped_ptr<dbus::MethodCall> method_call;
163
new dbus::MethodCall(kUnityScreenInterface, "removeDisplayOnRequest"));
164
dbus::MessageWriter message_writer(method_call.get());
165
message_writer.AppendInt32(unity_cookie_);
166
object_proxy->CallMethodAndBlock(
167
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT);
168
unity_cookie_ = kInvalidCookie;
172
bus_->ShutdownAndBlock();
177
void PowerSaveBlocker::ApplyBlockFreedesktop() {
178
std::string application_name =
179
BrowserPlatformIntegration::GetInstance()->GetApplicationName();
180
std::string description{kDefaultInhibitReason};
182
if (!description_.empty()) {
183
description = description_;
187
dbus::Bus::Options options;
188
options.bus_type = dbus::Bus::SESSION;
189
options.connection_type = dbus::Bus::PRIVATE;
190
bus_ = new dbus::Bus(options);
192
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
193
kFreeDesktopScreenSaverName,
194
dbus::ObjectPath(kFreeDesktopScreenSaverPath));
195
scoped_ptr<dbus::MethodCall> method_call;
197
new dbus::MethodCall(kFreeDestopScreenSaverInterface, "Inhibit"));
198
scoped_ptr<dbus::MessageWriter> message_writer;
199
message_writer.reset(new dbus::MessageWriter(method_call.get()));
200
message_writer->AppendString(application_name);
201
message_writer->AppendString(description);
203
scoped_ptr<dbus::Response> response(object_proxy->CallMethodAndBlock(
204
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT));
206
dbus::MessageReader message_reader(response.get());
207
if (!message_reader.PopUint32(&freedesktop_cookie_)) {
208
LOG(ERROR) << "Invalid response for screen blanking inhibition request: "
209
<< response->ToString();
212
LOG(ERROR) << "Failed to inhibit screen blanking";
216
void PowerSaveBlocker::RemoveBlockFreedesktop() {
217
if (freedesktop_cookie_ != uint32_t(kInvalidCookie)) {
219
scoped_refptr<dbus::ObjectProxy> object_proxy = bus_->GetObjectProxy(
220
kFreeDesktopScreenSaverName,
221
dbus::ObjectPath(kFreeDesktopScreenSaverPath));
222
scoped_ptr<dbus::MethodCall> method_call;
224
new dbus::MethodCall(kFreeDestopScreenSaverInterface, "UnInhibit"));
225
dbus::MessageWriter message_writer(method_call.get());
226
message_writer.AppendUint32(freedesktop_cookie_);
227
object_proxy->CallMethodAndBlock(
228
method_call.get(), dbus::ObjectProxy::TIMEOUT_USE_DEFAULT);
229
freedesktop_cookie_ = kInvalidCookie;
233
bus_->ShutdownAndBlock();
153
239
BrowserPlatformIntegration::ApplicationState state =
154
240
BrowserPlatformIntegration::GetInstance()->GetApplicationState();
155
241
if (state != BrowserPlatformIntegration::APPLICATION_STATE_SUSPENDED &&
156
cookie_ == kInvalidCookie) {
242
unity_cookie_ == kInvalidCookie) {
158
244
} else if (state == BrowserPlatformIntegration::APPLICATION_STATE_SUSPENDED &&
159
cookie_ != kInvalidCookie) {
245
unity_cookie_ != kInvalidCookie) {
164
PowerSaveBlocker::PowerSaveBlocker()
250
PowerSaveBlocker::PowerSaveBlocker(const std::string& description)
165
251
: form_factor_(oxide::GetFormFactorHint())
166
, cookie_(kInvalidCookie) {}
252
, unity_cookie_(kInvalidCookie)
253
, description_(description)
168
256
content::PowerSaveBlockerOxideDelegate* CreatePowerSaveBlocker(
169
257
content::PowerSaveBlocker::PowerSaveBlockerType type,
170
258
content::PowerSaveBlocker::Reason reason,
171
259
const std::string& description) {
172
return new PowerSaveBlocker();
260
return new PowerSaveBlocker(description);
175
263
} // namespace oxide