Chromium Code Reviews| Index: Source/modules/battery/BatteryManager.cpp |
| diff --git a/Source/modules/battery/BatteryManager.cpp b/Source/modules/battery/BatteryManager.cpp |
| index aa473753d2be64beff8fe1e66d389d25c920a1fe..8f4dc3e2b3fbe1f937ad42849a420e21aba108e9 100644 |
| --- a/Source/modules/battery/BatteryManager.cpp |
| +++ b/Source/modules/battery/BatteryManager.cpp |
| @@ -7,6 +7,7 @@ |
| #include "RuntimeEnabledFeatures.h" |
| #include "core/events/Event.h" |
| +#include "modules/battery/BatteryDispatcher.h" |
| #include "modules/battery/BatteryStatus.h" |
| #include <limits> |
| @@ -14,58 +15,105 @@ namespace WebCore { |
| PassRefPtrWillBeRawPtr<BatteryManager> BatteryManager::create(ExecutionContext* context) |
| { |
| - return adoptRefWillBeRefCountedGarbageCollected(new BatteryManager(context)); |
| + RefPtrWillBeRawPtr<BatteryManager> batteryManager(adoptRefWillBeRefCountedGarbageCollected(new BatteryManager(context))); |
| + batteryManager->suspendIfNeeded(); |
| + return batteryManager.release(); |
| } |
| BatteryManager::~BatteryManager() |
| { |
| + stopUpdating(); |
|
abarth-chromium
2014/04/17 23:02:15
Does a test fail if you remove this line?
|
| } |
| BatteryManager::BatteryManager(ExecutionContext* context) |
| - : ContextLifecycleObserver(context) |
| - , m_batteryStatus(nullptr) |
| + : ActiveDOMObject(context) |
| + , DeviceSensorEventController(*toDocument(context)) |
| { |
| + m_hasEventListener = true; |
| + startUpdating(); |
| } |
| bool BatteryManager::charging() |
| { |
| - return m_batteryStatus ? m_batteryStatus->charging() : true; |
| + if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData()) |
| + return lastData->charging(); |
| + |
| + return true; |
| } |
| double BatteryManager::chargingTime() |
| { |
| - if (!m_batteryStatus) |
| - return 0; |
| - |
| - if (!m_batteryStatus->charging()) |
| - return std::numeric_limits<double>::infinity(); |
| + if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData()) |
| + return lastData->chargingTime(); |
| - // The spec requires that if level == 1.0, chargingTime == 0 but this has to |
| - // be implement by the backend. Adding this assert will help enforcing it. |
| - ASSERT(level() != 1.0 && m_batteryStatus->chargingTime() == 0.0); |
| - |
| - return m_batteryStatus->chargingTime(); |
| + return 0; |
| } |
| double BatteryManager::dischargingTime() |
| { |
| - if (!m_batteryStatus || m_batteryStatus->charging()) |
| - return std::numeric_limits<double>::infinity(); |
| + if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData()) |
| + return lastData->dischargingTime(); |
| - return m_batteryStatus->dischargingTime(); |
| + return std::numeric_limits<double>::infinity(); |
| } |
| double BatteryManager::level() |
| { |
| - return m_batteryStatus ? m_batteryStatus->level() : 1; |
| + if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData()) |
| + return lastData->level(); |
| + |
| + return 1; |
| } |
| -void BatteryManager::didChangeBatteryStatus(PassRefPtrWillBeRawPtr<Event> event, PassOwnPtr<BatteryStatus> batteryStatus) |
| +void BatteryManager::didChangeBatteryStatus(PassRefPtrWillBeRawPtr<Event> event) |
| { |
| ASSERT(RuntimeEnabledFeatures::batteryStatusEnabled()); |
| - m_batteryStatus = batteryStatus; |
| dispatchEvent(event); |
| } |
| +void BatteryManager::registerWithDispatcher() |
| +{ |
| + BatteryDispatcher::instance().addClient(this); |
| +} |
| + |
| +void BatteryManager::unregisterWithDispatcher() |
| +{ |
| + BatteryDispatcher::instance().removeClient(this); |
| +} |
| + |
| +bool BatteryManager::hasLastData() |
| +{ |
| + return false; |
| +} |
| + |
| +PassRefPtrWillBeRawPtr<Event> BatteryManager::getLastEvent() |
| +{ |
| + // Events are dispached via BatteryManager::didChangeBatteryStatus() |
| + return nullptr; |
| +} |
| + |
| +bool BatteryManager::isNullEvent(Event*) |
| +{ |
| + return false; |
| +} |
| + |
| +void BatteryManager::suspend() |
| +{ |
| + m_hasEventListener = false; |
| + stopUpdating(); |
| +} |
| + |
| +void BatteryManager::resume() |
| +{ |
| + m_hasEventListener = true; |
| + startUpdating(); |
| +} |
| + |
| +void BatteryManager::stop() |
| +{ |
| + m_hasEventListener = false; |
| + stopUpdating(); |
| +} |
| + |
| } // namespace WebCore |