| Index: chromeos/dbus/power_manager_client.cc
|
| diff --git a/chromeos/dbus/power_manager_client.cc b/chromeos/dbus/power_manager_client.cc
|
| index 54b0cc42edbaf5a0d6f6833e3e17f1842789a433..348a1a06b3ff9fb21e198738034afe95de70f360 100644
|
| --- a/chromeos/dbus/power_manager_client.cc
|
| +++ b/chromeos/dbus/power_manager_client.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/stringprintf.h"
|
| #include "base/time.h"
|
| #include "base/timer.h"
|
| +#include "chromeos/dbus/power_manager/suspend.pb.h"
|
| #include "chromeos/dbus/power_state_control.pb.h"
|
| #include "chromeos/dbus/power_supply_properties.pb.h"
|
| #include "chromeos/dbus/video_activity_update.pb.h"
|
| @@ -25,6 +26,8 @@
|
|
|
| namespace chromeos {
|
|
|
| +const int kSuspendDelayTimeoutMs = 5000;
|
| +
|
| // The PowerManagerClient implementation used in production.
|
| class PowerManagerClientImpl : public PowerManagerClient {
|
| public:
|
| @@ -78,9 +81,55 @@ 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::kSuspendImminentSignal,
|
| + base::Bind(
|
| + &PowerManagerClientImpl::SuspendImminentReceived,
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + base::Bind(&PowerManagerClientImpl::SignalConnected,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| +
|
| + // Register to powerd for suspend notifications.
|
| + dbus::MethodCall method_call(
|
| + power_manager::kPowerManagerInterface,
|
| + power_manager::kRegisterSuspendDelayMethod);
|
| + dbus::MessageWriter writer(&method_call);
|
| +
|
| + power_manager::RegisterSuspendDelayRequest protobuf_request;
|
| + protobuf_request.Clear();
|
| + protobuf_request.set_timeout(kSuspendDelayTimeoutMs);
|
| +
|
| + if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
|
| + LOG(ERROR) << "Error calling "
|
| + << power_manager::kRegisterSuspendDelayMethod;
|
| + return;
|
| + }
|
| + power_manager_proxy_->CallMethod(
|
| + &method_call,
|
| + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + dbus::ObjectProxy::EmptyResponseCallback());
|
| +
|
| + power_manager::RegisterSuspendDelayReply protobuf_reply;
|
| + delay_id_ = protobuf_reply.delay_id();
|
| }
|
|
|
| virtual ~PowerManagerClientImpl() {
|
| + // Unregister from powerd for suspend notifications.
|
| + dbus::MethodCall method_call(
|
| + power_manager::kPowerManagerInterface,
|
| + power_manager::kUnregisterSuspendDelayMethod);
|
| + dbus::MessageWriter writer(&method_call);
|
| +
|
| + power_manager::UnregisterSuspendDelayRequest protobuf;
|
| + protobuf.Clear();
|
| + protobuf.set_delay_id(delay_id_);
|
| +
|
| + power_manager_proxy_->CallMethod(
|
| + &method_call,
|
| + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + dbus::ObjectProxy::EmptyResponseCallback());
|
| }
|
|
|
| // PowerManagerClient overrides:
|
| @@ -463,8 +512,38 @@ class PowerManagerClientImpl : public PowerManagerClient {
|
| FOR_EACH_OBSERVER(Observer, observers_, ScreenDimmingRequested(state));
|
| }
|
|
|
| + void SuspendImminentReceived(dbus::Signal* signal) {
|
| + dbus::MessageReader reader(signal);
|
| + power_manager::SuspendImminent protobuf_imminent;
|
| + int32 suspend_id = protobuf_imminent.suspend_id();
|
| +
|
| + FOR_EACH_OBSERVER(Observer, observers_, DelaySuspend());
|
| +
|
| + dbus::MethodCall method_call(
|
| + power_manager::kPowerManagerInterface,
|
| + power_manager::kHandleSuspendReadinessMethod);
|
| + dbus::MessageWriter writer(&method_call);
|
| +
|
| + power_manager::SuspendReadinessInfo protobuf_request;
|
| + protobuf_request.Clear();
|
| + protobuf_request.set_delay_id(delay_id_);
|
| + protobuf_request.set_suspend_id(suspend_id);
|
| +
|
| + if (!writer.AppendProtoAsArrayOfBytes(protobuf_request)) {
|
| + LOG(ERROR) << "Error calling "
|
| + << power_manager::kHandleSuspendReadinessMethod;
|
| + return;
|
| + }
|
| + power_manager_proxy_->CallMethod(
|
| + &method_call,
|
| + dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + dbus::ObjectProxy::EmptyResponseCallback());
|
| + }
|
| +
|
| dbus::ObjectProxy* power_manager_proxy_;
|
| ObserverList<Observer> observers_;
|
| + std::list<SuspendImminentCallback> suspend_delay_callback_list_;
|
| + int32 delay_id_;
|
|
|
| // Note: This should remain the last member so it'll be destroyed and
|
| // invalidate its weak pointers before any other members are destroyed.
|
|
|