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

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: 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/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "content/child/notifications/notification_data_conversions.h" 10 #include "content/child/notifications/notification_data_conversions.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 OnNotificationClickEvent) 111 OnNotificationClickEvent)
112 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 112 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
113 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) 113 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
114 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, 114 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
115 OnCrossOriginConnectEvent) 115 OnCrossOriginConnectEvent)
116 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) 116 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage)
117 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, 117 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
118 OnCrossOriginMessageToWorker) 118 OnCrossOriginMessageToWorker)
119 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments, 119 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments,
120 OnDidGetClientDocuments) 120 OnDidGetClientDocuments)
121 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
122 OnOpenWindowResponse)
123 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError,
124 OnOpenWindowError)
121 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, 125 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse,
122 OnFocusClientResponse) 126 OnFocusClientResponse)
123 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) 127 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting)
124 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients) 128 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients)
125 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClaimClientsError, OnClaimClientsError) 129 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClaimClientsError, OnClaimClientsError)
126 IPC_MESSAGE_UNHANDLED(handled = false) 130 IPC_MESSAGE_UNHANDLED(handled = false)
127 IPC_END_MESSAGE_MAP() 131 IPC_END_MESSAGE_MAP()
128 132
129 // TODO(gavinp): Would it be preferable to put an AddListener() method to 133 // TODO(gavinp): Would it be preferable to put an AddListener() method to
130 // EmbeddedWorkerContextClient? 134 // EmbeddedWorkerContextClient?
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 } 219 }
216 220
217 void ServiceWorkerScriptContext::GetClientDocuments( 221 void ServiceWorkerScriptContext::GetClientDocuments(
218 blink::WebServiceWorkerClientsCallbacks* callbacks) { 222 blink::WebServiceWorkerClientsCallbacks* callbacks) {
219 DCHECK(callbacks); 223 DCHECK(callbacks);
220 int request_id = pending_clients_callbacks_.Add(callbacks); 224 int request_id = pending_clients_callbacks_.Add(callbacks);
221 Send(new ServiceWorkerHostMsg_GetClientDocuments( 225 Send(new ServiceWorkerHostMsg_GetClientDocuments(
222 GetRoutingID(), request_id)); 226 GetRoutingID(), request_id));
223 } 227 }
224 228
229 void ServiceWorkerScriptContext::OpenWindow(
230 const GURL& url, blink::WebServiceWorkerClientCallbacks* callbacks) {
231 DCHECK(callbacks);
232 int request_id = pending_client_callbacks_.Add(callbacks);
233 Send(new ServiceWorkerHostMsg_OpenWindow(GetRoutingID(), request_id, url));
234 }
235
225 void ServiceWorkerScriptContext::PostMessageToDocument( 236 void ServiceWorkerScriptContext::PostMessageToDocument(
226 int client_id, 237 int client_id,
227 const base::string16& message, 238 const base::string16& message,
228 scoped_ptr<blink::WebMessagePortChannelArray> channels) { 239 scoped_ptr<blink::WebMessagePortChannelArray> channels) {
229 // This may send channels for MessagePorts, and all internal book-keeping 240 // This may send channels for MessagePorts, and all internal book-keeping
230 // messages for MessagePort (e.g. QueueMessages) are sent from main thread 241 // messages for MessagePort (e.g. QueueMessages) are sent from main thread
231 // (with thread hopping), so we need to do the same thread hopping here not 242 // (with thread hopping), so we need to do the same thread hopping here not
232 // to overtake those messages. 243 // to overtake those messages.
233 embedded_context_->main_thread_proxy()->PostTask( 244 embedded_context_->main_thread_proxy()->PostTask(
234 FROM_HERE, 245 FROM_HERE,
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 new blink::WebServiceWorkerClientsInfo); 455 new blink::WebServiceWorkerClientsInfo);
445 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients( 456 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients(
446 clients.size()); 457 clients.size());
447 for (size_t i = 0; i < clients.size(); ++i) 458 for (size_t i = 0; i < clients.size(); ++i)
448 convertedClients[i] = ToWebServiceWorkerClientInfo(clients[i]); 459 convertedClients[i] = ToWebServiceWorkerClientInfo(clients[i]);
449 info->clients.swap(convertedClients); 460 info->clients.swap(convertedClients);
450 callbacks->onSuccess(info.release()); 461 callbacks->onSuccess(info.release());
451 pending_clients_callbacks_.Remove(request_id); 462 pending_clients_callbacks_.Remove(request_id);
452 } 463 }
453 464
465 void ServiceWorkerScriptContext::OnOpenWindowResponse(
466 int request_id,
467 const ServiceWorkerClientInfo& client) {
468 TRACE_EVENT0("ServiceWorker",
469 "ServiceWorkerScriptContext::OnOpenWindowResponse");
470 blink::WebServiceWorkerClientCallbacks* callbacks =
471 pending_client_callbacks_.Lookup(request_id);
472 if (!callbacks) {
473 NOTREACHED() << "Got stray response: " << request_id;
474 return;
475 }
476 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client;
477 if (!client.IsEmpty()) {
478 DCHECK(client.IsValid());
479 web_client.reset(new blink::WebServiceWorkerClientInfo(
480 ToWebServiceWorkerClientInfo(client)));
481 }
482 callbacks->onSuccess(web_client.release());
483 pending_client_callbacks_.Remove(request_id);
484 }
485
486 void ServiceWorkerScriptContext::OnOpenWindowError(int request_id) {
487 TRACE_EVENT0("ServiceWorker",
488 "ServiceWorkerScriptContext::OnOpenWindowError");
489 blink::WebServiceWorkerClientCallbacks* callbacks =
490 pending_client_callbacks_.Lookup(request_id);
491 if (!callbacks) {
492 NOTREACHED() << "Got stray response: " << request_id;
493 return;
494 }
495 scoped_ptr<blink::WebServiceWorkerError> error(
496 new blink::WebServiceWorkerError(
497 blink::WebServiceWorkerError::ErrorTypeUnknown,
498 "Something went wrong while trying to open the window."));
499 callbacks->onError(error.release());
500 pending_client_callbacks_.Remove(request_id);
501 }
502
454 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id, 503 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id,
455 bool result) { 504 bool result) {
456 TRACE_EVENT0("ServiceWorker", 505 TRACE_EVENT0("ServiceWorker",
457 "ServiceWorkerScriptContext::OnFocusClientResponse"); 506 "ServiceWorkerScriptContext::OnFocusClientResponse");
458 blink::WebServiceWorkerClientFocusCallback* callback = 507 blink::WebServiceWorkerClientFocusCallback* callback =
459 pending_focus_client_callbacks_.Lookup(request_id); 508 pending_focus_client_callbacks_.Lookup(request_id);
460 if (!callback) { 509 if (!callback) {
461 NOTREACHED() << "Got stray response: " << request_id; 510 NOTREACHED() << "Got stray response: " << request_id;
462 return; 511 return;
463 } 512 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 NOTREACHED() << "Got stray response: " << request_id; 552 NOTREACHED() << "Got stray response: " << request_id;
504 return; 553 return;
505 } 554 }
506 scoped_ptr<blink::WebServiceWorkerError> error( 555 scoped_ptr<blink::WebServiceWorkerError> error(
507 new blink::WebServiceWorkerError(error_type, message)); 556 new blink::WebServiceWorkerError(error_type, message));
508 callbacks->onError(error.release()); 557 callbacks->onError(error.release());
509 pending_claim_clients_callbacks_.Remove(request_id); 558 pending_claim_clients_callbacks_.Remove(request_id);
510 } 559 }
511 560
512 } // namespace content 561 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/service_worker/service_worker_script_context.h ('k') | content/shell/browser/shell_content_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698