| // |
| // Copyright (C) 2015 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #ifndef SHILL_DBUS_CHROMEOS_POWER_MANAGER_PROXY_H_ |
| #define SHILL_DBUS_CHROMEOS_POWER_MANAGER_PROXY_H_ |
| |
| // 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. |
| |
| #include <stdint.h> |
| |
| #include <string> |
| #include <vector> |
| |
| #include <base/compiler_specific.h> |
| #include <power_manager/dbus-proxies.h> |
| |
| #include "shill/power_manager_proxy_interface.h" |
| |
| namespace shill { |
| |
| class EventDispatcher; |
| |
| class ChromeosPowerManagerProxy : public PowerManagerProxyInterface { |
| public: |
| // Constructs a PowerManager DBus object proxy with signals dispatched to |
| // |delegate|. |
| ChromeosPowerManagerProxy( |
| EventDispatcher* dispatcher, |
| const scoped_refptr<dbus::Bus>& bus, |
| PowerManagerProxyDelegate* delegate, |
| const base::Closure& service_appeared_callback, |
| const base::Closure& service_vanished_callback); |
| ~ChromeosPowerManagerProxy() override; |
| |
| // Inherited from PowerManagerProxyInterface. |
| bool RegisterSuspendDelay(base::TimeDelta timeout, |
| const std::string& description, |
| int* delay_id_out) override; |
| bool UnregisterSuspendDelay(int delay_id) override; |
| bool ReportSuspendReadiness(int delay_id, int suspend_id) override; |
| bool RegisterDarkSuspendDelay(base::TimeDelta timeout, |
| const std::string& description, |
| int* delay_id_out) override; |
| bool UnregisterDarkSuspendDelay(int delay_id) override; |
| bool ReportDarkSuspendReadiness(int delay_id, int suspend_id) override; |
| bool RecordDarkResumeWakeReason(const std::string& wake_reason) override; |
| |
| private: |
| // Signal handlers. |
| void SuspendImminent(const std::vector<uint8_t>& serialized_proto); |
| void SuspendDone(const std::vector<uint8_t>& serialized_proto); |
| void DarkSuspendImminent( |
| const std::vector<uint8_t>& serialized_proto); |
| |
| bool RegisterSuspendDelayInternal(bool is_dark, |
| base::TimeDelta timeout, |
| const std::string& description, |
| int* delay_id_out); |
| bool UnregisterSuspendDelayInternal(bool is_dark, int delay_id); |
| bool ReportSuspendReadinessInternal(bool is_dark, |
| int delay_id, |
| int suspend_id); |
| |
| // Called when service appeared or vanished. |
| void OnServiceAvailable(bool available); |
| |
| // Service name owner changed handler. |
| void OnServiceOwnerChanged(const std::string& old_owner, |
| const std::string& new_owner); |
| |
| // Called when signal is connected to the ObjectProxy. |
| void OnSignalConnected(const std::string& interface_name, |
| const std::string& signal_name, |
| bool success); |
| |
| std::unique_ptr<org::chromium::PowerManagerProxy> proxy_; |
| EventDispatcher* dispatcher_; |
| PowerManagerProxyDelegate* delegate_; |
| base::Closure service_appeared_callback_; |
| base::Closure service_vanished_callback_; |
| bool service_available_; |
| |
| base::WeakPtrFactory<ChromeosPowerManagerProxy> weak_factory_{this}; |
| DISALLOW_COPY_AND_ASSIGN(ChromeosPowerManagerProxy); |
| }; |
| |
| } // namespace shill |
| |
| #endif // SHILL_DBUS_CHROMEOS_POWER_MANAGER_PROXY_H_ |