Chromium Code Reviews| 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 5c8b2376dc4dc10f03bc79900dfff518a4827ead..6fb576760f85cd5fbb0ea89d6f054986a0546e80 100644 |
| --- a/content/renderer/service_worker/service_worker_context_client.cc |
| +++ b/content/renderer/service_worker/service_worker_context_client.cc |
| @@ -263,6 +263,10 @@ void ServiceWorkerContextClient::OnMessageReceived( |
| OnOpenWindowError) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, |
| OnFocusClientResponse) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NavigateClientResponse, |
| + OnNavigateClientResponse) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NavigateClientError, |
| + OnNavigateClientError) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClaimClientsError, OnClaimClientsError) |
| @@ -581,6 +585,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); |
| @@ -873,6 +887,50 @@ 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* callbacks = |
| + context_->client_callbacks.Lookup(request_id); |
| + if (!callbacks) { |
| + NOTREACHED() << "Got stray response: " << request_id; |
| + return; |
| + } |
| + scoped_ptr<blink::WebServiceWorkerClientInfo> web_client; |
| + if (!client.IsEmpty()) { |
| + DCHECK(client.IsValid()); |
| + web_client.reset(new blink::WebServiceWorkerClientInfo( |
| + ToWebServiceWorkerClientInfo(client))); |
| + } |
| + callbacks->onSuccess(web_client.release()); |
| + context_->client_callbacks.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerContextClient::OnNavigateClientError(int request_id, |
| + const GURL& url) { |
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerContextClient::OnNavigateClientError"); |
| + blink::WebServiceWorkerClientCallbacks* callbacks = |
| + context_->client_callbacks.Lookup(request_id); |
| + if (!callbacks) { |
| + NOTREACHED() << "Got stray response: " << request_id; |
| + return; |
| + } |
| + std::string message; |
|
palmer
2015/07/27 21:55:58
I might simplify this error message, and also disa
zino
2015/07/28 01:27:22
Done.
|
| + if (url.is_empty()) |
| + message = "Something went wrong while trying to navigate client."; |
| + else |
| + message = url.spec() + " cannot navigate."; |
| + scoped_ptr<blink::WebServiceWorkerError> error( |
| + new blink::WebServiceWorkerError( |
| + blink::WebServiceWorkerError::ErrorTypeUnknown, |
| + blink::WebString::fromUTF8(message))); |
| + callbacks->onError(error.release()); |
| + context_->client_callbacks.Remove(request_id); |
| +} |
| + |
| void ServiceWorkerContextClient::OnDidSkipWaiting(int request_id) { |
| TRACE_EVENT0("ServiceWorker", |
| "ServiceWorkerContextClient::OnDidSkipWaiting"); |