| 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(
|
|
|