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 5dfbbeb83fc14347c963102d60e8ec7ff75b4e69..92266711bf02fb1b7dd8a6dd9cc96e27d533f485 100644 |
--- a/content/renderer/service_worker/service_worker_script_context.cc |
+++ b/content/renderer/service_worker/service_worker_script_context.cc |
@@ -103,6 +103,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) |
@@ -205,6 +209,13 @@ void ServiceWorkerScriptContext::GetClientDocuments( |
GetRoutingID(), request_id)); |
} |
+void ServiceWorkerScriptContext::OpenWindow( |
+ const GURL& url, blink::WebServiceWorkerClientCallbacks* callbacks) { |
+ DCHECK(callbacks); |
+ int request_id = pending_client_callbacks_.Add(callbacks); |
+ Send(new ServiceWorkerHostMsg_OpenWindow(GetRoutingID(), request_id, url)); |
+} |
+ |
void ServiceWorkerScriptContext::PostMessageToDocument( |
int client_id, |
const base::string16& message, |
@@ -427,6 +438,43 @@ void ServiceWorkerScriptContext::OnDidGetClientDocuments( |
pending_clients_callbacks_.Remove(request_id); |
} |
+void ServiceWorkerScriptContext::OnOpenWindowResponse( |
+ int request_id, |
+ const ServiceWorkerClientInfo& client) { |
+ 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; |
+ if (!client.IsEmpty()) { |
+ DCHECK(client.IsValid()); |
+ web_client.reset(new blink::WebServiceWorkerClientInfo(client)); |
+ } |
+ callbacks->onSuccess(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", |