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