| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ | 5 #ifndef UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ |
| 6 #define UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ | 6 #define UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 namespace test { | 26 namespace test { |
| 27 class PlatformEventSourceTestAPI; | 27 class PlatformEventSourceTestAPI; |
| 28 } | 28 } |
| 29 | 29 |
| 30 // PlatformEventSource receives events from a source and dispatches the events | 30 // PlatformEventSource receives events from a source and dispatches the events |
| 31 // to the appropriate dispatchers. | 31 // to the appropriate dispatchers. |
| 32 class EVENTS_EXPORT PlatformEventSource { | 32 class EVENTS_EXPORT PlatformEventSource { |
| 33 public: | 33 public: |
| 34 virtual ~PlatformEventSource(); | 34 virtual ~PlatformEventSource(); |
| 35 | 35 |
| 36 // Returns the thread-local singleton. |
| 36 static PlatformEventSource* GetInstance(); | 37 static PlatformEventSource* GetInstance(); |
| 37 | 38 |
| 38 // Adds a dispatcher to the dispatcher list. If a dispatcher is added during | 39 // Adds a dispatcher to the dispatcher list. If a dispatcher is added during |
| 39 // dispatching an event, then the newly added dispatcher also receives that | 40 // dispatching an event, then the newly added dispatcher also receives that |
| 40 // event. | 41 // event. |
| 41 void AddPlatformEventDispatcher(PlatformEventDispatcher* dispatcher); | 42 void AddPlatformEventDispatcher(PlatformEventDispatcher* dispatcher); |
| 42 | 43 |
| 43 // Removes a dispatcher from the dispatcher list. Dispatchers can safely be | 44 // Removes a dispatcher from the dispatcher list. Dispatchers can safely be |
| 44 // removed from the dispatcher list during an event is being dispatched, | 45 // removed from the dispatcher list during an event is being dispatched, |
| 45 // without affecting the dispatch of the event to other existing dispatchers. | 46 // without affecting the dispatch of the event to other existing dispatchers. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 57 PlatformEventDispatcher* dispatcher); | 58 PlatformEventDispatcher* dispatcher); |
| 58 | 59 |
| 59 // Called to indicate that the source should stop dispatching the current | 60 // Called to indicate that the source should stop dispatching the current |
| 60 // stream of events and wait until the next iteration of the message-loop to | 61 // stream of events and wait until the next iteration of the message-loop to |
| 61 // dispatch the rest of the events. | 62 // dispatch the rest of the events. |
| 62 virtual void StopCurrentEventStream(); | 63 virtual void StopCurrentEventStream(); |
| 63 | 64 |
| 64 void AddPlatformEventObserver(PlatformEventObserver* observer); | 65 void AddPlatformEventObserver(PlatformEventObserver* observer); |
| 65 void RemovePlatformEventObserver(PlatformEventObserver* observer); | 66 void RemovePlatformEventObserver(PlatformEventObserver* observer); |
| 66 | 67 |
| 68 // Creates PlatformEventSource and sets it as a thread-local singleton. |
| 67 static std::unique_ptr<PlatformEventSource> CreateDefault(); | 69 static std::unique_ptr<PlatformEventSource> CreateDefault(); |
| 68 | 70 |
| 69 protected: | 71 protected: |
| 70 PlatformEventSource(); | 72 PlatformEventSource(); |
| 71 | 73 |
| 72 // Dispatches |platform_event| to the dispatchers. If there is an override | 74 // Dispatches |platform_event| to the dispatchers. If there is an override |
| 73 // dispatcher installed using |OverrideDispatcher()|, then that dispatcher | 75 // dispatcher installed using |OverrideDispatcher()|, then that dispatcher |
| 74 // receives the event first. |POST_DISPATCH_QUIT_LOOP| flag is set in the | 76 // receives the event first. |POST_DISPATCH_QUIT_LOOP| flag is set in the |
| 75 // returned value if the event-source should stop dispatching events at the | 77 // returned value if the event-source should stop dispatching events at the |
| 76 // current message-loop iteration. | 78 // current message-loop iteration. |
| 77 virtual uint32_t DispatchEvent(PlatformEvent platform_event); | 79 virtual uint32_t DispatchEvent(PlatformEvent platform_event); |
| 78 | 80 |
| 79 private: | 81 private: |
| 80 friend class ScopedEventDispatcher; | 82 friend class ScopedEventDispatcher; |
| 81 friend class test::PlatformEventSourceTestAPI; | 83 friend class test::PlatformEventSourceTestAPI; |
| 82 | 84 |
| 83 static PlatformEventSource* instance_; | |
| 84 | |
| 85 // This is invoked when the list of dispatchers changes (i.e. a new dispatcher | 85 // This is invoked when the list of dispatchers changes (i.e. a new dispatcher |
| 86 // is added, or a dispatcher is removed). | 86 // is added, or a dispatcher is removed). |
| 87 virtual void OnDispatcherListChanged(); | 87 virtual void OnDispatcherListChanged(); |
| 88 | 88 |
| 89 void OnOverriddenDispatcherRestored(); | 89 void OnOverriddenDispatcherRestored(); |
| 90 | 90 |
| 91 // Use an base::ObserverList<> instead of an std::vector<> to store the list | 91 // Use an base::ObserverList<> instead of an std::vector<> to store the list |
| 92 // of | 92 // of |
| 93 // dispatchers, so that adding/removing dispatchers during an event dispatch | 93 // dispatchers, so that adding/removing dispatchers during an event dispatch |
| 94 // is well-defined. | 94 // is well-defined. |
| 95 typedef base::ObserverList<PlatformEventDispatcher> | 95 typedef base::ObserverList<PlatformEventDispatcher> |
| 96 PlatformEventDispatcherList; | 96 PlatformEventDispatcherList; |
| 97 PlatformEventDispatcherList dispatchers_; | 97 PlatformEventDispatcherList dispatchers_; |
| 98 PlatformEventDispatcher* overridden_dispatcher_; | 98 PlatformEventDispatcher* overridden_dispatcher_; |
| 99 | 99 |
| 100 // Used to keep track of whether the current override-dispatcher has been | 100 // Used to keep track of whether the current override-dispatcher has been |
| 101 // reset and a previous override-dispatcher has been restored. | 101 // reset and a previous override-dispatcher has been restored. |
| 102 bool overridden_dispatcher_restored_; | 102 bool overridden_dispatcher_restored_; |
| 103 | 103 |
| 104 base::ObserverList<PlatformEventObserver> observers_; | 104 base::ObserverList<PlatformEventObserver> observers_; |
| 105 | 105 |
| 106 DISALLOW_COPY_AND_ASSIGN(PlatformEventSource); | 106 DISALLOW_COPY_AND_ASSIGN(PlatformEventSource); |
| 107 }; | 107 }; |
| 108 | 108 |
| 109 } // namespace ui | 109 } // namespace ui |
| 110 | 110 |
| 111 #endif // UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ | 111 #endif // UI_EVENTS_PLATFORM_PLATFORM_EVENT_SOURCE_H_ |
| OLD | NEW |