// Copyright 2013 The Chromium 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 BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_ #define BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_ #include "base/base_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/observer_list_threadsafe.h" #include "base/synchronization/lock.h" namespace base { class PowerMonitor; // Communicates power state changes to the power monitor. class BASE_EXPORT PowerMonitorSource { public: PowerMonitorSource(); virtual ~PowerMonitorSource(); // Normalized list of power events. enum PowerEvent { POWER_STATE_EVENT, // The Power status of the system has changed. SUSPEND_EVENT, // The system is being suspended. RESUME_EVENT // The system is being resumed. }; // Is the computer currently on battery power. Can be called on any thread. bool IsOnBatteryPower(); // Called by PowerMonitor just before PowerMonitor destroys both itself and // this instance). After return from this call it is no longer safe for // subclasses to call into PowerMonitor (e.g., via PowerMonitor::Get(). Hence, // subclasses should take any necessary actions here to ensure that after // return from this invocation they will no longer make any calls on // PowerMonitor. virtual void Shutdown() = 0; protected: friend class PowerMonitorTest; // Friend function that is allowed to access the protected ProcessPowerEvent. friend void ProcessPowerEventHelper(PowerEvent); // ProcessPowerEvent should only be called from a single thread, most likely // the UI thread or, in child processes, the IO thread. static void ProcessPowerEvent(PowerEvent event_id); // Platform-specific method to check whether the system is currently // running on battery power. Returns true if running on batteries, // false otherwise. virtual bool IsOnBatteryPowerImpl() = 0; // Sets the initial state for |on_battery_power_|, which defaults to false // since not all implementations can provide the value at construction. May // only be called before a base::PowerMonitor has been created. void SetInitialOnBatteryPowerState(bool on_battery_power); private: bool on_battery_power_ = false; bool suspended_ = false; // This lock guards access to on_battery_power_, to ensure that // IsOnBatteryPower can be called from any thread. Lock battery_lock_; DISALLOW_COPY_AND_ASSIGN(PowerMonitorSource); }; } // namespace base #endif // BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_