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/core/v8/ScriptPromise.h"
9#include "bindings/core/v8/ScriptPromiseResolver.h"
10#include "core/dom/ContextLifecycleObserver.h"
11#include "core/frame/PlatformEventController.h"
12#include "modules/EventTargetModules.h"
13#include "platform/heap/Handle.h"
14
15namespace blink {
16
17class BatteryStatus;
18
19class BatteryManager FINAL : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<BatteryManager>, public ActiveDOMObject, public PlatformEventController, public EventTargetWithInlineData {
20    DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<BatteryManager>);
21    DEFINE_WRAPPERTYPEINFO();
22    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(BatteryManager);
23public:
24    virtual ~BatteryManager();
25    static 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 PlatformEventController.
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    virtual bool hasPendingActivity() const OVERRIDE;
56
57    virtual void trace(Visitor*) OVERRIDE;
58
59private:
60    enum State {
61        NotStarted,
62        Pending,
63        Resolved,
64    };
65
66    explicit BatteryManager(ExecutionContext*);
67
68    RefPtr<ScriptPromiseResolver> m_resolver;
69    Member<BatteryStatus> m_batteryStatus;
70    State m_state;
71};
72
73} // namespace blink
74
75#endif // BatteryManager_h
76