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 #ifndef BatteryManager_h 6 #define BatteryManager_h 7 8 #include "bindings/v8/ScriptPromise.h" 9 #include "bindings/v8/ScriptPromiseResolverWithContext.h" 10 #include "core/dom/ContextLifecycleObserver.h" 11 #include "core/dom/Document.h" 12 #include "core/frame/DeviceEventControllerBase.h" 13 #include "modules/EventTargetModules.h" 14 #include "platform/heap/Handle.h" 15 16 namespace WebCore { 17 18 class BatteryStatus; 19 20 class BatteryManager FINAL : public RefCountedWillBeRefCountedGarbageCollected<BatteryManager>, public ActiveDOMObject, public DeviceEventControllerBase, public EventTargetWithInlineData { 21 REFCOUNTED_EVENT_TARGET(BatteryManager); 22 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(BatteryManager); 23 public: 24 virtual ~BatteryManager(); 25 static PassRefPtrWillBeRawPtr<BatteryManager> create(ExecutionContext*); 26 27 // Returns a promise object that will be resolved with this BatteryManager. 28 ScriptPromise startRequest(ScriptState*); 29 30 // EventTarget implementation. 31 virtual const WTF::AtomicString& interfaceName() const OVERRIDE { return EventTargetNames::BatteryManager; } 32 virtual ExecutionContext* executionContext() const OVERRIDE { return ContextLifecycleObserver::executionContext(); } 33 34 bool charging(); 35 double chargingTime(); 36 double dischargingTime(); 37 double level(); 38 39 DEFINE_ATTRIBUTE_EVENT_LISTENER(chargingchange); 40 DEFINE_ATTRIBUTE_EVENT_LISTENER(chargingtimechange); 41 DEFINE_ATTRIBUTE_EVENT_LISTENER(dischargingtimechange); 42 DEFINE_ATTRIBUTE_EVENT_LISTENER(levelchange); 43 44 // Inherited from DeviceEventControllerBase. 45 virtual void didUpdateData() OVERRIDE; 46 virtual void registerWithDispatcher() OVERRIDE; 47 virtual void unregisterWithDispatcher() OVERRIDE; 48 virtual bool hasLastData() OVERRIDE; 49 50 // ActiveDOMObject implementation. 51 virtual bool canSuspend() const { return true; } 52 virtual void suspend() OVERRIDE; 53 virtual void resume() OVERRIDE; 54 virtual void stop() OVERRIDE; 55 56 virtual void trace(Visitor*) OVERRIDE; 57 58 private: 59 enum State { 60 NotStarted, 61 Pending, 62 Resolved, 63 }; 64 65 explicit BatteryManager(ExecutionContext*); 66 67 RefPtr<ScriptPromiseResolverWithContext> m_resolver; 68 RefPtrWillBeMember<BatteryStatus> m_batteryStatus; 69 State m_state; 70 }; 71 72 } 73 74 #endif // BatteryManager_h 75