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.
4
5#ifndef BASE_POWER_MONITOR_POWER_MONITOR_H_
6#define BASE_POWER_MONITOR_POWER_MONITOR_H_
7
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/power_monitor/power_observer.h"
13
14namespace base {
15
16class PowerMonitorSource;
17
18// A class used to monitor the power state change and notify the observers about
19// the change event.
20class BASE_EXPORT PowerMonitor {
21 public:
22  // Takes ownership of |source|.
23  explicit PowerMonitor(scoped_ptr<PowerMonitorSource> source);
24  ~PowerMonitor();
25
26  // Get the process-wide PowerMonitor (if not present, returns NULL).
27  static PowerMonitor* Get();
28
29  // Add and remove an observer.
30  // Can be called from any thread.
31  // Must not be called from within a notification callback.
32  void AddObserver(PowerObserver* observer);
33  void RemoveObserver(PowerObserver* observer);
34
35  // Is the computer currently on battery power.
36  bool IsOnBatteryPower();
37
38 private:
39  friend class PowerMonitorSource;
40
41  PowerMonitorSource* Source();
42
43  void NotifyPowerStateChange(bool battery_in_use);
44  void NotifySuspend();
45  void NotifyResume();
46
47  scoped_refptr<ObserverListThreadSafe<PowerObserver> > observers_;
48  scoped_ptr<PowerMonitorSource> source_;
49
50  DISALLOW_COPY_AND_ASSIGN(PowerMonitor);
51};
52
53}  // namespace base
54
55#endif  // BASE_POWER_MONITOR_POWER_MONITOR_H_
56