summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_event_router.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/extension_event_router.h')
-rw-r--r--chrome/browser/extensions/extension_event_router.h122
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_