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