diff options
Diffstat (limited to 'chrome/browser/extensions/extension_event_router.h')
-rw-r--r-- | chrome/browser/extensions/extension_event_router.h | 122 |
1 files changed, 29 insertions, 93 deletions
diff --git a/chrome/browser/extensions/extension_event_router.h b/chrome/browser/extensions/extension_event_router.h index 4afc4a2..4bcfc0e 100644 --- a/chrome/browser/extensions/extension_event_router.h +++ b/chrome/browser/extensions/extension_event_router.h @@ -14,8 +14,6 @@ #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" #include "base/values.h" -#include "chrome/browser/extensions/event_listener_map.h" -#include "chrome/common/extensions/event_filtering_info.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "ipc/ipc_sender.h" @@ -33,14 +31,7 @@ namespace extensions { class Extension; } -struct ExtensionEvent; - -using extensions::EventFilteringInfo; -using extensions::EventListener; -using extensions::EventListenerMap; - -class ExtensionEventRouter : public content::NotificationObserver, - public extensions::EventListenerMap::Delegate { +class ExtensionEventRouter : public content::NotificationObserver { public: // These constants convey the state of our knowledge of whether we're in // a user-caused gesture as part of DispatchEvent. @@ -57,8 +48,7 @@ class ExtensionEventRouter : public content::NotificationObserver, const std::string& event_name, const base::Value& event_args, const GURL& event_url, - UserGestureState user_gesture, - const extensions::EventFilteringInfo& info); + UserGestureState user_gesture); // This invocation is deprecated. All future consumers of this API should be // sending Values as event arguments, using the above version. @@ -67,8 +57,7 @@ class ExtensionEventRouter : public content::NotificationObserver, const std::string& event_name, const std::string& event_args, const GURL& event_url, - UserGestureState user_gesture, - const extensions::EventFilteringInfo& info); + UserGestureState user_gesture); explicit ExtensionEventRouter(Profile* profile); virtual ~ExtensionEventRouter(); @@ -93,21 +82,6 @@ class ExtensionEventRouter : public content::NotificationObserver, void RemoveLazyEventListener(const std::string& event_name, const std::string& extension_id); - // If |add_lazy_listener| is true also add the lazy version of this listener. - void AddFilteredEventListener(const std::string& event_name, - content::RenderProcessHost* process, - const std::string& extension_id, - const base::DictionaryValue& filter, - bool add_lazy_listener); - - // If |remove_lazy_listener| is true also remove the lazy version of this - // listener. - void RemoveFilteredEventListener(const std::string& event_name, - content::RenderProcessHost* process, - const std::string& extension_id, - const base::DictionaryValue& filter, - bool remove_lazy_listener); - // Returns true if there is at least one listener for the given event. bool HasEventListener(const std::string& event_name); @@ -125,14 +99,6 @@ class ExtensionEventRouter : public content::NotificationObserver, const std::string& event_name, const std::string& event_args, Profile* restrict_to_profile, - const GURL& event_url, - extensions::EventFilteringInfo info); - - // As above, but defaults |info| to EventFilteringInfo(). - void DispatchEventToRenderers( - const std::string& event_name, - const std::string& event_args, - Profile* restrict_to_profile, const GURL& event_url); // Same as above, except only send the event to the given extension. @@ -180,6 +146,9 @@ class ExtensionEventRouter : public content::NotificationObserver, void OnEventAck(Profile* profile, const std::string& extension_id); private: + // The details of an event to be dispatched. + struct ExtensionEvent; + // The extension and process that contains the event listener for a given // event. struct ListenerProcess; @@ -199,21 +168,16 @@ class ExtensionEventRouter : public content::NotificationObserver, const std::string& extension_id, const std::string& event_name); - // Shared by DispatchEvent*. If |restrict_to_extension_id| is empty, the - // event is broadcast. + // Shared by DispatchEvent*. If |extension_id| is empty, the event is + // broadcast. If |process| is non-NULL, the event is only dispatched to that + // particular process. // An event that just came off the pending list may not be delayed again. - void DispatchEventImpl(const std::string& restrict_to_extension_id, - const linked_ptr<ExtensionEvent>& event); - - // Ensures that all lazy background pages that are interested in the given - // event are loaded, and queues the event if the page is not ready yet. - void DispatchLazyEvent(const std::string& extension_id, + void DispatchEventImpl(const std::string& extension_id, const linked_ptr<ExtensionEvent>& event); - // Dispatches the event to the specified extension running in |process|. - void DispatchEventToProcess(const std::string& extension_id, - content::RenderProcessHost* process, - const linked_ptr<ExtensionEvent>& event); + // Dispatches the event to a single listener process. + void DispatchEventToListener(const ListenerProcess& listener, + const linked_ptr<ExtensionEvent>& event); // Returns false when the event is scoped to a profile and the listening // extension does not have access to events from that profile. Also fills @@ -225,9 +189,17 @@ class ExtensionEventRouter : public content::NotificationObserver, const linked_ptr<ExtensionEvent>& event, const base::Value** event_args); + // Ensures that all lazy background pages that are interested in the given + // event are loaded, and queues the event if the page is not ready yet. + // If |extension_id| is non-empty, we load only that extension's page + // (assuming it is interested in the event). + void LoadLazyBackgroundPagesForEvent( + const std::string& extension_id, + const linked_ptr<ExtensionEvent>& event); + // Possibly loads given extension's background page in preparation to // dispatch an event. - void MaybeLoadLazyBackgroundPageToDispatchEvent( + void MaybeLoadLazyBackgroundPage( Profile* profile, const extensions::Extension* extension, const linked_ptr<ExtensionEvent>& event); @@ -240,57 +212,21 @@ class ExtensionEventRouter : public content::NotificationObserver, void DispatchPendingEvent(const linked_ptr<ExtensionEvent>& event, ExtensionHost* host); - // Implementation of extensions::EventListenerMap::Delegate. - virtual void OnListenerAdded(const EventListener* listener) OVERRIDE; - virtual void OnListenerRemoved(const EventListener* listener) OVERRIDE; - Profile* profile_; content::NotificationRegistrar registrar_; scoped_refptr<ExtensionDevToolsManager> extension_devtools_manager_; - EventListenerMap listeners_; + // The list of active extension processes that are listening to events. + ListenerMap listeners_; - DISALLOW_COPY_AND_ASSIGN(ExtensionEventRouter); -}; + // The list of all the lazy (non-persistent) background pages that are + // listening to events. This is just a cache of the real list, which is + // stored on disk in the extension prefs. + ListenerMap lazy_listeners_; -struct ExtensionEvent { - std::string event_name; - scoped_ptr<Value> event_args; - GURL event_url; - Profile* restrict_to_profile; - scoped_ptr<Value> cross_incognito_args; - ExtensionEventRouter::UserGestureState user_gesture; - extensions::EventFilteringInfo info; - - ExtensionEvent(const std::string& event_name, - const Value& event_args, - const GURL& event_url, - Profile* restrict_to_profile, - const Value& cross_incognito_args, - ExtensionEventRouter::UserGestureState user_gesture, - const extensions::EventFilteringInfo& info); - - // TODO(gdk): This variant should be retired once the callers are switched to - // providing Values instead of just strings. - ExtensionEvent(const std::string& event_name, - const std::string& event_args, - const GURL& event_url, - Profile* restrict_to_profile, - const std::string& cross_incognito_args, - ExtensionEventRouter::UserGestureState user_gesture, - const extensions::EventFilteringInfo& info); - - ExtensionEvent(const std::string& event_name, - const Value& event_args, - const GURL& event_url, - Profile* restrict_to_profile, - ExtensionEventRouter::UserGestureState user_gesture, - const extensions::EventFilteringInfo& info); - - ~ExtensionEvent(); + DISALLOW_COPY_AND_ASSIGN(ExtensionEventRouter); }; - #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_EVENT_ROUTER_H_ |