| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SHILL_POWER_MANAGER_PROXY_ |
| #define SHILL_POWER_MANAGER_PROXY_ |
| |
| // An implementation of PowerManagerProxyInterface. It connects to the dbus and |
| // listens for events from the power manager. When they occur, the delegate's |
| // member functions are called. |
| |
| // Do not instantiate this class directly. use |
| // ProxyFactory::CreatePowerManagerProxy instead. |
| |
| #include <stdint.h> |
| |
| #include <string> |
| #include <vector> |
| |
| #include <base/compiler_specific.h> |
| |
| #include "shill/dbus_bindings/power_manager.h" |
| #include "shill/power_manager_proxy_interface.h" |
| #include "shill/proxy_factory.h" |
| |
| namespace shill { |
| |
| class PowerManagerProxy : public PowerManagerProxyInterface { |
| public: |
| virtual ~PowerManagerProxy(); |
| |
| // Inherited from PowerManagerProxyInterface. |
| virtual bool RegisterSuspendDelay(base::TimeDelta timeout, |
| const std::string &description, |
| int *delay_id_out) OVERRIDE; |
| virtual bool UnregisterSuspendDelay(int delay_id) OVERRIDE; |
| virtual bool ReportSuspendReadiness(int delay_id, int suspend_id) OVERRIDE; |
| |
| private: |
| // Only this factory method can create a PowerManagerProxy. |
| friend PowerManagerProxyInterface *ProxyFactory::CreatePowerManagerProxy( |
| PowerManagerProxyDelegate *delegate); |
| |
| class Proxy : public org::chromium::PowerManager_proxy, |
| public DBus::ObjectProxy { |
| public: |
| Proxy(PowerManagerProxyDelegate *delegate, |
| DBus::Connection *connection); |
| virtual ~Proxy(); |
| |
| private: |
| // Signal callbacks inherited from org::chromium::PowerManager_proxy. |
| virtual void SuspendImminent(const std::vector<uint8_t> &serialized_proto); |
| virtual void PowerStateChanged(const std::string &new_power_state); |
| |
| PowerManagerProxyDelegate *const delegate_; |
| |
| DISALLOW_COPY_AND_ASSIGN(Proxy); |
| }; |
| |
| // The PowerStateChanged event occurs on this path. The root path ("/") is |
| // used because the powerd_suspend script sends signals on that path. When |
| // the powerd_suspend script is fixed to use the same path as the rest of the |
| // power manager, then this proxy can use the usual power manager path |
| // power_manager::kPowerManagerServicePath. |
| static const char kRootPath[]; |
| |
| // Constructs a PowerManager DBus object proxy with signals dispatched to |
| // |delegate|. |
| PowerManagerProxy(PowerManagerProxyDelegate *delegate, |
| DBus::Connection *connection); |
| |
| Proxy proxy_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PowerManagerProxy); |
| }; |
| |
| } // namespace shill |
| |
| #endif // SHILL_POWER_MANAGER_PROXY_ |