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", |