Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: content/renderer/service_worker/service_worker_script_context.cc

Issue 843583005: [ServiceWorker] Implement WebServiceWorkerContextClient::openWindow(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@content_browser_client_openurl
Patch Set: rebase and review comments Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/service_worker/service_worker_script_context.h" 5 #include "content/renderer/service_worker/service_worker_script_context.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "content/child/notifications/notification_data_conversions.h" 10 #include "content/child/notifications/notification_data_conversions.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 OnNotificationClickEvent) 96 OnNotificationClickEvent)
97 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 97 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
98 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) 98 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
99 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, 99 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
100 OnCrossOriginConnectEvent) 100 OnCrossOriginConnectEvent)
101 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) 101 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage)
102 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, 102 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
103 OnCrossOriginMessageToWorker) 103 OnCrossOriginMessageToWorker)
104 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments, 104 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments,
105 OnDidGetClientDocuments) 105 OnDidGetClientDocuments)
106 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
107 OnOpenWindowResponse)
108 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError,
109 OnOpenWindowError)
106 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, 110 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse,
107 OnFocusClientResponse) 111 OnFocusClientResponse)
108 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) 112 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting)
109 IPC_MESSAGE_UNHANDLED(handled = false) 113 IPC_MESSAGE_UNHANDLED(handled = false)
110 IPC_END_MESSAGE_MAP() 114 IPC_END_MESSAGE_MAP()
111 115
112 // TODO(gavinp): Would it be preferable to put an AddListener() method to 116 // TODO(gavinp): Would it be preferable to put an AddListener() method to
113 // EmbeddedWorkerContextClient? 117 // EmbeddedWorkerContextClient?
114 if (!handled) 118 if (!handled)
115 handled = cache_storage_dispatcher_->OnMessageReceived(message); 119 handled = cache_storage_dispatcher_->OnMessageReceived(message);
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 } 202 }
199 203
200 void ServiceWorkerScriptContext::GetClientDocuments( 204 void ServiceWorkerScriptContext::GetClientDocuments(
201 blink::WebServiceWorkerClientsCallbacks* callbacks) { 205 blink::WebServiceWorkerClientsCallbacks* callbacks) {
202 DCHECK(callbacks); 206 DCHECK(callbacks);
203 int request_id = pending_clients_callbacks_.Add(callbacks); 207 int request_id = pending_clients_callbacks_.Add(callbacks);
204 Send(new ServiceWorkerHostMsg_GetClientDocuments( 208 Send(new ServiceWorkerHostMsg_GetClientDocuments(
205 GetRoutingID(), request_id)); 209 GetRoutingID(), request_id));
206 } 210 }
207 211
212 void ServiceWorkerScriptContext::OpenWindow(
213 const GURL& url, blink::WebServiceWorkerClientCallbacks* callbacks) {
214 DCHECK(callbacks);
215 int request_id = pending_client_callbacks_.Add(callbacks);
216 Send(new ServiceWorkerHostMsg_OpenWindow(GetRoutingID(), request_id, url));
217 }
218
208 void ServiceWorkerScriptContext::PostMessageToDocument( 219 void ServiceWorkerScriptContext::PostMessageToDocument(
209 int client_id, 220 int client_id,
210 const base::string16& message, 221 const base::string16& message,
211 scoped_ptr<blink::WebMessagePortChannelArray> channels) { 222 scoped_ptr<blink::WebMessagePortChannelArray> channels) {
212 // This may send channels for MessagePorts, and all internal book-keeping 223 // This may send channels for MessagePorts, and all internal book-keeping
213 // messages for MessagePort (e.g. QueueMessages) are sent from main thread 224 // messages for MessagePort (e.g. QueueMessages) are sent from main thread
214 // (with thread hopping), so we need to do the same thread hopping here not 225 // (with thread hopping), so we need to do the same thread hopping here not
215 // to overtake those messages. 226 // to overtake those messages.
216 embedded_context_->main_thread_proxy()->PostTask( 227 embedded_context_->main_thread_proxy()->PostTask(
217 FROM_HERE, 228 FROM_HERE,
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 new blink::WebServiceWorkerClientsInfo); 431 new blink::WebServiceWorkerClientsInfo);
421 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients( 432 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients(
422 clients.size()); 433 clients.size());
423 for (size_t i = 0; i < clients.size(); ++i) 434 for (size_t i = 0; i < clients.size(); ++i)
424 convertedClients[i] = clients[i]; 435 convertedClients[i] = clients[i];
425 info->clients.swap(convertedClients); 436 info->clients.swap(convertedClients);
426 callbacks->onSuccess(info.release()); 437 callbacks->onSuccess(info.release());
427 pending_clients_callbacks_.Remove(request_id); 438 pending_clients_callbacks_.Remove(request_id);
428 } 439 }
429 440
441 void ServiceWorkerScriptContext::OnOpenWindowResponse(
442 int request_id,
443 const ServiceWorkerClientInfo& client) {
444 TRACE_EVENT0("ServiceWorker",
445 "ServiceWorkerScriptContext::OnOpenWindowResponse");
446 blink::WebServiceWorkerClientCallbacks* callbacks =
447 pending_client_callbacks_.Lookup(request_id);
448 if (!callbacks) {
449 NOTREACHED() << "Got stray response: " << request_id;
450 return;
451 }
452 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client;
453 if (!client.IsEmpty()) {
454 DCHECK(client.IsValid());
455 web_client.reset(new blink::WebServiceWorkerClientInfo(client));
456 }
457 callbacks->onSuccess(web_client.release());
458 pending_client_callbacks_.Remove(request_id);
459 }
460
461 void ServiceWorkerScriptContext::OnOpenWindowError(int request_id) {
462 TRACE_EVENT0("ServiceWorker",
463 "ServiceWorkerScriptContext::OnOpenWindowError");
464 blink::WebServiceWorkerClientCallbacks* callbacks =
465 pending_client_callbacks_.Lookup(request_id);
466 if (!callbacks) {
467 NOTREACHED() << "Got stray response: " << request_id;
468 return;
469 }
470 scoped_ptr<blink::WebServiceWorkerError> error(
471 new blink::WebServiceWorkerError(
472 blink::WebServiceWorkerError::ErrorTypeUnknown,
473 "Something went wrong while trying to open the window."));
474 callbacks->onError(error.release());
475 pending_client_callbacks_.Remove(request_id);
476 }
477
430 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id, 478 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id,
431 bool result) { 479 bool result) {
432 TRACE_EVENT0("ServiceWorker", 480 TRACE_EVENT0("ServiceWorker",
433 "ServiceWorkerScriptContext::OnFocusClientResponse"); 481 "ServiceWorkerScriptContext::OnFocusClientResponse");
434 blink::WebServiceWorkerClientFocusCallback* callback = 482 blink::WebServiceWorkerClientFocusCallback* callback =
435 pending_focus_client_callbacks_.Lookup(request_id); 483 pending_focus_client_callbacks_.Lookup(request_id);
436 if (!callback) { 484 if (!callback) {
437 NOTREACHED() << "Got stray response: " << request_id; 485 NOTREACHED() << "Got stray response: " << request_id;
438 return; 486 return;
439 } 487 }
440 callback->onSuccess(&result); 488 callback->onSuccess(&result);
441 pending_focus_client_callbacks_.Remove(request_id); 489 pending_focus_client_callbacks_.Remove(request_id);
442 } 490 }
443 491
444 void ServiceWorkerScriptContext::OnDidSkipWaiting(int request_id) { 492 void ServiceWorkerScriptContext::OnDidSkipWaiting(int request_id) {
445 TRACE_EVENT0("ServiceWorker", 493 TRACE_EVENT0("ServiceWorker",
446 "ServiceWorkerScriptContext::OnDidSkipWaiting"); 494 "ServiceWorkerScriptContext::OnDidSkipWaiting");
447 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks = 495 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks =
448 pending_skip_waiting_callbacks_.Lookup(request_id); 496 pending_skip_waiting_callbacks_.Lookup(request_id);
449 if (!callbacks) { 497 if (!callbacks) {
450 NOTREACHED() << "Got stray response: " << request_id; 498 NOTREACHED() << "Got stray response: " << request_id;
451 return; 499 return;
452 } 500 }
453 callbacks->onSuccess(); 501 callbacks->onSuccess();
454 pending_skip_waiting_callbacks_.Remove(request_id); 502 pending_skip_waiting_callbacks_.Remove(request_id);
455 } 503 }
456 504
457 } // namespace content 505 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698