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 c3cae3f1d7b8c240f2a45cae2df7bb517121ceec..079241775c04e18c71aa0071412c273a3298c4f4 100644 |
--- a/chrome/browser/chromeos/dbus/power_manager_client.cc |
+++ b/chrome/browser/chromeos/dbus/power_manager_client.cc |
@@ -122,6 +122,22 @@ class PowerManagerClientImpl : public PowerManagerClient { |
weak_ptr_factory_.GetWeakPtr()), |
base::Bind(&PowerManagerClientImpl::SignalConnected, |
weak_ptr_factory_.GetWeakPtr())); |
+ |
+ power_manager_proxy_->ConnectToSignal( |
+ power_manager::kPowerManagerInterface, |
+ power_manager::kIdleNotifySignal, |
+ base::Bind(&PowerManagerClientImpl::IdleNotifySignalReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&PowerManagerClientImpl::SignalConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
+ |
+ power_manager_proxy_->ConnectToSignal( |
+ power_manager::kPowerManagerInterface, |
+ power_manager::kActiveNotifySignal, |
+ base::Bind(&PowerManagerClientImpl::IdleNotifySignalReceived, |
+ weak_ptr_factory_.GetWeakPtr()), |
+ base::Bind(&PowerManagerClientImpl::SignalConnected, |
+ weak_ptr_factory_.GetWeakPtr())); |
} |
virtual ~PowerManagerClientImpl() { |
@@ -207,6 +223,23 @@ class PowerManagerClientImpl : public PowerManagerClient { |
weak_ptr_factory_.GetWeakPtr(), callback)); |
} |
+ virtual void RequestIdleNotification(int64 threshold) OVERRIDE { |
+ dbus::MethodCall method_call(power_manager::kPowerManagerInterface, |
+ power_manager::kRequestIdleNotification); |
+ dbus::MessageWriter writer(&method_call); |
+ writer.AppendInt64(threshold); |
+ |
+ power_manager_proxy_->CallMethod( |
+ &method_call, |
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
+ dbus::ObjectProxy::EmptyResponseCallback()); |
+ } |
+ |
+ virtual void RequestActiveNotification() OVERRIDE { |
+ RequestIdleNotification(0); |
+ } |
+ |
+ |
virtual void NotifyScreenLockRequested() OVERRIDE { |
SimpleMethodCallToPowerManager(power_manager::kRequestLockScreenMethod); |
} |
@@ -378,6 +411,24 @@ class PowerManagerClientImpl : public PowerManagerClient { |
FOR_EACH_OBSERVER(Observer, observers_, UnlockScreenFailed()); |
} |
+ |
+ void IdleNotifySignalReceived(dbus::Signal* signal) { |
+ dbus::MessageReader reader(signal); |
+ int64 threshold = 0; |
+ if (!reader.PopInt64(&threshold)) { |
+ LOG(ERROR) << "Idle Notify signal had incorrect parameters: " |
+ << signal->ToString(); |
+ return; |
+ } |
+ |
+ VLOG(1) << "Idle Notify: " << threshold; |
+ if (threshold) |
+ FOR_EACH_OBSERVER(Observer, observers_, IdleNotify(threshold)); |
+ else |
+ FOR_EACH_OBSERVER(Observer, observers_, ActiveNotify()); |
+ } |
+ |
+ |
dbus::ObjectProxy* power_manager_proxy_; |
ObserverList<Observer> observers_; |
base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; |
@@ -439,12 +490,13 @@ class PowerManagerClientStubImpl : public PowerManagerClient { |
callback.Run(0); |
} |
+ virtual void RequestIdleNotification(int64 threshold) OVERRIDE {} |
+ virtual void RequestActiveNotification() OVERRIDE {} |
+ |
virtual void NotifyScreenLockRequested() OVERRIDE { |
ScreenLocker::Show(); |
} |
- |
virtual void NotifyScreenLockCompleted() OVERRIDE {} |
- |
virtual void NotifyScreenUnlockRequested() OVERRIDE { |
ScreenLocker::Hide(); |
} |