| Index: content/child/service_worker/service_worker_dispatcher.cc
|
| diff --git a/content/child/service_worker/service_worker_dispatcher.cc b/content/child/service_worker/service_worker_dispatcher.cc
|
| index 0a30cfbb25c612454d851c7cfcfe20f34762a9f7..f33b86a0c8b0988c1aa209eaa24b37aafec8eec0 100644
|
| --- a/content/child/service_worker/service_worker_dispatcher.cc
|
| +++ b/content/child/service_worker/service_worker_dispatcher.cc
|
| @@ -57,6 +57,8 @@ ServiceWorkerDispatcher::~ServiceWorkerDispatcher() {
|
| void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg)
|
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_AssociateRegistrationWithServiceWorker,
|
| + OnAssociateRegistrationWithServiceWorker)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_AssociateRegistration,
|
| OnAssociateRegistration)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DisassociateRegistration,
|
| @@ -300,6 +302,27 @@ ServiceWorkerDispatcher::CreateServiceWorkerRegistration(
|
| return new WebServiceWorkerRegistrationImpl(handle_ref.Pass());
|
| }
|
|
|
| +// We can assume that this message handler is called before the worker context
|
| +// starts because script loading happens after this association.
|
| +// TODO(nhiroki): This association information could be pushed into
|
| +// EmbeddedWorkerMsg_StartWorker message and handed over to the worker thread
|
| +// without a lock in ServiceWorkerProviderContext.
|
| +void ServiceWorkerDispatcher::OnAssociateRegistrationWithServiceWorker(
|
| + int thread_id,
|
| + int provider_id,
|
| + const ServiceWorkerRegistrationObjectInfo& info,
|
| + const ServiceWorkerVersionAttributes& attrs) {
|
| + DCHECK_EQ(kDocumentMainThreadId, thread_id);
|
| +
|
| + ProviderContextMap::iterator context = provider_contexts_.find(provider_id);
|
| + if (context == provider_contexts_.end())
|
| + return;
|
| + context->second->OnAssociateRegistration(info, attrs);
|
| +
|
| + // We don't have to add entries into |worker_to_provider_| because state
|
| + // change events for the workers will be notified on the worker thread.
|
| +}
|
| +
|
| void ServiceWorkerDispatcher::OnAssociateRegistration(
|
| int thread_id,
|
| int provider_id,
|
|
|