Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2466)

Unified Diff: chrome/browser/chromeos/dbus/power_manager_client.cc

Issue 8664014: chromeos: move screen lock handling to power manager client (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698