1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_
6 #define BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_
8 #include "base/base_export.h"
9 #include "base/basictypes.h"
10 #include "base/memory/ref_counted.h"
11 #include "base/observer_list_threadsafe.h"
12 #include "base/synchronization/lock.h"
18 // Communicates power state changes to the power monitor.
19 class BASE_EXPORT PowerMonitorSource
{
22 virtual ~PowerMonitorSource();
24 // Normalized list of power events.
26 POWER_STATE_EVENT
, // The Power status of the system has changed.
27 SUSPEND_EVENT
, // The system is being suspended.
28 RESUME_EVENT
// The system is being resumed.
31 // Is the computer currently on battery power. Can be called on any thread.
32 bool IsOnBatteryPower();
35 friend class PowerMonitorTest
;
37 // Friend function that is allowed to access the protected ProcessPowerEvent.
38 friend void ProcessPowerEventHelper(PowerEvent
);
40 // Get the process-wide PowerMonitorSource (if not present, returns NULL).
41 static PowerMonitorSource
* Get();
43 // ProcessPowerEvent should only be called from a single thread, most likely
44 // the UI thread or, in child processes, the IO thread.
45 static void ProcessPowerEvent(PowerEvent event_id
);
47 // Platform-specific method to check whether the system is currently
48 // running on battery power. Returns true if running on batteries,
50 virtual bool IsOnBatteryPowerImpl() = 0;
53 bool on_battery_power_
;
56 // This lock guards access to on_battery_power_, to ensure that
57 // IsOnBatteryPower can be called from any thread.
60 DISALLOW_COPY_AND_ASSIGN(PowerMonitorSource
);
65 #endif // BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_