Index: extensions/browser/extension_message_filter.cc |
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc |
index 6bdfac024e5f755f20880373371f1b489ddc93e1..91c46acfb7aa70672acb0827f6a278859e09706a 100644 |
--- a/extensions/browser/extension_message_filter.cc |
+++ b/extensions/browser/extension_message_filter.cc |
@@ -142,7 +142,8 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { |
void ExtensionMessageFilter::OnExtensionAddListener( |
const std::string& extension_id, |
const GURL& listener_url, |
- const std::string& event_name) { |
+ const std::string& event_name, |
+ int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
@@ -151,10 +152,16 @@ void ExtensionMessageFilter::OnExtensionAddListener( |
if (!process) |
return; |
+ EventRouter* event_router = GetEventRouter(); |
if (crx_file::id_util::IdIsValid(extension_id)) { |
- GetEventRouter()->AddEventListener(event_name, process, extension_id); |
+ if (worker_thread_id != kNonWorkerThreadId) { |
+ event_router->AddServiceWorkerEventListener( |
+ event_name, process, extension_id, worker_thread_id); |
+ } else { |
+ event_router->AddEventListener(event_name, process, extension_id); |
+ } |
} else if (listener_url.is_valid()) { |
- GetEventRouter()->AddEventListenerForURL(event_name, process, listener_url); |
+ event_router->AddEventListenerForURL(event_name, process, listener_url); |
} else { |
NOTREACHED() << "Tried to add an event listener without a valid " |
<< "extension ID nor listener URL"; |
@@ -164,7 +171,8 @@ void ExtensionMessageFilter::OnExtensionAddListener( |
void ExtensionMessageFilter::OnExtensionRemoveListener( |
const std::string& extension_id, |
const GURL& listener_url, |
- const std::string& event_name) { |
+ const std::string& event_name, |
+ int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
@@ -174,7 +182,12 @@ void ExtensionMessageFilter::OnExtensionRemoveListener( |
return; |
if (crx_file::id_util::IdIsValid(extension_id)) { |
- GetEventRouter()->RemoveEventListener(event_name, process, extension_id); |
+ if (worker_thread_id != kNonWorkerThreadId) { |
+ GetEventRouter()->RemoveServiceWorkerEventListener( |
+ event_name, process, extension_id, worker_thread_id); |
+ } else { |
+ GetEventRouter()->RemoveEventListener(event_name, process, extension_id); |
+ } |
} else if (listener_url.is_valid()) { |
GetEventRouter()->RemoveEventListenerForURL(event_name, process, |
listener_url); |
@@ -185,21 +198,35 @@ void ExtensionMessageFilter::OnExtensionRemoveListener( |
} |
void ExtensionMessageFilter::OnExtensionAddLazyListener( |
- const std::string& extension_id, const std::string& event_name) { |
+ const std::string& extension_id, |
+ const std::string& event_name, |
+ int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
- GetEventRouter()->AddLazyEventListener(event_name, extension_id); |
+ if (worker_thread_id == kNonWorkerThreadId) { |
+ GetEventRouter()->AddLazyEventListener(event_name, extension_id); |
+ } else { |
+ GetEventRouter()->AddLazyServiceWorkerEventListener( |
+ event_name, extension_id, worker_thread_id); |
+ } |
} |
void ExtensionMessageFilter::OnExtensionRemoveLazyListener( |
- const std::string& extension_id, const std::string& event_name) { |
+ const std::string& extension_id, |
+ const std::string& event_name, |
+ int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
- GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); |
+ if (worker_thread_id == kNonWorkerThreadId) { |
+ GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); |
+ } else { |
+ GetEventRouter()->RemoveLazyServiceWorkerEventListener( |
+ event_name, extension_id, worker_thread_id); |
+ } |
} |
void ExtensionMessageFilter::OnExtensionAddFilteredListener( |