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 DeviceEventControllerBase_h
6#define DeviceEventControllerBase_h
7
8#include "core/page/PageLifecycleObserver.h"
9#include "platform/Timer.h"
10
11namespace WebCore {
12
13// Base controller class for registering controllers with a dispatcher.
14// It watches page visibility and calls stopUpdating when page is not visible.
15// It provides a didUpdateData() callback method which is called when new data
16// it available.
17class DeviceEventControllerBase : public PageLifecycleObserver {
18public:
19    void startUpdating();
20    void stopUpdating();
21
22    // This is called when new data becomes available.
23    virtual void didUpdateData() = 0;
24
25protected:
26    explicit DeviceEventControllerBase(Page*);
27    virtual ~DeviceEventControllerBase();
28
29    virtual void registerWithDispatcher() = 0;
30    virtual void unregisterWithDispatcher() = 0;
31
32    // When true initiates a one-shot didUpdateData() when startUpdating() is called.
33    virtual bool hasLastData() = 0;
34
35    bool m_hasEventListener;
36
37private:
38    // Inherited from PageLifecycleObserver.
39    virtual void pageVisibilityChanged() OVERRIDE FINAL;
40
41    void oneShotCallback(Timer<DeviceEventControllerBase>*);
42
43    bool m_isActive;
44    Timer<DeviceEventControllerBase> m_timer;
45};
46
47} // namespace WebCore
48
49#endif // DeviceEventControllerBase_h
50