1/*
2 *  Copyright (C) 2012 Samsung Electronics
3 *
4 *  This library is free software; you can redistribute it and/or
5 *  modify it under the terms of the GNU Library General Public
6 *  License as published by the Free Software Foundation; either
7 *  version 2 of the License, or (at your option) any later version.
8 *
9 *  This library is distributed in the hope that it will be useful,
10 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 *  Library General Public License for more details.
13 *
14 *  You should have received a copy of the GNU Library General Public License
15 *  along with this library; see the file COPYING.LIB.  If not, write to
16 *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 *  Boston, MA 02110-1301, USA.
18 */
19
20#ifndef BatteryManager_h
21#define BatteryManager_h
22
23#if ENABLE(BATTERY_STATUS)
24
25#include "ActiveDOMObject.h"
26#include "BatteryStatus.h"
27#include "EventTarget.h"
28
29namespace WebCore {
30
31class BatteryController;
32class Navigator;
33class ScriptExecutionContext;
34
35class BatteryManager : public ActiveDOMObject, public RefCounted<BatteryManager>, public EventTarget {
36public:
37    virtual ~BatteryManager();
38    static PassRef<BatteryManager> create(Navigator*);
39
40    // EventTarget implementation.
41    virtual EventTargetInterface eventTargetInterface() const override { return BatteryManagerEventTargetInterfaceType; }
42    virtual ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
43
44    bool charging();
45    double chargingTime();
46    double dischargingTime();
47    double level();
48
49    DEFINE_ATTRIBUTE_EVENT_LISTENER(chargingchange);
50    DEFINE_ATTRIBUTE_EVENT_LISTENER(chargingtimechange);
51    DEFINE_ATTRIBUTE_EVENT_LISTENER(dischargingtimechange);
52    DEFINE_ATTRIBUTE_EVENT_LISTENER(levelchange);
53
54    void didChangeBatteryStatus(PassRefPtr<Event>, PassRefPtr<BatteryStatus>);
55    void updateBatteryStatus(PassRefPtr<BatteryStatus>);
56    void batteryControllerDestroyed() { m_batteryController = nullptr; }
57
58    using RefCounted<BatteryManager>::ref;
59    using RefCounted<BatteryManager>::deref;
60
61    // ActiveDOMObject implementation.
62    virtual bool canSuspend() const override { return true; }
63    virtual void suspend(ReasonForSuspension) override;
64    virtual void resume() override;
65    virtual void stop() override;
66
67protected:
68    virtual EventTargetData* eventTargetData() override { return &m_eventTargetData; }
69    virtual EventTargetData& ensureEventTargetData() override { return m_eventTargetData; }
70
71private:
72    explicit BatteryManager(Navigator*);
73
74    // EventTarget implementation.
75    virtual void refEventTarget() override { ref(); }
76    virtual void derefEventTarget() override { deref(); }
77
78    BatteryController* m_batteryController;
79    EventTargetData m_eventTargetData;
80    RefPtr<BatteryStatus> m_batteryStatus;
81};
82
83}
84
85#endif // BATTERY_STATUS
86#endif // BatteryManager_h
87
88