Index: content/renderer/service_worker/service_worker_context_client.cc |
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc |
index 93edf9847eca5c96a45939f8004dace04551a531..1d9728f2329f88d8424df6110f13ffb23c2edf72 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -262,6 +262,8 @@ void ServiceWorkerContextClient::OnMessageReceived( |
OnOpenWindowError) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, |
OnFocusClientResponse) |
+ IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NavigateClientResponse, |
+ OnNavigateClientResponse) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients) |
IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClaimClientsError, OnClaimClientsError) |
@@ -613,6 +615,16 @@ void ServiceWorkerContextClient::focus( |
base::UTF16ToUTF8(uuid))); |
} |
+void ServiceWorkerContextClient::navigate( |
+ const blink::WebString& uuid, |
+ const blink::WebURL& url, |
+ blink::WebServiceWorkerClientCallbacks* callback) { |
+ DCHECK(callback); |
+ int request_id = context_->client_callbacks.Add(callback); |
+ Send(new ServiceWorkerHostMsg_NavigateClient(GetRoutingID(), request_id, |
+ base::UTF16ToUTF8(uuid), url)); |
+} |
+ |
void ServiceWorkerContextClient::skipWaiting( |
blink::WebServiceWorkerSkipWaitingCallbacks* callbacks) { |
DCHECK(callbacks); |
@@ -922,6 +934,30 @@ void ServiceWorkerContextClient::OnFocusClientResponse( |
context_->client_callbacks.Remove(request_id); |
} |
+void ServiceWorkerContextClient::OnNavigateClientResponse( |
+ int request_id, |
+ const ServiceWorkerClientInfo& client) { |
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerContextClient::OnNavigateClientResponse"); |
+ blink::WebServiceWorkerClientCallbacks* callback = |
+ context_->client_callbacks.Lookup(request_id); |
+ if (!callback) { |
+ NOTREACHED() << "Got stray response: " << request_id; |
+ return; |
+ } |
+ |
+ if (client.IsEmpty()) { |
+ callback->onSuccess(nullptr); |
+ } else { |
+ scoped_ptr<blink::WebServiceWorkerClientInfo> web_client( |
+ new blink::WebServiceWorkerClientInfo( |
+ ToWebServiceWorkerClientInfo(client))); |
+ callback->onSuccess(web_client.release()); |
+ } |
+ |
+ context_->client_callbacks.Remove(request_id); |
+} |
+ |
void ServiceWorkerContextClient::OnDidSkipWaiting(int request_id) { |
TRACE_EVENT0("ServiceWorker", |
"ServiceWorkerContextClient::OnDidSkipWaiting"); |