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/BatteryManager.h" | 6 #include "modules/battery/BatteryManager.h" |
7 | 7 |
8 #include "RuntimeEnabledFeatures.h" | 8 #include "RuntimeEnabledFeatures.h" |
9 #include "modules/battery/BatteryDispatcher.h" | 9 #include "modules/battery/BatteryDispatcher.h" |
10 #include "modules/battery/BatteryStatus.h" | 10 #include "modules/battery/BatteryStatus.h" |
11 | 11 |
12 namespace WebCore { | 12 namespace WebCore { |
13 | 13 |
14 PassRefPtrWillBeRawPtr<BatteryManager> BatteryManager::create(ExecutionContext*
context) | 14 PassRefPtrWillBeRawPtr<BatteryManager> BatteryManager::create(ExecutionContext*
context) |
15 { | 15 { |
16 RefPtrWillBeRawPtr<BatteryManager> batteryManager(adoptRefWillBeRefCountedGa
rbageCollected(new BatteryManager(context))); | 16 RefPtrWillBeRawPtr<BatteryManager> batteryManager(adoptRefWillBeRefCountedGa
rbageCollected(new BatteryManager(context))); |
17 batteryManager->suspendIfNeeded(); | 17 batteryManager->suspendIfNeeded(); |
18 return batteryManager.release(); | 18 return batteryManager.release(); |
19 } | 19 } |
20 | 20 |
21 BatteryManager::~BatteryManager() | 21 BatteryManager::~BatteryManager() |
22 { | 22 { |
23 stopUpdating(); | 23 stopUpdating(); |
24 } | 24 } |
25 | 25 |
26 BatteryManager::BatteryManager(ExecutionContext* context) | 26 BatteryManager::BatteryManager(ExecutionContext* context) |
27 : ActiveDOMObject(context) | 27 : ActiveDOMObject(context) |
28 , DeviceEventControllerBase(toDocument(context)->page()) | 28 , DeviceEventControllerBase(toDocument(context)->page()) |
29 , m_batteryStatus(BatteryStatus::create()) | 29 , m_batteryStatus(BatteryStatus::create()) |
| 30 , m_state(NotStarted) |
30 { | 31 { |
31 m_hasEventListener = true; | 32 } |
32 startUpdating(); | 33 |
| 34 ScriptPromise BatteryManager::startRequest(ScriptState* scriptState) |
| 35 { |
| 36 if (m_state == Pending) |
| 37 return m_resolver->promise(); |
| 38 |
| 39 m_resolver = ScriptPromiseResolverWithContext::create(scriptState); |
| 40 ScriptPromise promise = m_resolver->promise(); |
| 41 |
| 42 if (m_state == Resolved) { |
| 43 // FIXME: Consider returning the same promise in this case. See crbug.co
m/385025. |
| 44 m_resolver->resolve(this); |
| 45 } else if (m_state == NotStarted) { |
| 46 m_state = Pending; |
| 47 m_hasEventListener = true; |
| 48 startUpdating(); |
| 49 } |
| 50 |
| 51 return promise; |
33 } | 52 } |
34 | 53 |
35 bool BatteryManager::charging() | 54 bool BatteryManager::charging() |
36 { | 55 { |
37 return m_batteryStatus->charging(); | 56 return m_batteryStatus->charging(); |
38 } | 57 } |
39 | 58 |
40 double BatteryManager::chargingTime() | 59 double BatteryManager::chargingTime() |
41 { | 60 { |
42 return m_batteryStatus->chargingTime(); | 61 return m_batteryStatus->chargingTime(); |
43 } | 62 } |
44 | 63 |
45 double BatteryManager::dischargingTime() | 64 double BatteryManager::dischargingTime() |
46 { | 65 { |
47 return m_batteryStatus->dischargingTime(); | 66 return m_batteryStatus->dischargingTime(); |
48 } | 67 } |
49 | 68 |
50 double BatteryManager::level() | 69 double BatteryManager::level() |
51 { | 70 { |
52 return m_batteryStatus->level(); | 71 return m_batteryStatus->level(); |
53 } | 72 } |
54 | 73 |
55 void BatteryManager::didUpdateData() | 74 void BatteryManager::didUpdateData() |
56 { | 75 { |
57 ASSERT(RuntimeEnabledFeatures::batteryStatusEnabled()); | 76 ASSERT(RuntimeEnabledFeatures::batteryStatusEnabled()); |
| 77 ASSERT(m_state != NotStarted); |
58 | 78 |
59 RefPtr<BatteryStatus> oldStatus = m_batteryStatus; | 79 RefPtr<BatteryStatus> oldStatus = m_batteryStatus; |
60 m_batteryStatus = BatteryDispatcher::instance().latestData(); | 80 m_batteryStatus = BatteryDispatcher::instance().latestData(); |
61 | 81 |
62 // BatteryDispatcher also holds a reference to m_batteryStatus. | 82 // BatteryDispatcher also holds a reference to m_batteryStatus. |
63 ASSERT(m_batteryStatus->refCount() > 1); | 83 ASSERT(m_batteryStatus->refCount() > 1); |
64 | 84 |
| 85 if (m_state == Pending) { |
| 86 ASSERT(m_resolver); |
| 87 m_state = Resolved; |
| 88 m_resolver->resolve(this); |
| 89 return; |
| 90 } |
| 91 |
65 Document* document = toDocument(executionContext()); | 92 Document* document = toDocument(executionContext()); |
66 if (document->activeDOMObjectsAreSuspended() || document->activeDOMObjectsAr
eStopped()) | 93 if (document->activeDOMObjectsAreSuspended() || document->activeDOMObjectsAr
eStopped()) |
67 return; | 94 return; |
68 | 95 |
69 ASSERT(oldStatus); | 96 ASSERT(oldStatus); |
70 | 97 |
71 if (m_batteryStatus->charging() != oldStatus->charging()) | 98 if (m_batteryStatus->charging() != oldStatus->charging()) |
72 dispatchEvent(Event::create(EventTypeNames::chargingchange)); | 99 dispatchEvent(Event::create(EventTypeNames::chargingchange)); |
73 if (m_batteryStatus->chargingTime() != oldStatus->chargingTime()) | 100 if (m_batteryStatus->chargingTime() != oldStatus->chargingTime()) |
74 dispatchEvent(Event::create(EventTypeNames::chargingtimechange)); | 101 dispatchEvent(Event::create(EventTypeNames::chargingtimechange)); |
(...skipping 30 matching lines...) Expand all Loading... |
105 startUpdating(); | 132 startUpdating(); |
106 } | 133 } |
107 | 134 |
108 void BatteryManager::stop() | 135 void BatteryManager::stop() |
109 { | 136 { |
110 m_hasEventListener = false; | 137 m_hasEventListener = false; |
111 stopUpdating(); | 138 stopUpdating(); |
112 } | 139 } |
113 | 140 |
114 } // namespace WebCore | 141 } // namespace WebCore |
OLD | NEW |