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

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

Issue 1110103003: Initial implementation of stashed message ports, content side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor formatting issues Created 5 years, 7 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/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 int message_port_id, 47 int message_port_id,
48 const base::string16& message, 48 const base::string16& message,
49 scoped_ptr<blink::WebMessagePortChannelArray> channels) { 49 scoped_ptr<blink::WebMessagePortChannelArray> channels) {
50 sender->Send(new MessagePortHostMsg_PostMessage( 50 sender->Send(new MessagePortHostMsg_PostMessage(
51 message_port_id, 51 message_port_id,
52 MessagePortMessage(message), 52 MessagePortMessage(message),
53 WebMessagePortChannelImpl::ExtractMessagePortIDs( 53 WebMessagePortChannelImpl::ExtractMessagePortIDs(
54 channels.release()))); 54 channels.release())));
55 } 55 }
56 56
57 void StashMessagePortOnMainThread(ThreadSafeSender* sender,
58 int routing_id,
59 WebMessagePortChannelImpl* channel,
60 const base::string16& name) {
61 DCHECK(channel->message_port_id() >= 0);
Avi (use Gerrit) 2015/05/20 03:02:10 DCHECK_GE
62 channel->set_is_stashed();
63 sender->Send(new ServiceWorkerHostMsg_StashMessagePort(
64 routing_id, channel->message_port_id(), name));
65 }
66
57 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode( 67 blink::WebURLRequest::FetchRequestMode GetBlinkFetchRequestMode(
58 FetchRequestMode mode) { 68 FetchRequestMode mode) {
59 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode); 69 return static_cast<blink::WebURLRequest::FetchRequestMode>(mode);
60 } 70 }
61 71
62 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode( 72 blink::WebURLRequest::FetchCredentialsMode GetBlinkFetchCredentialsMode(
63 FetchCredentialsMode credentials_mode) { 73 FetchCredentialsMode credentials_mode) {
64 return static_cast<blink::WebURLRequest::FetchCredentialsMode>( 74 return static_cast<blink::WebURLRequest::FetchCredentialsMode>(
65 credentials_mode); 75 credentials_mode);
66 } 76 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent) 123 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent)
114 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, 124 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent,
115 OnNotificationClickEvent) 125 OnNotificationClickEvent)
116 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 126 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
117 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) 127 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
118 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, 128 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
119 OnCrossOriginConnectEvent) 129 OnCrossOriginConnectEvent)
120 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) 130 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage)
121 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, 131 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
122 OnCrossOriginMessageToWorker) 132 OnCrossOriginMessageToWorker)
133 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts,
134 OnSendStashedMessagePorts)
123 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, 135 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients,
124 OnDidGetClients) 136 OnDidGetClients)
125 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, 137 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
126 OnOpenWindowResponse) 138 OnOpenWindowResponse)
127 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, 139 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError,
128 OnOpenWindowError) 140 OnOpenWindowError)
129 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, 141 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse,
130 OnFocusClientResponse) 142 OnFocusClientResponse)
131 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) 143 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting)
132 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients) 144 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidClaimClients, OnDidClaimClients)
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 Send(new ServiceWorkerHostMsg_ClaimClients(GetRoutingID(), request_id)); 308 Send(new ServiceWorkerHostMsg_ClaimClients(GetRoutingID(), request_id));
297 } 309 }
298 310
299 void ServiceWorkerScriptContext::SkipWaiting( 311 void ServiceWorkerScriptContext::SkipWaiting(
300 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks) { 312 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks) {
301 DCHECK(callbacks); 313 DCHECK(callbacks);
302 int request_id = pending_skip_waiting_callbacks_.Add(callbacks); 314 int request_id = pending_skip_waiting_callbacks_.Add(callbacks);
303 Send(new ServiceWorkerHostMsg_SkipWaiting(GetRoutingID(), request_id)); 315 Send(new ServiceWorkerHostMsg_SkipWaiting(GetRoutingID(), request_id));
304 } 316 }
305 317
318 void ServiceWorkerScriptContext::StashMessagePort(
319 blink::WebMessagePortChannel* channel,
320 const base::string16& name) {
321 // All internal book-keeping messages for MessagePort are sent from main
322 // thread (with thread hopping), so we need to do the same thread hopping here
323 // not to overtake those messages.
324 WebMessagePortChannelImpl* channel_impl =
325 static_cast<WebMessagePortChannelImpl*>(channel);
326 embedded_context_->main_thread_task_runner()->PostTask(
327 FROM_HERE,
328 base::Bind(&StashMessagePortOnMainThread,
329 make_scoped_refptr(embedded_context_->thread_safe_sender()),
330 GetRoutingID(), base::Unretained(channel_impl), name));
331 }
332
306 void ServiceWorkerScriptContext::Send(IPC::Message* message) { 333 void ServiceWorkerScriptContext::Send(IPC::Message* message) {
307 embedded_context_->Send(message); 334 embedded_context_->Send(message);
308 } 335 }
309 336
310 int ServiceWorkerScriptContext::GetRoutingID() const { 337 int ServiceWorkerScriptContext::GetRoutingID() const {
311 return embedded_context_->embedded_worker_id(); 338 return embedded_context_->embedded_worker_id();
312 } 339 }
313 340
314 void ServiceWorkerScriptContext::OnActivateEvent(int request_id) { 341 void ServiceWorkerScriptContext::OnActivateEvent(int request_id) {
315 TRACE_EVENT0("ServiceWorker", 342 TRACE_EVENT0("ServiceWorker",
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 sent_message_ports, new_routing_ids, 468 sent_message_ports, new_routing_ids,
442 embedded_context_->main_thread_task_runner()); 469 embedded_context_->main_thread_task_runner());
443 470
444 blink::WebCrossOriginServiceWorkerClient web_client; 471 blink::WebCrossOriginServiceWorkerClient web_client;
445 web_client.origin = client.origin; 472 web_client.origin = client.origin;
446 web_client.targetURL = client.target_url; 473 web_client.targetURL = client.target_url;
447 web_client.clientID = client.message_port_id; 474 web_client.clientID = client.message_port_id;
448 proxy_->dispatchCrossOriginMessageEvent(web_client, message, ports); 475 proxy_->dispatchCrossOriginMessageEvent(web_client, message, ports);
449 } 476 }
450 477
478 void ServiceWorkerScriptContext::OnSendStashedMessagePorts(
479 const std::vector<TransferredMessagePort>& stashed_message_ports,
480 const std::vector<int>& new_routing_ids,
481 const std::vector<base::string16>& port_names) {
482 TRACE_EVENT0("ServiceWorker",
483 "ServiceWorkerScriptContext::OnSendStashedMessagePorts");
484 blink::WebMessagePortChannelArray ports =
485 WebMessagePortChannelImpl::CreatePorts(
486 stashed_message_ports, new_routing_ids,
487 embedded_context_->main_thread_task_runner());
488 for (blink::WebMessagePortChannel* port : ports)
489 static_cast<WebMessagePortChannelImpl*>(port)->set_is_stashed();
490 proxy_->addStashedMessagePorts(ports, port_names);
491 }
492
451 void ServiceWorkerScriptContext::OnDidGetClients( 493 void ServiceWorkerScriptContext::OnDidGetClients(
452 int request_id, const std::vector<ServiceWorkerClientInfo>& clients) { 494 int request_id, const std::vector<ServiceWorkerClientInfo>& clients) {
453 TRACE_EVENT0("ServiceWorker", 495 TRACE_EVENT0("ServiceWorker",
454 "ServiceWorkerScriptContext::OnDidGetClients"); 496 "ServiceWorkerScriptContext::OnDidGetClients");
455 blink::WebServiceWorkerClientsCallbacks* callbacks = 497 blink::WebServiceWorkerClientsCallbacks* callbacks =
456 pending_clients_callbacks_.Lookup(request_id); 498 pending_clients_callbacks_.Lookup(request_id);
457 if (!callbacks) { 499 if (!callbacks) {
458 NOTREACHED() << "Got stray response: " << request_id; 500 NOTREACHED() << "Got stray response: " << request_id;
459 return; 501 return;
460 } 502 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 new blink::WebServiceWorkerError(error_type, message)); 620 new blink::WebServiceWorkerError(error_type, message));
579 callbacks->onError(error.release()); 621 callbacks->onError(error.release());
580 pending_claim_clients_callbacks_.Remove(request_id); 622 pending_claim_clients_callbacks_.Remove(request_id);
581 } 623 }
582 624
583 void ServiceWorkerScriptContext::OnPing() { 625 void ServiceWorkerScriptContext::OnPing() {
584 Send(new ServiceWorkerHostMsg_Pong(GetRoutingID())); 626 Send(new ServiceWorkerHostMsg_Pong(GetRoutingID()));
585 } 627 }
586 628
587 } // namespace content 629 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698