Home | History | Annotate | Download | only in power_monitor
      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 
     14 namespace base {
     15 
     16 class PowerMonitorSource;
     17 
     18 // A class used to monitor the power state change and notify the observers about
     19 // the change event.
     20 class 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