OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |