Chromium Code Reviews| 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 fce1c132aabfa452eedce05fc269e1978e8ced4c..916051e3cdcea41003e1868969e8dbf612973d9b 100644 |
| --- a/chrome/browser/chromeos/dbus/power_manager_client.cc |
| +++ b/chrome/browser/chromeos/dbus/power_manager_client.cc |
| @@ -15,6 +15,7 @@ |
| #include "base/time.h" |
| #include "base/timer.h" |
| #include "chrome/browser/chromeos/system/runtime_environment.h" |
| +#include "content/public/browser/browser_thread.h" |
|
satorux1
2011/11/29 01:29:12
don't need this.
Simon Que
2011/11/29 01:47:32
Done.
|
| #include "dbus/bus.h" |
| #include "dbus/message.h" |
| #include "dbus/object_proxy.h" |
| @@ -92,6 +93,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::ScreenLockSignalReceived, |
| + weak_ptr_factory_.GetWeakPtr()), |
| + base::Bind(&PowerManagerClientImpl::SignalConnected, |
| + weak_ptr_factory_.GetWeakPtr())); |
| + power_manager_proxy_->ConnectToSignal( |
| + chromium::kChromiumInterface, |
| + chromium::kUnlockScreenFailedSignal, |
| + base::Bind(&PowerManagerClientImpl::ScreenLockSignalReceived, |
| + weak_ptr_factory_.GetWeakPtr()), |
| + base::Bind(&PowerManagerClientImpl::SignalConnected, |
| + weak_ptr_factory_.GetWeakPtr())); |
| } |
| virtual ~PowerManagerClientImpl() { |
| @@ -176,6 +200,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 +225,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); |
| @@ -288,6 +338,21 @@ class PowerManagerClientImpl : public PowerManagerClient { |
| callback.Run(idle_time_ms/1000); |
| } |
| + void ScreenLockSignalReceived(dbus::Signal* signal) { |
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
|
satorux1
2011/11/29 01:29:12
Don't need this. We don't do this in other functio
Simon Que
2011/11/29 01:47:32
Done.
|
| + std::string signal_name = signal->GetMember(); |
| + if (signal_name == chromium::kLockScreenSignal) { |
| + FOR_EACH_OBSERVER(Observer, observers_, LockScreen()); |
| + } else if (signal_name == chromium::kUnlockScreenSignal) { |
| + FOR_EACH_OBSERVER(Observer, observers_, UnlockScreen()); |
| + } else if (signal_name == chromium::kUnlockScreenFailedSignal) { |
| + FOR_EACH_OBSERVER(Observer, observers_, UnlockScreenFailed()); |
| + } else { |
| + LOG(ERROR) << "Invalid signal name: " << signal_name; |
| + NOTREACHED(); |
| + } |
|
satorux1
2011/11/29 01:29:12
What about defining a function for each signal, ra
Simon Que
2011/11/29 01:47:32
Done.
|
| + } |
| + |
| dbus::ObjectProxy* power_manager_proxy_; |
| ObserverList<Observer> observers_; |
| base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; |
| @@ -348,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. |