Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / battery / BatteryManager.cpp
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/BatteryManager.h"
7
8 #include "RuntimeEnabledFeatures.h"
9 #include "core/events/Event.h"
10 #include "modules/battery/BatteryDispatcher.h"
11 #include "modules/battery/BatteryStatus.h"
12 #include <limits>
13
14 namespace WebCore {
15
16 PassRefPtrWillBeRawPtr<BatteryManager> BatteryManager::create(ExecutionContext* context)
17 {
18     RefPtrWillBeRawPtr<BatteryManager> batteryManager(adoptRefWillBeRefCountedGarbageCollected(new BatteryManager(context)));
19     batteryManager->suspendIfNeeded();
20     return batteryManager.release();
21 }
22
23 BatteryManager::~BatteryManager()
24 {
25 }
26
27 BatteryManager::BatteryManager(ExecutionContext* context)
28     : ActiveDOMObject(context)
29     , DeviceSensorEventController(toDocument(context)->page())
30 {
31     m_hasEventListener = true;
32     startUpdating();
33 }
34
35 bool BatteryManager::charging()
36 {
37     if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData())
38         return lastData->charging();
39
40     return true;
41 }
42
43 double BatteryManager::chargingTime()
44 {
45     if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData())
46         return lastData->chargingTime();
47
48     return 0;
49 }
50
51 double BatteryManager::dischargingTime()
52 {
53     if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData())
54         return lastData->dischargingTime();
55
56     return std::numeric_limits<double>::infinity();
57 }
58
59 double BatteryManager::level()
60 {
61     if (const BatteryStatus* lastData = BatteryDispatcher::instance().getLatestData())
62         return lastData->level();
63
64     return 1;
65 }
66
67 void BatteryManager::didChangeBatteryStatus(PassRefPtrWillBeRawPtr<Event> event)
68 {
69     ASSERT(RuntimeEnabledFeatures::batteryStatusEnabled());
70
71     dispatchEvent(event);
72 }
73
74 void BatteryManager::registerWithDispatcher()
75 {
76     BatteryDispatcher::instance().addClient(this);
77 }
78
79 void BatteryManager::unregisterWithDispatcher()
80 {
81     BatteryDispatcher::instance().removeClient(this);
82 }
83
84 bool BatteryManager::hasLastData()
85 {
86     return false;
87 }
88
89 PassRefPtrWillBeRawPtr<Event> BatteryManager::getLastEvent()
90 {
91     // Events are dispached via BatteryManager::didChangeBatteryStatus()
92     return nullptr;
93 }
94
95 bool BatteryManager::isNullEvent(Event*)
96 {
97     return false;
98 }
99
100 Document* BatteryManager::document()
101 {
102     return toDocument(executionContext());
103 }
104
105 void BatteryManager::suspend()
106 {
107     m_hasEventListener = false;
108     stopUpdating();
109 }
110
111 void BatteryManager::resume()
112 {
113     m_hasEventListener = true;
114     startUpdating();
115 }
116
117 void BatteryManager::stop()
118 {
119     m_hasEventListener = false;
120     stopUpdating();
121 }
122
123 } // namespace WebCore