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 3dc5852db3e5365fa87660bdb176733fd58c959e..100b645c5c9689a767fba2c7899ffd745b9c4b04 100644 |
--- a/content/renderer/service_worker/service_worker_context_client.cc |
+++ b/content/renderer/service_worker/service_worker_context_client.cc |
@@ -262,6 +262,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) |
@@ -575,6 +579,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); |
@@ -879,6 +893,46 @@ 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 std::string& message) { |
palmer
2015/07/15 17:07:54
What is the possible range of values for |message|
zino
2015/07/17 11:26:11
It's just error message.
It uses the same way with
palmer
2015/07/20 23:15:32
How about passing a reason code (an enum) and the
zino
2015/07/23 05:56:17
Done. (without using enum, because the message isn
|
+ TRACE_EVENT0("ServiceWorker", |
+ "ServiceWorkerContextClient::OnNavigateClientError"); |
+ blink::WebServiceWorkerClientCallbacks* callbacks = |
+ context_->client_callbacks.Lookup(request_id); |
+ if (!callbacks) { |
+ NOTREACHED() << "Got stray response: " << request_id; |
+ return; |
+ } |
+ 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"); |