| // 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. | 
 |  | 
 | #include "base/power_monitor/power_monitor.h" | 
 |  | 
 | #include <utility> | 
 |  | 
 | #include "base/power_monitor/power_monitor_source.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | static PowerMonitor* g_power_monitor = nullptr; | 
 |  | 
 | PowerMonitor::PowerMonitor(std::unique_ptr<PowerMonitorSource> source) | 
 |     : observers_(new ObserverListThreadSafe<PowerObserver>()), | 
 |       source_(std::move(source)) { | 
 |   DCHECK(!g_power_monitor); | 
 |   g_power_monitor = this; | 
 | } | 
 |  | 
 | PowerMonitor::~PowerMonitor() { | 
 |   DCHECK_EQ(this, g_power_monitor); | 
 |   g_power_monitor = nullptr; | 
 | } | 
 |  | 
 | // static | 
 | PowerMonitor* PowerMonitor::Get() { | 
 |   return g_power_monitor; | 
 | } | 
 |  | 
 | void PowerMonitor::AddObserver(PowerObserver* obs) { | 
 |   observers_->AddObserver(obs); | 
 | } | 
 |  | 
 | void PowerMonitor::RemoveObserver(PowerObserver* obs) { | 
 |   observers_->RemoveObserver(obs); | 
 | } | 
 |  | 
 | PowerMonitorSource* PowerMonitor::Source() { | 
 |   return source_.get(); | 
 | } | 
 |  | 
 | bool PowerMonitor::IsOnBatteryPower() { | 
 |   return source_->IsOnBatteryPower(); | 
 | } | 
 |  | 
 | void PowerMonitor::NotifyPowerStateChange(bool battery_in_use) { | 
 |   DVLOG(1) << "PowerStateChange: " << (battery_in_use ? "On" : "Off") | 
 |            << " battery"; | 
 |   observers_->Notify(FROM_HERE, &PowerObserver::OnPowerStateChange, | 
 |                      battery_in_use); | 
 | } | 
 |  | 
 | void PowerMonitor::NotifySuspend() { | 
 |   DVLOG(1) << "Power Suspending"; | 
 |   observers_->Notify(FROM_HERE, &PowerObserver::OnSuspend); | 
 | } | 
 |  | 
 | void PowerMonitor::NotifyResume() { | 
 |   DVLOG(1) << "Power Resuming"; | 
 |   observers_->Notify(FROM_HERE, &PowerObserver::OnResume); | 
 | } | 
 |  | 
 | }  // namespace base |