Chromium Code Reviews| Index: content/renderer/service_worker/service_worker_script_context.cc |
| diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc |
| index dd0d523b83710e5580cdf55f0dd1a68480c26eac..9db2d8cd59afbae2a7f33c49727ee33d71f86f52 100644 |
| --- a/content/renderer/service_worker/service_worker_script_context.cc |
| +++ b/content/renderer/service_worker/service_worker_script_context.cc |
| @@ -70,6 +70,19 @@ blink::WebURLRequest::FrameType GetBlinkFrameType( |
| return static_cast<blink::WebURLRequest::FrameType>(frame_type); |
| } |
| +blink::WebServiceWorkerClientInfo ToWebServiceWorkerClientInfo( |
| + const ServiceWorkerClientInfo& client) { |
| + blink::WebServiceWorkerClientInfo web_client; |
| + |
| + web_client.clientID = client.client_id; |
| + web_client.pageVisibilityState = client.page_visibility_state; |
| + web_client.isFocused = client.is_focused; |
| + web_client.url = client.url; |
| + web_client.frameType = GetBlinkFrameType(client.frame_type); |
| + |
| + return web_client; |
| +} |
| + |
| } // namespace |
| ServiceWorkerScriptContext::ServiceWorkerScriptContext( |
| @@ -101,6 +114,10 @@ void ServiceWorkerScriptContext::OnMessageReceived( |
| OnCrossOriginMessageToWorker) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments, |
| OnDidGetClientDocuments) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, |
| + OnOpenWindowResponse) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, |
| + OnOpenWindowError) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, |
| OnFocusClientResponse) |
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) |
| @@ -198,6 +215,16 @@ void ServiceWorkerScriptContext::GetClientDocuments( |
| GetRoutingID(), request_id)); |
| } |
| +void ServiceWorkerScriptContext::OpenWindow( |
| + const GURL& url, |
| + const GURL& referrer, |
| + blink::WebServiceWorkerClientCallbacks* callbacks) { |
| + DCHECK(callbacks); |
| + int request_id = pending_client_callbacks_.Add(callbacks); |
| + Send(new ServiceWorkerHostMsg_OpenWindow( |
| + GetRoutingID(), request_id, url, referrer)); |
| +} |
| + |
| void ServiceWorkerScriptContext::PostMessageToDocument( |
| int client_id, |
| const base::string16& message, |
| @@ -412,19 +439,47 @@ void ServiceWorkerScriptContext::OnDidGetClientDocuments( |
| new blink::WebServiceWorkerClientsInfo); |
| blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients( |
| clients.size()); |
| - for (size_t i = 0; i < clients.size(); ++i) { |
| - convertedClients[i].clientID = clients[i].client_id; |
| - convertedClients[i].pageVisibilityState = clients[i].page_visibility_state; |
| - convertedClients[i].isFocused = clients[i].is_focused; |
| - convertedClients[i].url = clients[i].url; |
| - convertedClients[i].frameType = |
| - static_cast<blink::WebURLRequest::FrameType>(clients[i].frame_type); |
| - } |
| + for (size_t i = 0; i < clients.size(); ++i) |
| + convertedClients[i] = ToWebServiceWorkerClientInfo(clients[i]); |
| info->clients.swap(convertedClients); |
| callbacks->onSuccess(info.release()); |
| pending_clients_callbacks_.Remove(request_id); |
| } |
| +void ServiceWorkerScriptContext::OnOpenWindowResponse( |
| + int request_id, const ServiceWorkerClientInfo& client, bool dummy_client) { |
|
nasko
2015/01/17 00:05:28
nit: if params don't fit on the line of the method
mlamouri (slow - plz ping)
2015/01/26 13:19:08
Done.
|
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerScriptContext::OnOpenWindowResponse"); |
| + blink::WebServiceWorkerClientCallbacks* callbacks = |
| + pending_client_callbacks_.Lookup(request_id); |
| + if (!callbacks) { |
| + NOTREACHED() << "Got stray response: " << request_id; |
| + return; |
| + } |
| + scoped_ptr<blink::WebServiceWorkerClientInfo> web_client( |
| + new blink::WebServiceWorkerClientInfo( |
| + ToWebServiceWorkerClientInfo(client))); |
| + callbacks->onSuccess(dummy_client ? nullptr : web_client.release()); |
| + pending_client_callbacks_.Remove(request_id); |
| +} |
| + |
| +void ServiceWorkerScriptContext::OnOpenWindowError(int request_id) { |
| + TRACE_EVENT0("ServiceWorker", |
| + "ServiceWorkerScriptContext::OnOpenWindowError"); |
| + blink::WebServiceWorkerClientCallbacks* callbacks = |
| + pending_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, |
| + "Something went wrong while trying to open the window.")); |
| + callbacks->onError(error.release()); |
| + pending_client_callbacks_.Remove(request_id); |
| +} |
| + |
| void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id, |
| bool result) { |
| TRACE_EVENT0("ServiceWorker", |