Index: extensions/browser/extension_message_filter.cc |
diff --git a/extensions/browser/extension_message_filter.cc b/extensions/browser/extension_message_filter.cc |
index 91c46acfb7aa70672acb0827f6a278859e09706a..42ccc9250a81efa04287abafe9521613a587f99a 100644 |
--- a/extensions/browser/extension_message_filter.cc |
+++ b/extensions/browser/extension_message_filter.cc |
@@ -90,6 +90,8 @@ void ExtensionMessageFilter::OverrideThreadForMessage( |
case ExtensionHostMsg_RemoveListener::ID: |
case ExtensionHostMsg_AddLazyListener::ID: |
case ExtensionHostMsg_RemoveLazyListener::ID: |
+ case ExtensionHostMsg_AddLazyServiceWorkerListener::ID: |
+ case ExtensionHostMsg_RemoveLazyServiceWorkerListener::ID: |
case ExtensionHostMsg_AddFilteredListener::ID: |
case ExtensionHostMsg_RemoveFilteredListener::ID: |
case ExtensionHostMsg_ShouldSuspendAck::ID: |
@@ -122,6 +124,10 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { |
OnExtensionAddLazyListener) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyListener, |
OnExtensionRemoveLazyListener) |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddLazyServiceWorkerListener, |
+ OnExtensionAddLazyServiceWorkerListener); |
+ IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveLazyServiceWorkerListener, |
+ OnExtensionRemoveLazyServiceWorkerListener); |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_AddFilteredListener, |
OnExtensionAddFilteredListener) |
IPC_MESSAGE_HANDLER(ExtensionHostMsg_RemoveFilteredListener, |
@@ -141,7 +147,7 @@ bool ExtensionMessageFilter::OnMessageReceived(const IPC::Message& message) { |
void ExtensionMessageFilter::OnExtensionAddListener( |
const std::string& extension_id, |
- const GURL& listener_url, |
+ const GURL& listener_or_worker_scope_url, |
const std::string& event_name, |
int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
@@ -154,14 +160,19 @@ void ExtensionMessageFilter::OnExtensionAddListener( |
EventRouter* event_router = GetEventRouter(); |
if (crx_file::id_util::IdIsValid(extension_id)) { |
- if (worker_thread_id != kNonWorkerThreadId) { |
+ const bool is_service_worker_context = |
+ worker_thread_id != kNonWorkerThreadId; |
+ if (is_service_worker_context) { |
+ DCHECK(listener_or_worker_scope_url.is_valid()); |
event_router->AddServiceWorkerEventListener( |
- event_name, process, extension_id, worker_thread_id); |
+ event_name, process, extension_id, listener_or_worker_scope_url, |
+ worker_thread_id); |
} else { |
event_router->AddEventListener(event_name, process, extension_id); |
} |
- } else if (listener_url.is_valid()) { |
- event_router->AddEventListenerForURL(event_name, process, listener_url); |
+ } else if (listener_or_worker_scope_url.is_valid()) { |
+ event_router->AddEventListenerForURL(event_name, process, |
+ listener_or_worker_scope_url); |
} else { |
NOTREACHED() << "Tried to add an event listener without a valid " |
<< "extension ID nor listener URL"; |
@@ -170,7 +181,7 @@ void ExtensionMessageFilter::OnExtensionAddListener( |
void ExtensionMessageFilter::OnExtensionRemoveListener( |
const std::string& extension_id, |
- const GURL& listener_url, |
+ const GURL& listener_or_worker_scope_url, |
const std::string& event_name, |
int worker_thread_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
@@ -182,15 +193,19 @@ void ExtensionMessageFilter::OnExtensionRemoveListener( |
return; |
if (crx_file::id_util::IdIsValid(extension_id)) { |
- if (worker_thread_id != kNonWorkerThreadId) { |
+ const bool is_service_worker_context = |
+ worker_thread_id != kNonWorkerThreadId; |
+ if (is_service_worker_context) { |
+ DCHECK(listener_or_worker_scope_url.is_valid()); |
GetEventRouter()->RemoveServiceWorkerEventListener( |
- event_name, process, extension_id, worker_thread_id); |
+ event_name, process, extension_id, listener_or_worker_scope_url, |
+ worker_thread_id); |
} else { |
GetEventRouter()->RemoveEventListener(event_name, process, extension_id); |
} |
- } else if (listener_url.is_valid()) { |
+ } else if (listener_or_worker_scope_url.is_valid()) { |
GetEventRouter()->RemoveEventListenerForURL(event_name, process, |
- listener_url); |
+ listener_or_worker_scope_url); |
} else { |
NOTREACHED() << "Tried to remove an event listener without a valid " |
<< "extension ID nor listener URL"; |
@@ -198,35 +213,46 @@ void ExtensionMessageFilter::OnExtensionRemoveListener( |
} |
void ExtensionMessageFilter::OnExtensionAddLazyListener( |
+ const std::string& extension_id, |
+ const std::string& event_name) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ if (!browser_context_) |
+ return; |
+ GetEventRouter()->AddLazyEventListener(event_name, extension_id); |
+} |
+ |
+void ExtensionMessageFilter::OnExtensionAddLazyServiceWorkerListener( |
const std::string& extension_id, |
const std::string& event_name, |
- int worker_thread_id) { |
+ const GURL& service_worker_scope) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
- if (worker_thread_id == kNonWorkerThreadId) { |
- GetEventRouter()->AddLazyEventListener(event_name, extension_id); |
- } else { |
- GetEventRouter()->AddLazyServiceWorkerEventListener( |
- event_name, extension_id, worker_thread_id); |
- } |
+ GetEventRouter()->AddLazyServiceWorkerEventListener(event_name, extension_id, |
+ service_worker_scope); |
} |
void ExtensionMessageFilter::OnExtensionRemoveLazyListener( |
+ const std::string& extension_id, |
+ const std::string& event_name) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ if (!browser_context_) |
+ return; |
+ |
+ GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); |
+} |
+ |
+void ExtensionMessageFilter::OnExtensionRemoveLazyServiceWorkerListener( |
const std::string& extension_id, |
const std::string& event_name, |
- int worker_thread_id) { |
+ const GURL& worker_scope_url) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
if (!browser_context_) |
return; |
- if (worker_thread_id == kNonWorkerThreadId) { |
- GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); |
- } else { |
- GetEventRouter()->RemoveLazyServiceWorkerEventListener( |
- event_name, extension_id, worker_thread_id); |
- } |
+ GetEventRouter()->RemoveLazyServiceWorkerEventListener( |
+ event_name, extension_id, worker_scope_url); |
} |
void ExtensionMessageFilter::OnExtensionAddFilteredListener( |