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/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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
63 RequestContextType request_context_type) { | 63 RequestContextType request_context_type) { |
64 return static_cast<blink::WebURLRequest::RequestContext>( | 64 return static_cast<blink::WebURLRequest::RequestContext>( |
65 request_context_type); | 65 request_context_type); |
66 } | 66 } |
67 | 67 |
68 blink::WebURLRequest::FrameType GetBlinkFrameType( | 68 blink::WebURLRequest::FrameType GetBlinkFrameType( |
69 RequestContextFrameType frame_type) { | 69 RequestContextFrameType frame_type) { |
70 return static_cast<blink::WebURLRequest::FrameType>(frame_type); | 70 return static_cast<blink::WebURLRequest::FrameType>(frame_type); |
71 } | 71 } |
72 | 72 |
73 blink::WebServiceWorkerClientInfo ToWebServiceWorkerClientInfo( | |
74 const ServiceWorkerClientInfo& client) { | |
75 blink::WebServiceWorkerClientInfo web_client; | |
76 | |
77 web_client.clientID = client.client_id; | |
78 web_client.pageVisibilityState = client.page_visibility_state; | |
79 web_client.isFocused = client.is_focused; | |
80 web_client.url = client.url; | |
81 web_client.frameType = GetBlinkFrameType(client.frame_type); | |
82 | |
83 return web_client; | |
84 } | |
85 | |
73 } // namespace | 86 } // namespace |
74 | 87 |
75 ServiceWorkerScriptContext::ServiceWorkerScriptContext( | 88 ServiceWorkerScriptContext::ServiceWorkerScriptContext( |
76 EmbeddedWorkerContextClient* embedded_context, | 89 EmbeddedWorkerContextClient* embedded_context, |
77 blink::WebServiceWorkerContextProxy* proxy) | 90 blink::WebServiceWorkerContextProxy* proxy) |
78 : cache_storage_dispatcher_(new ServiceWorkerCacheStorageDispatcher(this)), | 91 : cache_storage_dispatcher_(new ServiceWorkerCacheStorageDispatcher(this)), |
79 embedded_context_(embedded_context), | 92 embedded_context_(embedded_context), |
80 proxy_(proxy) { | 93 proxy_(proxy) { |
81 } | 94 } |
82 | 95 |
(...skipping 11 matching lines...) Expand all Loading... | |
94 OnNotificationClickEvent) | 107 OnNotificationClickEvent) |
95 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) | 108 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) |
96 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) | 109 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) |
97 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, | 110 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, |
98 OnCrossOriginConnectEvent) | 111 OnCrossOriginConnectEvent) |
99 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) | 112 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) |
100 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, | 113 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, |
101 OnCrossOriginMessageToWorker) | 114 OnCrossOriginMessageToWorker) |
102 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments, | 115 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClientDocuments, |
103 OnDidGetClientDocuments) | 116 OnDidGetClientDocuments) |
117 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, | |
118 OnOpenWindowResponse) | |
119 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, | |
120 OnOpenWindowError) | |
104 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, | 121 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, |
105 OnFocusClientResponse) | 122 OnFocusClientResponse) |
106 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) | 123 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidSkipWaiting, OnDidSkipWaiting) |
107 IPC_MESSAGE_UNHANDLED(handled = false) | 124 IPC_MESSAGE_UNHANDLED(handled = false) |
108 IPC_END_MESSAGE_MAP() | 125 IPC_END_MESSAGE_MAP() |
109 | 126 |
110 // TODO(gavinp): Would it be preferable to put an AddListener() method to | 127 // TODO(gavinp): Would it be preferable to put an AddListener() method to |
111 // EmbeddedWorkerContextClient? | 128 // EmbeddedWorkerContextClient? |
112 if (!handled) | 129 if (!handled) |
113 handled = cache_storage_dispatcher_->OnMessageReceived(message); | 130 handled = cache_storage_dispatcher_->OnMessageReceived(message); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
191 } | 208 } |
192 | 209 |
193 void ServiceWorkerScriptContext::GetClientDocuments( | 210 void ServiceWorkerScriptContext::GetClientDocuments( |
194 blink::WebServiceWorkerClientsCallbacks* callbacks) { | 211 blink::WebServiceWorkerClientsCallbacks* callbacks) { |
195 DCHECK(callbacks); | 212 DCHECK(callbacks); |
196 int request_id = pending_clients_callbacks_.Add(callbacks); | 213 int request_id = pending_clients_callbacks_.Add(callbacks); |
197 Send(new ServiceWorkerHostMsg_GetClientDocuments( | 214 Send(new ServiceWorkerHostMsg_GetClientDocuments( |
198 GetRoutingID(), request_id)); | 215 GetRoutingID(), request_id)); |
199 } | 216 } |
200 | 217 |
218 void ServiceWorkerScriptContext::OpenWindow( | |
219 const GURL& url, | |
220 const GURL& referrer, | |
221 blink::WebServiceWorkerClientCallbacks* callbacks) { | |
222 DCHECK(callbacks); | |
223 int request_id = pending_client_callbacks_.Add(callbacks); | |
224 Send(new ServiceWorkerHostMsg_OpenWindow( | |
225 GetRoutingID(), request_id, url, referrer)); | |
226 } | |
227 | |
201 void ServiceWorkerScriptContext::PostMessageToDocument( | 228 void ServiceWorkerScriptContext::PostMessageToDocument( |
202 int client_id, | 229 int client_id, |
203 const base::string16& message, | 230 const base::string16& message, |
204 scoped_ptr<blink::WebMessagePortChannelArray> channels) { | 231 scoped_ptr<blink::WebMessagePortChannelArray> channels) { |
205 // This may send channels for MessagePorts, and all internal book-keeping | 232 // This may send channels for MessagePorts, and all internal book-keeping |
206 // messages for MessagePort (e.g. QueueMessages) are sent from main thread | 233 // messages for MessagePort (e.g. QueueMessages) are sent from main thread |
207 // (with thread hopping), so we need to do the same thread hopping here not | 234 // (with thread hopping), so we need to do the same thread hopping here not |
208 // to overtake those messages. | 235 // to overtake those messages. |
209 embedded_context_->main_thread_proxy()->PostTask( | 236 embedded_context_->main_thread_proxy()->PostTask( |
210 FROM_HERE, | 237 FROM_HERE, |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
405 blink::WebServiceWorkerClientsCallbacks* callbacks = | 432 blink::WebServiceWorkerClientsCallbacks* callbacks = |
406 pending_clients_callbacks_.Lookup(request_id); | 433 pending_clients_callbacks_.Lookup(request_id); |
407 if (!callbacks) { | 434 if (!callbacks) { |
408 NOTREACHED() << "Got stray response: " << request_id; | 435 NOTREACHED() << "Got stray response: " << request_id; |
409 return; | 436 return; |
410 } | 437 } |
411 scoped_ptr<blink::WebServiceWorkerClientsInfo> info( | 438 scoped_ptr<blink::WebServiceWorkerClientsInfo> info( |
412 new blink::WebServiceWorkerClientsInfo); | 439 new blink::WebServiceWorkerClientsInfo); |
413 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients( | 440 blink::WebVector<blink::WebServiceWorkerClientInfo> convertedClients( |
414 clients.size()); | 441 clients.size()); |
415 for (size_t i = 0; i < clients.size(); ++i) { | 442 for (size_t i = 0; i < clients.size(); ++i) |
416 convertedClients[i].clientID = clients[i].client_id; | 443 convertedClients[i] = ToWebServiceWorkerClientInfo(clients[i]); |
417 convertedClients[i].pageVisibilityState = clients[i].page_visibility_state; | |
418 convertedClients[i].isFocused = clients[i].is_focused; | |
419 convertedClients[i].url = clients[i].url; | |
420 convertedClients[i].frameType = | |
421 static_cast<blink::WebURLRequest::FrameType>(clients[i].frame_type); | |
422 } | |
423 info->clients.swap(convertedClients); | 444 info->clients.swap(convertedClients); |
424 callbacks->onSuccess(info.release()); | 445 callbacks->onSuccess(info.release()); |
425 pending_clients_callbacks_.Remove(request_id); | 446 pending_clients_callbacks_.Remove(request_id); |
426 } | 447 } |
427 | 448 |
449 void ServiceWorkerScriptContext::OnOpenWindowResponse( | |
450 int request_id, const ServiceWorkerClientInfo& client, bool dummy_client) { | |
nasko
2015/01/17 00:05:28
nit: if params don't fit on the line of the method
mlamouri (slow - plz ping)
2015/01/26 13:19:08
Done.
| |
451 TRACE_EVENT0("ServiceWorker", | |
452 "ServiceWorkerScriptContext::OnOpenWindowResponse"); | |
453 blink::WebServiceWorkerClientCallbacks* callbacks = | |
454 pending_client_callbacks_.Lookup(request_id); | |
455 if (!callbacks) { | |
456 NOTREACHED() << "Got stray response: " << request_id; | |
457 return; | |
458 } | |
459 scoped_ptr<blink::WebServiceWorkerClientInfo> web_client( | |
460 new blink::WebServiceWorkerClientInfo( | |
461 ToWebServiceWorkerClientInfo(client))); | |
462 callbacks->onSuccess(dummy_client ? nullptr : web_client.release()); | |
463 pending_client_callbacks_.Remove(request_id); | |
464 } | |
465 | |
466 void ServiceWorkerScriptContext::OnOpenWindowError(int request_id) { | |
467 TRACE_EVENT0("ServiceWorker", | |
468 "ServiceWorkerScriptContext::OnOpenWindowError"); | |
469 blink::WebServiceWorkerClientCallbacks* callbacks = | |
470 pending_client_callbacks_.Lookup(request_id); | |
471 if (!callbacks) { | |
472 NOTREACHED() << "Got stray response: " << request_id; | |
473 return; | |
474 } | |
475 scoped_ptr<blink::WebServiceWorkerError> error( | |
476 new blink::WebServiceWorkerError( | |
477 blink::WebServiceWorkerError::ErrorTypeUnknown, | |
478 "Something went wrong while trying to open the window.")); | |
479 callbacks->onError(error.release()); | |
480 pending_client_callbacks_.Remove(request_id); | |
481 } | |
482 | |
428 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id, | 483 void ServiceWorkerScriptContext::OnFocusClientResponse(int request_id, |
429 bool result) { | 484 bool result) { |
430 TRACE_EVENT0("ServiceWorker", | 485 TRACE_EVENT0("ServiceWorker", |
431 "ServiceWorkerScriptContext::OnFocusClientResponse"); | 486 "ServiceWorkerScriptContext::OnFocusClientResponse"); |
432 blink::WebServiceWorkerClientFocusCallback* callback = | 487 blink::WebServiceWorkerClientFocusCallback* callback = |
433 pending_focus_client_callbacks_.Lookup(request_id); | 488 pending_focus_client_callbacks_.Lookup(request_id); |
434 if (!callback) { | 489 if (!callback) { |
435 NOTREACHED() << "Got stray response: " << request_id; | 490 NOTREACHED() << "Got stray response: " << request_id; |
436 return; | 491 return; |
437 } | 492 } |
438 callback->onSuccess(&result); | 493 callback->onSuccess(&result); |
439 pending_focus_client_callbacks_.Remove(request_id); | 494 pending_focus_client_callbacks_.Remove(request_id); |
440 } | 495 } |
441 | 496 |
442 void ServiceWorkerScriptContext::OnDidSkipWaiting(int request_id) { | 497 void ServiceWorkerScriptContext::OnDidSkipWaiting(int request_id) { |
443 TRACE_EVENT0("ServiceWorker", | 498 TRACE_EVENT0("ServiceWorker", |
444 "ServiceWorkerScriptContext::OnDidSkipWaiting"); | 499 "ServiceWorkerScriptContext::OnDidSkipWaiting"); |
445 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks = | 500 blink::WebServiceWorkerSkipWaitingCallbacks* callbacks = |
446 pending_skip_waiting_callbacks_.Lookup(request_id); | 501 pending_skip_waiting_callbacks_.Lookup(request_id); |
447 if (!callbacks) { | 502 if (!callbacks) { |
448 NOTREACHED() << "Got stray response: " << request_id; | 503 NOTREACHED() << "Got stray response: " << request_id; |
449 return; | 504 return; |
450 } | 505 } |
451 callbacks->onSuccess(); | 506 callbacks->onSuccess(); |
452 pending_skip_waiting_callbacks_.Remove(request_id); | 507 pending_skip_waiting_callbacks_.Remove(request_id); |
453 } | 508 } |
454 | 509 |
455 } // namespace content | 510 } // namespace content |
OLD | NEW |