| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/dbus/power_manager_client.h" | 5 #include "chrome/browser/chromeos/dbus/power_manager_client.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/format_macros.h" | 11 #include "base/format_macros.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 // manager knows the actual brightness level. We don't cache the | 68 // manager knows the actual brightness level. We don't cache the |
| 69 // brightness level in Chrome as it'll make things less reliable. | 69 // brightness level in Chrome as it'll make things less reliable. |
| 70 power_manager_proxy_->ConnectToSignal( | 70 power_manager_proxy_->ConnectToSignal( |
| 71 power_manager::kPowerManagerInterface, | 71 power_manager::kPowerManagerInterface, |
| 72 power_manager::kBrightnessChangedSignal, | 72 power_manager::kBrightnessChangedSignal, |
| 73 base::Bind(&PowerManagerClientImpl::BrightnessChangedReceived, | 73 base::Bind(&PowerManagerClientImpl::BrightnessChangedReceived, |
| 74 weak_ptr_factory_.GetWeakPtr()), | 74 weak_ptr_factory_.GetWeakPtr()), |
| 75 base::Bind(&PowerManagerClientImpl::SignalConnected, | 75 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 76 weak_ptr_factory_.GetWeakPtr())); | 76 weak_ptr_factory_.GetWeakPtr())); |
| 77 | 77 |
| 78 // Monitor the D-Bus signal for power supply polling signals. | |
| 79 power_manager_proxy_->ConnectToSignal( | 78 power_manager_proxy_->ConnectToSignal( |
| 80 power_manager::kPowerManagerInterface, | 79 power_manager::kPowerManagerInterface, |
| 81 power_manager::kPowerSupplyPollSignal, | 80 power_manager::kPowerSupplyPollSignal, |
| 82 base::Bind(&PowerManagerClientImpl::PowerSupplyPollReceived, | 81 base::Bind(&PowerManagerClientImpl::PowerSupplyPollReceived, |
| 83 weak_ptr_factory_.GetWeakPtr()), | 82 weak_ptr_factory_.GetWeakPtr()), |
| 84 base::Bind(&PowerManagerClientImpl::SignalConnected, | 83 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 85 weak_ptr_factory_.GetWeakPtr())); | 84 weak_ptr_factory_.GetWeakPtr())); |
| 86 | 85 |
| 87 // Monitor the D-Bus signal for power state changed signals. | |
| 88 power_manager_proxy_->ConnectToSignal( | 86 power_manager_proxy_->ConnectToSignal( |
| 89 power_manager::kPowerManagerInterface, | 87 power_manager::kPowerManagerInterface, |
| 90 power_manager::kPowerStateChangedSignal, | 88 power_manager::kPowerStateChangedSignal, |
| 91 base::Bind(&PowerManagerClientImpl::PowerStateChangedSignalReceived, | 89 base::Bind(&PowerManagerClientImpl::PowerStateChangedSignalReceived, |
| 92 weak_ptr_factory_.GetWeakPtr()), | 90 weak_ptr_factory_.GetWeakPtr()), |
| 93 base::Bind(&PowerManagerClientImpl::SignalConnected, | 91 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 94 weak_ptr_factory_.GetWeakPtr())); | 92 weak_ptr_factory_.GetWeakPtr())); |
| 95 | 93 |
| 96 // Monitor the D-Bus signal for screen lock and unlock signals. | 94 power_manager_proxy_->ConnectToSignal( |
| 95 power_manager::kPowerManagerInterface, |
| 96 power_manager::kButtonEventSignal, |
| 97 base::Bind(&PowerManagerClientImpl::ButtonEventSignalReceived, |
| 98 weak_ptr_factory_.GetWeakPtr()), |
| 99 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 100 weak_ptr_factory_.GetWeakPtr())); |
| 101 |
| 97 power_manager_proxy_->ConnectToSignal( | 102 power_manager_proxy_->ConnectToSignal( |
| 98 chromium::kChromiumInterface, | 103 chromium::kChromiumInterface, |
| 99 chromium::kLockScreenSignal, | 104 chromium::kLockScreenSignal, |
| 100 base::Bind(&PowerManagerClientImpl::ScreenLockSignalReceived, | 105 base::Bind(&PowerManagerClientImpl::ScreenLockSignalReceived, |
| 101 weak_ptr_factory_.GetWeakPtr()), | 106 weak_ptr_factory_.GetWeakPtr()), |
| 102 base::Bind(&PowerManagerClientImpl::SignalConnected, | 107 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 103 weak_ptr_factory_.GetWeakPtr())); | 108 weak_ptr_factory_.GetWeakPtr())); |
| 109 |
| 104 power_manager_proxy_->ConnectToSignal( | 110 power_manager_proxy_->ConnectToSignal( |
| 105 chromium::kChromiumInterface, | 111 chromium::kChromiumInterface, |
| 106 chromium::kUnlockScreenSignal, | 112 chromium::kUnlockScreenSignal, |
| 107 base::Bind(&PowerManagerClientImpl::ScreenUnlockSignalReceived, | 113 base::Bind(&PowerManagerClientImpl::ScreenUnlockSignalReceived, |
| 108 weak_ptr_factory_.GetWeakPtr()), | 114 weak_ptr_factory_.GetWeakPtr()), |
| 109 base::Bind(&PowerManagerClientImpl::SignalConnected, | 115 base::Bind(&PowerManagerClientImpl::SignalConnected, |
| 110 weak_ptr_factory_.GetWeakPtr())); | 116 weak_ptr_factory_.GetWeakPtr())); |
| 111 power_manager_proxy_->ConnectToSignal( | 117 power_manager_proxy_->ConnectToSignal( |
| 112 chromium::kChromiumInterface, | 118 chromium::kChromiumInterface, |
| 113 chromium::kUnlockScreenFailedSignal, | 119 chromium::kUnlockScreenFailedSignal, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 // Make a method call to power manager with no arguments and no response. | 234 // Make a method call to power manager with no arguments and no response. |
| 229 void SimpleMethodCallToPowerManager(const std::string& method_name) { | 235 void SimpleMethodCallToPowerManager(const std::string& method_name) { |
| 230 dbus::MethodCall method_call(power_manager::kPowerManagerInterface, | 236 dbus::MethodCall method_call(power_manager::kPowerManagerInterface, |
| 231 method_name); | 237 method_name); |
| 232 power_manager_proxy_->CallMethod( | 238 power_manager_proxy_->CallMethod( |
| 233 &method_call, | 239 &method_call, |
| 234 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 240 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
| 235 dbus::ObjectProxy::EmptyResponseCallback()); | 241 dbus::ObjectProxy::EmptyResponseCallback()); |
| 236 } | 242 } |
| 237 | 243 |
| 238 // Called when a brightness change signal is received. | |
| 239 void BrightnessChangedReceived(dbus::Signal* signal) { | 244 void BrightnessChangedReceived(dbus::Signal* signal) { |
| 240 dbus::MessageReader reader(signal); | 245 dbus::MessageReader reader(signal); |
| 241 int32 brightness_level = 0; | 246 int32 brightness_level = 0; |
| 242 bool user_initiated = 0; | 247 bool user_initiated = 0; |
| 243 if (!(reader.PopInt32(&brightness_level) && | 248 if (!(reader.PopInt32(&brightness_level) && |
| 244 reader.PopBool(&user_initiated))) { | 249 reader.PopBool(&user_initiated))) { |
| 245 LOG(ERROR) << "Brightness changed signal had incorrect parameters: " | 250 LOG(ERROR) << "Brightness changed signal had incorrect parameters: " |
| 246 << signal->ToString(); | 251 << signal->ToString(); |
| 247 return; | 252 return; |
| 248 } | 253 } |
| 249 VLOG(1) << "Brightness changed to " << brightness_level | 254 VLOG(1) << "Brightness changed to " << brightness_level |
| 250 << ": user initiated " << user_initiated; | 255 << ": user initiated " << user_initiated; |
| 251 FOR_EACH_OBSERVER(Observer, observers_, | 256 FOR_EACH_OBSERVER(Observer, observers_, |
| 252 BrightnessChanged(brightness_level, user_initiated)); | 257 BrightnessChanged(brightness_level, user_initiated)); |
| 253 } | 258 } |
| 254 | 259 |
| 255 // Called when a response for DecreaseScreenBrightness() is received. | |
| 256 void OnDecreaseScreenBrightness(dbus::Response* response) { | 260 void OnDecreaseScreenBrightness(dbus::Response* response) { |
| 257 if (!response) { | 261 if (!response) { |
| 258 LOG(ERROR) << "Failed to decrease screen brightness"; | 262 LOG(ERROR) << "Failed to decrease screen brightness"; |
| 259 return; | 263 return; |
| 260 } | 264 } |
| 261 VLOG(1) << "screen brightness increased: " << response->ToString(); | 265 VLOG(1) << "screen brightness increased: " << response->ToString(); |
| 262 } | 266 } |
| 263 | 267 |
| 264 // Called when a response for IncreaseScreenBrightness() is received. | |
| 265 void OnIncreaseScreenBrightness(dbus::Response* response) { | 268 void OnIncreaseScreenBrightness(dbus::Response* response) { |
| 266 if (!response) { | 269 if (!response) { |
| 267 LOG(ERROR) << "Failed to increase screen brightness"; | 270 LOG(ERROR) << "Failed to increase screen brightness"; |
| 268 return; | 271 return; |
| 269 } | 272 } |
| 270 VLOG(1) << "screen brightness increased: " << response->ToString(); | 273 VLOG(1) << "screen brightness increased: " << response->ToString(); |
| 271 } | 274 } |
| 272 | 275 |
| 273 // Called when a power state changed signal is received. | |
| 274 void PowerStateChangedSignalReceived(dbus::Signal* signal) { | 276 void PowerStateChangedSignalReceived(dbus::Signal* signal) { |
| 275 VLOG(1) << "Received power state changed signal."; | 277 VLOG(1) << "Received power state changed signal."; |
| 276 dbus::MessageReader reader(signal); | 278 dbus::MessageReader reader(signal); |
| 277 std::string power_state_string; | 279 std::string power_state_string; |
| 278 if (!reader.PopString(&power_state_string)) { | 280 if (!reader.PopString(&power_state_string)) { |
| 279 LOG(ERROR) << "Error reading signal args: " << signal->ToString(); | 281 LOG(ERROR) << "Error reading signal args: " << signal->ToString(); |
| 280 return; | 282 return; |
| 281 } | 283 } |
| 282 if (power_state_string != "on") | 284 if (power_state_string != "on") |
| 283 return; | 285 return; |
| 284 // Notify all observers of resume event. | |
| 285 FOR_EACH_OBSERVER(Observer, observers_, SystemResumed()); | 286 FOR_EACH_OBSERVER(Observer, observers_, SystemResumed()); |
| 286 } | 287 } |
| 287 | 288 |
| 288 // Called when a power supply polling signal is received. | 289 void ButtonEventSignalReceived(dbus::Signal* signal) { |
| 290 dbus::MessageReader reader(signal); |
| 291 std::string button_name; |
| 292 bool down = false; |
| 293 int64 timestamp_internal = 0; |
| 294 if (!reader.PopString(&button_name) || |
| 295 !reader.PopBool(&down) || |
| 296 !reader.PopInt64(×tamp_internal)) { |
| 297 LOG(ERROR) << "Button signal had incorrect parameters: " |
| 298 << signal->ToString(); |
| 299 return; |
| 300 } |
| 301 base::TimeTicks timestamp = |
| 302 base::TimeTicks::FromInternalValue(timestamp_internal); |
| 303 |
| 304 if (button_name == power_manager::kPowerButtonName) { |
| 305 FOR_EACH_OBSERVER( |
| 306 Observer, observers_, PowerButtonStateChanged(down, timestamp)); |
| 307 } else if (button_name == power_manager::kLockButtonName) { |
| 308 FOR_EACH_OBSERVER( |
| 309 Observer, observers_, LockButtonStateChanged(down, timestamp)); |
| 310 } |
| 311 } |
| 312 |
| 289 void PowerSupplyPollReceived(dbus::Signal* unused_signal) { | 313 void PowerSupplyPollReceived(dbus::Signal* unused_signal) { |
| 290 VLOG(1) << "Received power supply poll signal."; | 314 VLOG(1) << "Received power supply poll signal."; |
| 291 RequestStatusUpdate(); | 315 RequestStatusUpdate(); |
| 292 } | 316 } |
| 293 | 317 |
| 294 // Called when GetAllPropertiesMethod call is complete. | |
| 295 void OnGetAllPropertiesMethod(dbus::Response* response) { | 318 void OnGetAllPropertiesMethod(dbus::Response* response) { |
| 296 if (!response) { | 319 if (!response) { |
| 297 LOG(ERROR) << "Error calling " << power_manager::kGetAllPropertiesMethod; | 320 LOG(ERROR) << "Error calling " << power_manager::kGetAllPropertiesMethod; |
| 298 return; | 321 return; |
| 299 } | 322 } |
| 300 dbus::MessageReader reader(response); | 323 dbus::MessageReader reader(response); |
| 301 PowerSupplyStatus status; | 324 PowerSupplyStatus status; |
| 302 double unused_battery_voltage = 0.0; | 325 double unused_battery_voltage = 0.0; |
| 303 double unused_battery_energy = 0.0; | 326 double unused_battery_energy = 0.0; |
| 304 double unused_battery_energy_rate = 0.0; | 327 double unused_battery_energy_rate = 0.0; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 FROM_HERE, | 424 FROM_HERE, |
| 402 base::TimeDelta::FromMilliseconds(1000), | 425 base::TimeDelta::FromMilliseconds(1000), |
| 403 this, | 426 this, |
| 404 &PowerManagerClientStubImpl::Update); | 427 &PowerManagerClientStubImpl::Update); |
| 405 } else { | 428 } else { |
| 406 timer_.Stop(); | 429 timer_.Stop(); |
| 407 } | 430 } |
| 408 } | 431 } |
| 409 | 432 |
| 410 virtual void RequestRestart() OVERRIDE {} | 433 virtual void RequestRestart() OVERRIDE {} |
| 411 | |
| 412 virtual void RequestShutdown() OVERRIDE {} | 434 virtual void RequestShutdown() OVERRIDE {} |
| 413 | 435 |
| 414 virtual void CalculateIdleTime(const CalculateIdleTimeCallback& callback) | 436 virtual void CalculateIdleTime(const CalculateIdleTimeCallback& callback) |
| 415 OVERRIDE { | 437 OVERRIDE { |
| 416 callback.Run(0); | 438 callback.Run(0); |
| 417 } | 439 } |
| 418 | 440 |
| 419 virtual void NotifyScreenLockRequested() OVERRIDE {} | 441 virtual void NotifyScreenLockRequested() OVERRIDE {} |
| 420 | |
| 421 virtual void NotifyScreenLockCompleted() OVERRIDE {} | 442 virtual void NotifyScreenLockCompleted() OVERRIDE {} |
| 422 | |
| 423 virtual void NotifyScreenUnlockRequested() OVERRIDE {} | 443 virtual void NotifyScreenUnlockRequested() OVERRIDE {} |
| 424 | |
| 425 virtual void NotifyScreenUnlockCompleted() OVERRIDE {} | 444 virtual void NotifyScreenUnlockCompleted() OVERRIDE {} |
| 426 | 445 |
| 427 private: | 446 private: |
| 428 void Update() { | 447 void Update() { |
| 429 // We pause at 0 and 100% so that it's easier to check those conditions. | 448 // We pause at 0 and 100% so that it's easier to check those conditions. |
| 430 if (pause_count_ > 1) { | 449 if (pause_count_ > 1) { |
| 431 pause_count_--; | 450 pause_count_--; |
| 432 return; | 451 return; |
| 433 } | 452 } |
| 434 | 453 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 | 494 |
| 476 PowerManagerClient* PowerManagerClient::Create(dbus::Bus* bus) { | 495 PowerManagerClient* PowerManagerClient::Create(dbus::Bus* bus) { |
| 477 if (system::runtime_environment::IsRunningOnChromeOS()) { | 496 if (system::runtime_environment::IsRunningOnChromeOS()) { |
| 478 return new PowerManagerClientImpl(bus); | 497 return new PowerManagerClientImpl(bus); |
| 479 } else { | 498 } else { |
| 480 return new PowerManagerClientStubImpl(); | 499 return new PowerManagerClientStubImpl(); |
| 481 } | 500 } |
| 482 } | 501 } |
| 483 | 502 |
| 484 } // namespace chromeos | 503 } // namespace chromeos |
| OLD | NEW |