Chromium Code Reviews| Index: extensions/renderer/dispatcher.cc |
| diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc |
| index 429056c9a998cde4a8b943890f35ff2811ad782d..547988a04d33aaa13776e56ab1b586fbeb6d949d 100644 |
| --- a/extensions/renderer/dispatcher.cc |
| +++ b/extensions/renderer/dispatcher.cc |
| @@ -217,6 +217,7 @@ void SendEventListenersIPC(binding::EventListenersChanged changed, |
| const base::DictionaryValue* filter, |
| bool was_manual) { |
| bool lazy = ExtensionFrameHelper::IsContextForEventPage(context); |
| + const int worker_thread_id = content::WorkerThread::GetCurrentId(); |
| std::string extension_id = context->GetExtensionID(); |
| content::RenderThread* render_thread = content::RenderThread::Get(); |
| @@ -232,23 +233,27 @@ void SendEventListenersIPC(binding::EventListenersChanged changed, |
| } else { |
| if (changed == binding::EventListenersChanged::HAS_LISTENERS) { |
| render_thread->Send(new ExtensionHostMsg_AddListener( |
| - extension_id, context->url(), event_name)); |
| + extension_id, context->url(), event_name, worker_thread_id)); |
| if (lazy) { |
| - render_thread->Send( |
| - new ExtensionHostMsg_AddLazyListener(extension_id, event_name)); |
| + render_thread->Send(new ExtensionHostMsg_AddLazyListener( |
| + extension_id, event_name, worker_thread_id)); |
| } |
| } else { |
| DCHECK_EQ(binding::EventListenersChanged::NO_LISTENERS, changed); |
| render_thread->Send(new ExtensionHostMsg_RemoveListener( |
| - extension_id, context->url(), event_name)); |
| + extension_id, context->url(), event_name, worker_thread_id)); |
| if (lazy && was_manual) { |
| - render_thread->Send( |
| - new ExtensionHostMsg_RemoveLazyListener(extension_id, event_name)); |
| + render_thread->Send(new ExtensionHostMsg_RemoveLazyListener( |
| + extension_id, event_name, worker_thread_id)); |
| } |
| } |
| } |
| } |
| +bool WorkerMightHandleMessage(const IPC::Message& message) { |
|
Devlin
2017/05/24 17:58:25
Do we need this when the WorkerThreadDispatcher al
lazyboy
2017/05/25 01:33:43
Removed.
|
| + return message.type() == ExtensionMsg_DispatchEvent::ID; |
| +} |
| + |
| base::LazyInstance<WorkerScriptContextSet>::DestructorAtExit |
| g_worker_script_context_set = LAZY_INSTANCE_INITIALIZER; |
| @@ -470,7 +475,7 @@ void Dispatcher::DidInitializeServiceWorkerContextOnWorkerThread( |
| if (ExtensionsClient::Get()->ExtensionAPIEnabledInExtensionServiceWorkers()) { |
| WorkerThreadDispatcher::Get()->AddWorkerData(service_worker_version_id, |
| - &source_map_); |
| + context, &source_map_); |
| // TODO(lazyboy): Make sure accessing |source_map_| in worker thread is |
| // safe. |
| @@ -887,6 +892,11 @@ void Dispatcher::RegisterNativeHandlers( |
| } |
| bool Dispatcher::OnControlMessageReceived(const IPC::Message& message) { |
| + if (WorkerMightHandleMessage(message) && |
| + WorkerThreadDispatcher::Get()->OnControlMessageReceived(message)) { |
| + return true; |
| + } |
| + |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(Dispatcher, message) |
| IPC_MESSAGE_HANDLER(ExtensionMsg_ActivateExtension, OnActivateExtension) |