OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 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 #include "config.h" |
| 6 #include "modules/battery/BatteryDispatcher.h" |
| 7 |
| 8 #include "core/events/Event.h" |
| 9 #include "modules/battery/BatteryStatus.h" |
| 10 #include "platform/NotImplemented.h" |
| 11 #include "public/platform/Platform.h" |
| 12 |
| 13 namespace WebCore { |
| 14 |
| 15 BatteryDispatcher& BatteryDispatcher::instance() |
| 16 { |
| 17 DEFINE_STATIC_LOCAL(BatteryDispatcher, batteryDispatcher, ()); |
| 18 return batteryDispatcher; |
| 19 } |
| 20 |
| 21 BatteryDispatcher::BatteryDispatcher() |
| 22 { |
| 23 } |
| 24 |
| 25 BatteryDispatcher::~BatteryDispatcher() |
| 26 { |
| 27 } |
| 28 |
| 29 void BatteryDispatcher::addClient(BatteryManager* batteryManager) |
| 30 { |
| 31 addController(batteryManager); |
| 32 } |
| 33 |
| 34 void BatteryDispatcher::removeClient(BatteryManager* batteryManager) |
| 35 { |
| 36 removeController(batteryManager); |
| 37 } |
| 38 |
| 39 void BatteryDispatcher::updateBatteryStatus(const blink::WebBatteryStatus& batte
ryStatus) |
| 40 { |
| 41 RefPtr<BatteryStatus> oldStatus = m_batteryStatus; |
| 42 m_batteryStatus = BatteryStatus::create(batteryStatus.charging, batteryStatu
s.chargingTime, batteryStatus.dischargingTime, batteryStatus.level); |
| 43 |
| 44 if (oldStatus) { |
| 45 if (m_batteryStatus->charging() != oldStatus->charging()) |
| 46 didChangeBatteryStatus(EventTypeNames::chargingchange); |
| 47 if (m_batteryStatus->charging() && m_batteryStatus->chargingTime() != ol
dStatus->chargingTime()) |
| 48 didChangeBatteryStatus(EventTypeNames::chargingtimechange); |
| 49 if (!m_batteryStatus->charging() && m_batteryStatus->dischargingTime() !
= oldStatus->dischargingTime()) |
| 50 didChangeBatteryStatus(EventTypeNames::dischargingtimechange); |
| 51 if (m_batteryStatus->level() != oldStatus->level()) |
| 52 didChangeBatteryStatus(EventTypeNames::levelchange); |
| 53 } else { |
| 54 // There was no previous state. |
| 55 didChangeBatteryStatus(EventTypeNames::chargingchange); |
| 56 didChangeBatteryStatus(EventTypeNames::chargingtimechange); |
| 57 didChangeBatteryStatus(EventTypeNames::dischargingtimechange); |
| 58 didChangeBatteryStatus(EventTypeNames::levelchange); |
| 59 } |
| 60 |
| 61 } |
| 62 |
| 63 const BatteryStatus* BatteryDispatcher::getLatestData() |
| 64 { |
| 65 return m_batteryStatus.get(); |
| 66 } |
| 67 |
| 68 void BatteryDispatcher::didChangeBatteryStatus(const AtomicString& eventType) |
| 69 { |
| 70 RefPtrWillBeRawPtr<Event> event = Event::create(eventType); |
| 71 |
| 72 { |
| 73 TemporaryChange<bool> changeIsDispatching(m_isDispatching, true); |
| 74 // Don't fire listeners removed or added during event dispatch. |
| 75 size_t size = m_controllers.size(); |
| 76 for (size_t i = 0; i < size; ++i) { |
| 77 if (m_controllers[i]) |
| 78 static_cast<BatteryManager*>(m_controllers[i])->didChangeBattery
Status(event); |
| 79 } |
| 80 } |
| 81 |
| 82 if (m_needsPurge) |
| 83 purgeControllers(); |
| 84 } |
| 85 |
| 86 void BatteryDispatcher::startListening() |
| 87 { |
| 88 notImplemented(); |
| 89 } |
| 90 |
| 91 void BatteryDispatcher::stopListening() |
| 92 { |
| 93 notImplemented(); |
| 94 } |
| 95 |
| 96 } |
OLD | NEW |