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 45e034b4e3a5629756db019fb2f5a40ce92e2906..3c55a678d27a57c37e8eec518f77df46ed4625fc 100644 |
--- a/chrome/browser/chromeos/dbus/power_manager_client.cc |
+++ b/chrome/browser/chromeos/dbus/power_manager_client.cc |
@@ -156,6 +156,16 @@ class PowerManagerClientImpl : public PowerManagerClient { |
dbus::ObjectProxy::EmptyResponseCallback()); |
} |
+ virtual void CalculateIdleTime(const CalculateIdleTimeCallback& callback) |
+ OVERRIDE { |
+ dbus::MethodCall method_call(power_manager::kPowerManagerInterface, |
+ power_manager::kGetIdleTime); |
+ power_manager_proxy_->CallMethod( |
+ &method_call, |
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
+ base::Bind(&PowerManagerClientImpl::OnGetIdleTime, |
+ weak_ptr_factory_.GetWeakPtr(), callback)); |
+ } |
private: |
// Called when a dbus signal is initially connected. |
@@ -236,6 +246,24 @@ class PowerManagerClientImpl : public PowerManagerClient { |
FOR_EACH_OBSERVER(Observer, observers_, PowerChanged(status)); |
} |
+ void OnGetIdleTime(const CalculateIdleTimeCallback& callback, |
+ dbus::Response* response) { |
+ dbus::MessageReader reader(response); |
+ int64 idle_time_ms = 0; |
+ if (!reader.PopInt64(&idle_time_ms)) { |
+ LOG(ERROR) << "Error reading response from powerd: " |
+ << response->ToString(); |
+ callback.Run(-1); |
+ return; |
+ } |
+ if (idle_time_ms < 0) { |
+ LOG(ERROR) << "Power manager failed to calculate idle time."; |
+ callback.Run(-1); |
+ return; |
+ } |
+ callback.Run(idle_time_ms/1000); |
+ } |
+ |
dbus::ObjectProxy* power_manager_proxy_; |
ObserverList<Observer> observers_; |
base::WeakPtrFactory<PowerManagerClientImpl> weak_ptr_factory_; |
@@ -291,6 +319,11 @@ class PowerManagerClientStubImpl : public PowerManagerClient { |
virtual void RequestShutdown() OVERRIDE {} |
+ virtual void CalculateIdleTime(const CalculateIdleTimeCallback& callback) |
+ OVERRIDE { |
+ callback.Run(0); |
+ } |
+ |
private: |
void Update() { |
// We pause at 0 and 100% so that it's easier to check those conditions. |