OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/child/service_worker/service_worker_dispatcher.h" | 5 #include "content/child/service_worker/service_worker_dispatcher.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
11 #include "base/single_thread_task_runner.h" | 11 #include "base/single_thread_task_runner.h" |
12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
13 #include "base/threading/thread_local.h" | 13 #include "base/threading/thread_local.h" |
14 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
15 #include "base/trace_event/trace_event.h" | 15 #include "base/trace_event/trace_event.h" |
16 #include "content/child/service_worker/service_worker_handle_reference.h" | 16 #include "content/child/service_worker/service_worker_handle_reference.h" |
17 #include "content/child/service_worker/service_worker_provider_context.h" | 17 #include "content/child/service_worker/service_worker_provider_context.h" |
18 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" | 18 #include "content/child/service_worker/service_worker_registration_handle_refere
nce.h" |
19 #include "content/child/service_worker/web_service_worker_impl.h" | 19 #include "content/child/service_worker/web_service_worker_impl.h" |
20 #include "content/child/service_worker/web_service_worker_registration_impl.h" | 20 #include "content/child/service_worker/web_service_worker_registration_impl.h" |
21 #include "content/child/thread_safe_sender.h" | 21 #include "content/child/thread_safe_sender.h" |
22 #include "content/child/webmessageportchannel_impl.h" | 22 #include "content/child/webmessageportchannel_impl.h" |
23 #include "content/common/service_worker/service_worker_messages.h" | 23 #include "content/common/service_worker/service_worker_messages.h" |
24 #include "content/common/service_worker/service_worker_types.h" | 24 #include "content/common/service_worker/service_worker_types.h" |
25 #include "content/public/common/content_constants.h" | 25 #include "content/public/common/content_constants.h" |
26 #include "third_party/WebKit/public/platform/WebString.h" | 26 #include "third_party/WebKit/public/platform/WebString.h" |
| 27 #include "third_party/WebKit/public/platform/modules/serviceworker/WebNavigation
PreloadState.h" |
27 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerProviderClient.h" | 28 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerProviderClient.h" |
28 #include "url/url_constants.h" | 29 #include "url/url_constants.h" |
29 | 30 |
30 using blink::WebServiceWorkerError; | 31 using blink::WebServiceWorkerError; |
31 using blink::WebServiceWorkerProvider; | 32 using blink::WebServiceWorkerProvider; |
32 using base::ThreadLocalPointer; | 33 using base::ThreadLocalPointer; |
33 | 34 |
34 namespace content { | 35 namespace content { |
35 | 36 |
36 namespace { | 37 namespace { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, | 75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, |
75 OnUnregistered) | 76 OnUnregistered) |
76 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistration, | 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistration, |
77 OnDidGetRegistration) | 78 OnDidGetRegistration) |
78 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrations, | 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrations, |
79 OnDidGetRegistrations) | 80 OnDidGetRegistrations) |
80 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrationForReady, | 81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrationForReady, |
81 OnDidGetRegistrationForReady) | 82 OnDidGetRegistrationForReady) |
82 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidEnableNavigationPreload, | 83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidEnableNavigationPreload, |
83 OnDidEnableNavigationPreload) | 84 OnDidEnableNavigationPreload) |
| 85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetNavigationPreloadState, |
| 86 OnDidGetNavigationPreloadState) |
84 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, | 87 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, |
85 OnRegistrationError) | 88 OnRegistrationError) |
86 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUpdateError, | 89 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUpdateError, |
87 OnUpdateError) | 90 OnUpdateError) |
88 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistrationError, | 91 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistrationError, |
89 OnUnregistrationError) | 92 OnUnregistrationError) |
90 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationError, | 93 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationError, |
91 OnGetRegistrationError) | 94 OnGetRegistrationError) |
92 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationsError, | 95 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationsError, |
93 OnGetRegistrationsError) | 96 OnGetRegistrationsError) |
94 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_EnableNavigationPreloadError, | 97 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_EnableNavigationPreloadError, |
95 OnEnableNavigationPreloadError) | 98 OnEnableNavigationPreloadError) |
| 99 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GetNavigationPreloadStateError, |
| 100 OnGetNavigationPreloadStateError) |
96 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 101 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, |
97 OnServiceWorkerStateChanged) | 102 OnServiceWorkerStateChanged) |
98 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 103 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, |
99 OnSetVersionAttributes) | 104 OnSetVersionAttributes) |
100 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 105 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, |
101 OnUpdateFound) | 106 OnUpdateFound) |
102 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 107 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, |
103 OnSetControllerServiceWorker) | 108 OnSetControllerServiceWorker) |
104 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 109 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, |
105 OnPostMessage) | 110 OnPostMessage) |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 int64_t registration_id, | 220 int64_t registration_id, |
216 bool enable, | 221 bool enable, |
217 std::unique_ptr<WebEnableNavigationPreloadCallbacks> callbacks) { | 222 std::unique_ptr<WebEnableNavigationPreloadCallbacks> callbacks) { |
218 DCHECK(callbacks); | 223 DCHECK(callbacks); |
219 int request_id = | 224 int request_id = |
220 enable_navigation_preload_callbacks_.Add(callbacks.release()); | 225 enable_navigation_preload_callbacks_.Add(callbacks.release()); |
221 thread_safe_sender_->Send(new ServiceWorkerHostMsg_EnableNavigationPreload( | 226 thread_safe_sender_->Send(new ServiceWorkerHostMsg_EnableNavigationPreload( |
222 CurrentWorkerId(), request_id, provider_id, registration_id, enable)); | 227 CurrentWorkerId(), request_id, provider_id, registration_id, enable)); |
223 } | 228 } |
224 | 229 |
| 230 void ServiceWorkerDispatcher::GetNavigationPreloadState( |
| 231 int provider_id, |
| 232 int64_t registration_id, |
| 233 std::unique_ptr<WebGetNavigationPreloadStateCallbacks> callbacks) { |
| 234 DCHECK(callbacks); |
| 235 int request_id = |
| 236 get_navigation_preload_state_callbacks_.Add(callbacks.release()); |
| 237 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetNavigationPreloadState( |
| 238 CurrentWorkerId(), request_id, provider_id, registration_id)); |
| 239 } |
| 240 |
225 void ServiceWorkerDispatcher::AddProviderContext( | 241 void ServiceWorkerDispatcher::AddProviderContext( |
226 ServiceWorkerProviderContext* provider_context) { | 242 ServiceWorkerProviderContext* provider_context) { |
227 DCHECK(provider_context); | 243 DCHECK(provider_context); |
228 int provider_id = provider_context->provider_id(); | 244 int provider_id = provider_context->provider_id(); |
229 DCHECK(!base::ContainsKey(provider_contexts_, provider_id)); | 245 DCHECK(!base::ContainsKey(provider_contexts_, provider_id)); |
230 provider_contexts_[provider_id] = provider_context; | 246 provider_contexts_[provider_id] = provider_context; |
231 } | 247 } |
232 | 248 |
233 void ServiceWorkerDispatcher::RemoveProviderContext( | 249 void ServiceWorkerDispatcher::RemoveProviderContext( |
234 ServiceWorkerProviderContext* provider_context) { | 250 ServiceWorkerProviderContext* provider_context) { |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 int request_id) { | 556 int request_id) { |
541 WebEnableNavigationPreloadCallbacks* callbacks = | 557 WebEnableNavigationPreloadCallbacks* callbacks = |
542 enable_navigation_preload_callbacks_.Lookup(request_id); | 558 enable_navigation_preload_callbacks_.Lookup(request_id); |
543 DCHECK(callbacks); | 559 DCHECK(callbacks); |
544 if (!callbacks) | 560 if (!callbacks) |
545 return; | 561 return; |
546 callbacks->onSuccess(); | 562 callbacks->onSuccess(); |
547 enable_navigation_preload_callbacks_.Remove(request_id); | 563 enable_navigation_preload_callbacks_.Remove(request_id); |
548 } | 564 } |
549 | 565 |
| 566 void ServiceWorkerDispatcher::OnDidGetNavigationPreloadState(int thread_id, |
| 567 int request_id, |
| 568 bool enabled) { |
| 569 WebGetNavigationPreloadStateCallbacks* callbacks = |
| 570 get_navigation_preload_state_callbacks_.Lookup(request_id); |
| 571 DCHECK(callbacks); |
| 572 if (!callbacks) |
| 573 return; |
| 574 // TODO(falken): Implement populating headerValue. |
| 575 callbacks->onSuccess( |
| 576 blink::WebNavigationPreloadState(enabled, blink::WebString())); |
| 577 get_navigation_preload_state_callbacks_.Remove(request_id); |
| 578 } |
| 579 |
550 void ServiceWorkerDispatcher::OnRegistrationError( | 580 void ServiceWorkerDispatcher::OnRegistrationError( |
551 int thread_id, | 581 int thread_id, |
552 int request_id, | 582 int request_id, |
553 WebServiceWorkerError::ErrorType error_type, | 583 WebServiceWorkerError::ErrorType error_type, |
554 const base::string16& message) { | 584 const base::string16& message) { |
555 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", | 585 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", |
556 "ServiceWorkerDispatcher::RegisterServiceWorker", | 586 "ServiceWorkerDispatcher::RegisterServiceWorker", |
557 request_id, | 587 request_id, |
558 "OnRegistrationError"); | 588 "OnRegistrationError"); |
559 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 589 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 WebEnableNavigationPreloadCallbacks* callbacks = | 697 WebEnableNavigationPreloadCallbacks* callbacks = |
668 enable_navigation_preload_callbacks_.Lookup(request_id); | 698 enable_navigation_preload_callbacks_.Lookup(request_id); |
669 DCHECK(callbacks); | 699 DCHECK(callbacks); |
670 if (!callbacks) | 700 if (!callbacks) |
671 return; | 701 return; |
672 callbacks->onError( | 702 callbacks->onError( |
673 WebServiceWorkerError(error_type, blink::WebString::fromUTF8(message))); | 703 WebServiceWorkerError(error_type, blink::WebString::fromUTF8(message))); |
674 enable_navigation_preload_callbacks_.Remove(request_id); | 704 enable_navigation_preload_callbacks_.Remove(request_id); |
675 } | 705 } |
676 | 706 |
| 707 void ServiceWorkerDispatcher::OnGetNavigationPreloadStateError( |
| 708 int thread_id, |
| 709 int request_id, |
| 710 WebServiceWorkerError::ErrorType error_type, |
| 711 const std::string& message) { |
| 712 WebGetNavigationPreloadStateCallbacks* callbacks = |
| 713 get_navigation_preload_state_callbacks_.Lookup(request_id); |
| 714 DCHECK(callbacks); |
| 715 if (!callbacks) |
| 716 return; |
| 717 callbacks->onError( |
| 718 WebServiceWorkerError(error_type, blink::WebString::fromUTF8(message))); |
| 719 get_navigation_preload_state_callbacks_.Remove(request_id); |
| 720 } |
| 721 |
677 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged( | 722 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged( |
678 int thread_id, | 723 int thread_id, |
679 int handle_id, | 724 int handle_id, |
680 blink::WebServiceWorkerState state) { | 725 blink::WebServiceWorkerState state) { |
681 TRACE_EVENT2("ServiceWorker", | 726 TRACE_EVENT2("ServiceWorker", |
682 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged", | 727 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged", |
683 "Thread ID", thread_id, | 728 "Thread ID", thread_id, |
684 "State", state); | 729 "State", state); |
685 WorkerObjectMap::iterator worker = service_workers_.find(handle_id); | 730 WorkerObjectMap::iterator worker = service_workers_.find(handle_id); |
686 if (worker != service_workers_.end()) | 731 if (worker != service_workers_.end()) |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 return ServiceWorkerRegistrationHandleReference::Adopt( | 862 return ServiceWorkerRegistrationHandleReference::Adopt( |
818 info, thread_safe_sender_.get()); | 863 info, thread_safe_sender_.get()); |
819 } | 864 } |
820 | 865 |
821 std::unique_ptr<ServiceWorkerHandleReference> ServiceWorkerDispatcher::Adopt( | 866 std::unique_ptr<ServiceWorkerHandleReference> ServiceWorkerDispatcher::Adopt( |
822 const ServiceWorkerObjectInfo& info) { | 867 const ServiceWorkerObjectInfo& info) { |
823 return ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()); | 868 return ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()); |
824 } | 869 } |
825 | 870 |
826 } // namespace content | 871 } // namespace content |
OLD | NEW |