| Index: content/browser/service_worker/service_worker_dispatcher_host.cc
|
| diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| index 6f1d95f078618c9c207087699ef8b185bcc20c84..621ecb3327613742c141e7ac50811dde1272a548 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| @@ -163,6 +163,8 @@ bool ServiceWorkerDispatcherHost::OnMessageReceived(
|
| OnUnregisterServiceWorker)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetRegistration,
|
| OnGetRegistration)
|
| + IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetRegistrationForReady,
|
| + OnGetRegistrationForReady)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderCreated,
|
| OnProviderCreated)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderDestroyed,
|
| @@ -492,6 +494,35 @@ void ServiceWorkerDispatcherHost::OnGetRegistration(
|
| request_id));
|
| }
|
|
|
| +void ServiceWorkerDispatcherHost::OnGetRegistrationForReady(
|
| + int thread_id,
|
| + int request_id,
|
| + int provider_id) {
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "ServiceWorkerDispatcherHost::OnGetRegistrationForReady");
|
| + if (!GetContext())
|
| + return;
|
| + ServiceWorkerProviderHost* provider_host =
|
| + GetContext()->GetProviderHost(render_process_id_, provider_id);
|
| + if (!provider_host) {
|
| + BadMessageReceived();
|
| + return;
|
| + }
|
| + if (!provider_host->IsContextAlive())
|
| + return;
|
| +
|
| + TRACE_EVENT_ASYNC_BEGIN0(
|
| + "ServiceWorker",
|
| + "ServiceWorkerDispatcherHost::GetRegistrationForReady",
|
| + request_id);
|
| +
|
| + if (!provider_host->GetRegistrationForReady(base::Bind(
|
| + &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete,
|
| + this, thread_id, request_id, provider_host->AsWeakPtr()))) {
|
| + BadMessageReceived();
|
| + }
|
| +}
|
| +
|
| void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
|
| int handle_id,
|
| const base::string16& message,
|
| @@ -905,6 +936,30 @@ void ServiceWorkerDispatcherHost::GetRegistrationComplete(
|
| thread_id, request_id, info, attrs));
|
| }
|
|
|
| +void ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete(
|
| + int thread_id,
|
| + int request_id,
|
| + base::WeakPtr<ServiceWorkerProviderHost> provider_host,
|
| + ServiceWorkerRegistration* registration) {
|
| + DCHECK(registration);
|
| + TRACE_EVENT_ASYNC_END1("ServiceWorker",
|
| + "ServiceWorkerDispatcherHost::GetRegistrationForReady",
|
| + request_id,
|
| + "Registration ID",
|
| + registration ? registration->id()
|
| + : kInvalidServiceWorkerRegistrationId);
|
| +
|
| + if (!GetContext())
|
| + return;
|
| +
|
| + ServiceWorkerRegistrationObjectInfo info;
|
| + ServiceWorkerVersionAttributes attrs;
|
| + GetRegistrationObjectInfoAndVersionAttributes(
|
| + provider_host, registration, &info, &attrs);
|
| + Send(new ServiceWorkerMsg_DidGetRegistrationForReady(
|
| + thread_id, request_id, info, attrs));
|
| +}
|
| +
|
| void ServiceWorkerDispatcherHost::SendRegistrationError(
|
| int thread_id,
|
| int request_id,
|
|
|