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 | |
38 void BatteryDispatcher::updateBatteryStatus(const blink::WebBatteryStatus& batte
ryStatus) | 28 void BatteryDispatcher::updateBatteryStatus(const blink::WebBatteryStatus& batte
ryStatus) |
39 { | 29 { |
40 RefPtr<BatteryStatus> oldStatus = m_batteryStatus; | |
41 m_batteryStatus = BatteryStatus::create(batteryStatus.charging, batteryStatu
s.chargingTime, batteryStatus.dischargingTime, batteryStatus.level); | 30 m_batteryStatus = BatteryStatus::create(batteryStatus.charging, batteryStatu
s.chargingTime, batteryStatus.dischargingTime, batteryStatus.level); |
42 | 31 notifyControllers(); |
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 | |
60 } | 32 } |
61 | 33 |
62 const BatteryStatus* BatteryDispatcher::getLatestData() | 34 BatteryStatus* BatteryDispatcher::latestData() |
63 { | 35 { |
64 return m_batteryStatus.get(); | 36 return m_batteryStatus.get(); |
65 } | 37 } |
66 | 38 |
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 | |
85 void BatteryDispatcher::startListening() | 39 void BatteryDispatcher::startListening() |
86 { | 40 { |
87 blink::Platform::current()->setBatteryStatusListener(this); | 41 blink::Platform::current()->setBatteryStatusListener(this); |
88 } | 42 } |
89 | 43 |
90 void BatteryDispatcher::stopListening() | 44 void BatteryDispatcher::stopListening() |
91 { | 45 { |
92 blink::Platform::current()->setBatteryStatusListener(0); | 46 blink::Platform::current()->setBatteryStatusListener(0); |
| 47 m_batteryStatus.clear(); |
93 } | 48 } |
94 | 49 |
95 } | 50 } |
OLD | NEW |