components: Cleanup and sort components_unittests deps list.
[chromium-blink-merge.git] / base / power_monitor / power_monitor_source.h
blobb8f41850ef2502e70f84c4a2d82e411f0ef289e2
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"
14 namespace base {
16 class PowerMonitor;
18 // Communicates power state changes to the power monitor.
19 class BASE_EXPORT PowerMonitorSource {
20 public:
21 PowerMonitorSource();
22 virtual ~PowerMonitorSource();
24 // Normalized list of power events.
25 enum PowerEvent {
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();
34 protected:
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,
49 // false otherwise.
50 virtual bool IsOnBatteryPowerImpl() = 0;
52 private:
53 bool on_battery_power_;
54 bool suspended_;
56 // This lock guards access to on_battery_power_, to ensure that
57 // IsOnBatteryPower can be called from any thread.
58 Lock battery_lock_;
60 DISALLOW_COPY_AND_ASSIGN(PowerMonitorSource);
63 } // namespace base
65 #endif // BASE_POWER_MONITOR_POWER_MONITOR_SOURCE_H_