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 e707151e9f77aab3a9fb2ec3028688b3e1abf7e3..cf5b01409b9c642bce74ce0e4b8813bfa07047db 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_GetReadyRegistration, |
+ OnGetReadyRegistration) |
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderCreated, |
OnProviderCreated) |
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderDestroyed, |
@@ -507,6 +509,28 @@ void ServiceWorkerDispatcherHost::OnGetRegistration( |
request_id)); |
} |
+void ServiceWorkerDispatcherHost::OnGetReadyRegistration(int thread_id, |
+ int request_id, |
+ int provider_id) { |
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerDispatcherHost::OnGetReadyRegistration"); |
+ if (!GetContext()) |
+ return; |
+ ServiceWorkerProviderHost* provider_host = |
+ GetContext()->GetProviderHost(render_process_id_, provider_id); |
+ if (!provider_host || !provider_host->IsContextAlive()) |
+ return; |
+ |
+ TRACE_EVENT_ASYNC_BEGIN0( |
+ "ServiceWorker", |
+ "ServiceWorkerDispatcherHost::GetReadyRegistration", |
+ request_id); |
+ |
+ provider_host->GetReadyRegistration( |
+ base::Bind(&ServiceWorkerDispatcherHost::GetReadyRegistrationComplete, |
+ this, thread_id, request_id, provider_host->AsWeakPtr())); |
+} |
+ |
void ServiceWorkerDispatcherHost::OnPostMessageToWorker( |
int handle_id, |
const base::string16& message, |
@@ -917,6 +941,27 @@ void ServiceWorkerDispatcherHost::GetRegistrationComplete( |
thread_id, request_id, info, attrs)); |
} |
+void ServiceWorkerDispatcherHost::GetReadyRegistrationComplete( |
+ int thread_id, |
+ int request_id, |
+ base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
+ ServiceWorkerRegistration* registration) { |
+ DCHECK(registration); |
+ TRACE_EVENT_ASYNC_END1("ServiceWorker", |
+ "ServiceWorkerDispatcherHost::GetReadyRegistration", |
+ request_id, |
+ "Registration ID", |
+ registration ? registration->id() |
+ : kInvalidServiceWorkerRegistrationId); |
+ |
+ ServiceWorkerRegistrationObjectInfo info; |
+ ServiceWorkerVersionAttributes attrs; |
+ GetRegistrationObjectInfoAndVersionAttributes( |
+ provider_host, registration, &info, &attrs); |
+ Send(new ServiceWorkerMsg_DidGetReadyRegistration( |
+ thread_id, request_id, info, attrs)); |
+} |
+ |
void ServiceWorkerDispatcherHost::SendRegistrationError( |
int thread_id, |
int request_id, |