| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ | 5 #ifndef EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ |
| 6 #define EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ | 6 #define EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 namespace extensions { | 21 namespace extensions { |
| 22 class ExceptionHandler; | 22 class ExceptionHandler; |
| 23 struct EventFilteringInfo; | 23 struct EventFilteringInfo; |
| 24 | 24 |
| 25 // The object to handle API events. This includes vending v8::Objects for the | 25 // The object to handle API events. This includes vending v8::Objects for the |
| 26 // event; handling adding, removing, and querying listeners; and firing events | 26 // event; handling adding, removing, and querying listeners; and firing events |
| 27 // to subscribed listeners. Designed to be used across JS contexts, but on a | 27 // to subscribed listeners. Designed to be used across JS contexts, but on a |
| 28 // single thread. | 28 // single thread. |
| 29 class APIEventHandler { | 29 class APIEventHandler { |
| 30 public: | 30 public: |
| 31 // The callback to be called when event listeners change. |was_manual| | 31 // The callback to be called when event listeners change. |
| 32 // indicates that the change was due to an extension calling addListener or | 32 // |update_lazy_listeners| indicates that the change was due to an extension |
| 33 // removeListener, rather than through something like context destruction. | 33 // calling addListener or removeListener on an event that supports lazy |
| 34 // listeners, rather than through something like context destruction or |
| 35 // removing a listener from an event that doesn't support lazy listeners. |
| 34 // See also APIEventListeners. | 36 // See also APIEventListeners. |
| 35 using EventListenersChangedMethod = | 37 using EventListenersChangedMethod = |
| 36 base::Callback<void(const std::string& event_name, | 38 base::Callback<void(const std::string& event_name, |
| 37 binding::EventListenersChanged, | 39 binding::EventListenersChanged, |
| 38 const base::DictionaryValue* filter, | 40 const base::DictionaryValue* filter, |
| 39 bool was_manual, | 41 bool update_lazy_listeners, |
| 40 v8::Local<v8::Context>)>; | 42 v8::Local<v8::Context>)>; |
| 41 | 43 |
| 42 APIEventHandler(const binding::RunJSFunction& call_js, | 44 APIEventHandler(const binding::RunJSFunction& call_js, |
| 43 const binding::RunJSFunctionSync& call_js_sync, | 45 const binding::RunJSFunctionSync& call_js_sync, |
| 44 const EventListenersChangedMethod& listeners_changed, | 46 const EventListenersChangedMethod& listeners_changed, |
| 45 ExceptionHandler* exception_handler); | 47 ExceptionHandler* exception_handler); |
| 46 ~APIEventHandler(); | 48 ~APIEventHandler(); |
| 47 | 49 |
| 48 // Returns a new v8::Object for an event with the given |event_name|. If | 50 // Returns a new v8::Object for an event with the given |event_name|. If |
| 49 // |notify_on_change| is true, notifies whenever listeners state is changed. | 51 // |notify_on_change| is true, notifies whenever listeners state is changed. |
| 52 // TODO(devlin): Maybe worth creating a Params struct to hold the event |
| 53 // information? |
| 50 v8::Local<v8::Object> CreateEventInstance(const std::string& event_name, | 54 v8::Local<v8::Object> CreateEventInstance(const std::string& event_name, |
| 51 bool supports_filters, | 55 bool supports_filters, |
| 56 bool supports_lazy_listeners, |
| 52 int max_listeners, | 57 int max_listeners, |
| 53 bool notify_on_change, | 58 bool notify_on_change, |
| 54 v8::Local<v8::Context> context); | 59 v8::Local<v8::Context> context); |
| 55 | 60 |
| 56 // Creates a new event without any name. This is used by custom bindings when | 61 // Creates a new event without any name. This is used by custom bindings when |
| 57 // the entirety of the logic for the event is contained in the renderer. These | 62 // the entirety of the logic for the event is contained in the renderer. These |
| 58 // events do not notify of new/removed listeners or allow for dispatching | 63 // events do not notify of new/removed listeners or allow for dispatching |
| 59 // through FireEventInContext(). | 64 // through FireEventInContext(). |
| 60 v8::Local<v8::Object> CreateAnonymousEventInstance( | 65 v8::Local<v8::Object> CreateAnonymousEventInstance( |
| 61 v8::Local<v8::Context> context); | 66 v8::Local<v8::Context> context); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 // The exception handler associated with the bindings system; guaranteed to | 114 // The exception handler associated with the bindings system; guaranteed to |
| 110 // outlive this object. | 115 // outlive this object. |
| 111 ExceptionHandler* const exception_handler_; | 116 ExceptionHandler* const exception_handler_; |
| 112 | 117 |
| 113 DISALLOW_COPY_AND_ASSIGN(APIEventHandler); | 118 DISALLOW_COPY_AND_ASSIGN(APIEventHandler); |
| 114 }; | 119 }; |
| 115 | 120 |
| 116 } // namespace extensions | 121 } // namespace extensions |
| 117 | 122 |
| 118 #endif // EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ | 123 #endif // EXTENSIONS_RENDERER_BINDINGS_API_EVENT_HANDLER_H_ |
| OLD | NEW |