1c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)// found in the LICENSE file.
4c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
5c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#ifndef PlatformEventDispatcher_h
6c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#define PlatformEventDispatcher_h
7c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
8c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "wtf/Vector.h"
9c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
10c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
11c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class PlatformEventController;
12c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)class PlatformEventDispatcher {
14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)public:
15c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void addController(PlatformEventController*);
16c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void removeController(PlatformEventController*);
17c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
18c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)protected:
19c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PlatformEventDispatcher();
20c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual ~PlatformEventDispatcher();
21c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
22c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void notifyControllers();
23c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
24c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void startListening() = 0;
25c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    virtual void stopListening() = 0;
26c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
27c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)private:
28c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void purgeControllers();
29c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
30c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    Vector<PlatformEventController*> m_controllers;
31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool m_needsPurge;
32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool m_isDispatching;
33c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)};
34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
36c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#endif // PlatformEventDispatcher_h
38