Index: chrome/browser/chromeos/dbus/power_manager_client.cc |
diff --git a/chrome/browser/chromeos/dbus/power_manager_client.cc b/chrome/browser/chromeos/dbus/power_manager_client.cc |
index 476a3019ca37ad56d8371e2dd8e4f00557d1c2e6..c73ff0a84e59b8cda1a4e76c13f4e11e89209256 100644 |
--- a/chrome/browser/chromeos/dbus/power_manager_client.cc |
+++ b/chrome/browser/chromeos/dbus/power_manager_client.cc |
@@ -92,6 +92,29 @@ class PowerManagerClientImpl : public PowerManagerClient { |
weak_ptr_factory_.GetWeakPtr()), |
base::Bind(&PowerManagerClientImpl::SignalConnected, |
weak_ptr_factory_.GetWeakPtr())); |
+ |
+ // Monitor the D-Bus signal for screen lock and unlock signals. |
+ power_manager_proxy_->ConnectToSignal( |
+ chromium::kChromiumInterface, |
+ chromium::kLockScreenSignal, |
+ base::Bind(&PowerManagerClientImpl::ScreenLockSignalReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&PowerManagerClientImpl::SignalConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ power_manager_proxy_->ConnectToSignal( |
+ chromium::kChromiumInterface, |
+ chromium::kUnlockScreenSignal, |
+ base::Bind(&PowerManagerClientImpl::ScreenUnlockSignalReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&PowerManagerClientImpl::SignalConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ power_manager_proxy_->ConnectToSignal( |
+ chromium::kChromiumInterface, |
+ chromium::kUnlockScreenFailedSignal, |
+ base::Bind(&PowerManagerClientImpl::ScreenUnlockFailedSignalReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&PowerManagerClientImpl::SignalConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
} |
virtual ~PowerManagerClientImpl() { |
@@ -176,6 +199,22 @@ class PowerManagerClientImpl : public PowerManagerClient { |
weak_ptr_factory_.GetWeakPtr(), callback)); |
} |
+ virtual void NotifyScreenLockRequested() OVERRIDE { |
+ SimpleMethodCallToPowerManager(power_manager::kRequestLockScreenMethod); |
+ } |
+ |
+ virtual void NotifyScreenLockCompleted() OVERRIDE { |
+ SimpleMethodCallToPowerManager(power_manager::kScreenIsLockedMethod); |
+ } |
+ |
+ virtual void NotifyScreenUnlockRequested() OVERRIDE { |
+ SimpleMethodCallToPowerManager(power_manager::kRequestUnlockScreenMethod); |
+ } |
+ |
+ virtual void NotifyScreenUnlockCompleted() OVERRIDE { |
+ SimpleMethodCallToPowerManager(power_manager::kScreenIsUnlockedMethod); |
+ } |
+ |
private: |
// Called when a dbus signal is initially connected. |
void SignalConnected(const std::string& interface_name, |
@@ -185,6 +224,16 @@ class PowerManagerClientImpl : public PowerManagerClient { |
<< signal_name << "."; |
} |
+ // Make a method call to power manager with no arguments and no response. |
+ void SimpleMethodCallToPowerManager(const std::string& method_name) { |
+ dbus::MethodCall method_call(power_manager::kPowerManagerInterface, |
+ method_name); |
+ power_manager_proxy_->CallMethod( |
+ &method_call, |
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
+ dbus::ObjectProxy::EmptyResponseCallback()); |
+ } |
+ |
// Called when a brightness change signal is received. |
void BrightnessChangedReceived(dbus::Signal* signal) { |
dbus::MessageReader reader(signal); |
@@ -292,6 +341,18 @@ class PowerManagerClientImpl : public PowerManagerClient { |
callback.Run(idle_time_ms/1000); |
} |
+ void ScreenLockSignalReceived(dbus::Signal* signal) { |
+ FOR_EACH_OBSERVER(Observer, observers_, LockScreen()); |
+ } |
+ |
+ void ScreenUnlockSignalReceived(dbus::Signal* signal) { |
+ FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen()); |
+ } |
+ |
+ void ScreenUnlockFailedSignalReceived(dbus::Signal* signal) { |
+ FOR_EACH_OBSERVER(Observer, observers_, UnlockScreenFailed()); |
+ } |
+ |
dbus::ObjectProxy* power_manager_proxy_; |
ObserverList<Observer> observers_; |
base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; |
@@ -352,6 +413,14 @@ class PowerManagerClientStubImpl : public PowerManagerClient { |
callback.Run(0); |
} |
+ virtual void NotifyScreenLockRequested() OVERRIDE {} |
+ |
+ virtual void NotifyScreenLockCompleted() OVERRIDE {} |
+ |
+ virtual void NotifyScreenUnlockRequested() OVERRIDE {} |
+ |
+ virtual void NotifyScreenUnlockCompleted() OVERRIDE {} |
+ |
private: |
void Update() { |
// We pause at 0 and 100% so that it's easier to check those conditions. |