Index: extensions/browser/extension_message_filter.cc |
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc |
index f7e794bf7e5a94a2c086cdddd359ec3fc9dc85d6..e29748ed53c00d62146dd689453789d36ec1682a 100644 |
--- a/extensions/browser/extension_message_filter.cc |
+++ b/extensions/browser/extension_message_filter.cc |
@@ -95,6 +95,7 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { |
void ExtensionMessageFilter::OnExtensionAddListener( |
const std::string& extension_id, |
+ const GURL& listener_url, |
const std::string& event_name) { |
RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); |
if (!process) |
@@ -102,11 +103,16 @@ void ExtensionMessageFilter::OnExtensionAddListener( |
EventRouter* router = EventRouter::Get(browser_context_); |
if (!router) |
return; |
- router->AddEventListener(event_name, process, extension_id); |
+ // A valid |extension_id| is mutually exclusive to a valid |listener_url|. |
+ if (!extension_id.empty() && !listener_url.is_valid()) |
+ router->AddEventListener(event_name, process, extension_id); |
+ if (extension_id.empty() && listener_url.is_valid()) |
+ router->AddEventListenerForURL(event_name, process, listener_url); |
} |
void ExtensionMessageFilter::OnExtensionRemoveListener( |
const std::string& extension_id, |
+ const GURL& listener_url, |
const std::string& event_name) { |
RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); |
if (!process) |
@@ -114,7 +120,11 @@ void ExtensionMessageFilter::OnExtensionRemoveListener( |
EventRouter* router = EventRouter::Get(browser_context_); |
if (!router) |
return; |
- router->RemoveEventListener(event_name, process, extension_id); |
+ // A valid |extension_id| is mutually exclusive to a valid |listener_url|. |
+ if (!extension_id.empty() && !listener_url.is_valid()) |
+ router->RemoveEventListener(event_name, process, extension_id); |
+ if (extension_id.empty() && listener_url.is_valid()) |
+ router->RemoveEventListenerForURL(event_name, process, listener_url); |
} |
void ExtensionMessageFilter::OnExtensionAddLazyListener( |