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 "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/threading/thread_local.h" | 9 #include "base/threading/thread_local.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 OnAssociateRegistrationWithServiceWorker) | 61 OnAssociateRegistrationWithServiceWorker) |
62 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_AssociateRegistration, | 62 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_AssociateRegistration, |
63 OnAssociateRegistration) | 63 OnAssociateRegistration) |
64 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DisassociateRegistration, | 64 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DisassociateRegistration, |
65 OnDisassociateRegistration) | 65 OnDisassociateRegistration) |
66 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) | 66 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) |
67 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, | 67 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, |
68 OnUnregistered) | 68 OnUnregistered) |
69 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistration, | 69 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistration, |
70 OnDidGetRegistration) | 70 OnDidGetRegistration) |
71 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrations, | |
72 OnDidGetRegistrations) | |
71 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrationForReady, | 73 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetRegistrationForReady, |
72 OnDidGetRegistrationForReady) | 74 OnDidGetRegistrationForReady) |
73 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, | 75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, |
74 OnRegistrationError) | 76 OnRegistrationError) |
75 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistrationError, | 77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistrationError, |
76 OnUnregistrationError) | 78 OnUnregistrationError) |
77 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationError, | 79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationError, |
78 OnGetRegistrationError) | 80 OnGetRegistrationError) |
81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerGetRegistrationsError, | |
82 OnGetRegistrationsError) | |
79 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, |
80 OnServiceWorkerStateChanged) | 84 OnServiceWorkerStateChanged) |
81 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, |
82 OnSetVersionAttributes) | 86 OnSetVersionAttributes) |
83 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 87 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, |
84 OnUpdateFound) | 88 OnUpdateFound) |
85 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 89 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, |
86 OnSetControllerServiceWorker) | 90 OnSetControllerServiceWorker) |
87 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 91 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, |
88 OnPostMessage) | 92 OnPostMessage) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
172 | 176 |
173 int request_id = pending_get_registration_callbacks_.Add(callbacks); | 177 int request_id = pending_get_registration_callbacks_.Add(callbacks); |
174 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", | 178 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", |
175 "ServiceWorkerDispatcher::GetRegistration", | 179 "ServiceWorkerDispatcher::GetRegistration", |
176 request_id, | 180 request_id, |
177 "Document URL", document_url.spec()); | 181 "Document URL", document_url.spec()); |
178 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistration( | 182 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistration( |
179 CurrentWorkerId(), request_id, provider_id, document_url)); | 183 CurrentWorkerId(), request_id, provider_id, document_url)); |
180 } | 184 } |
181 | 185 |
186 void ServiceWorkerDispatcher::GetRegistrations( | |
187 int provider_id, | |
188 const GURL& document_url, | |
kinuko
2015/05/21 07:57:06
I have a feeling that this doesn't need to be (or
jungkees
2015/05/21 13:46:25
Agreed. Correct and much simpler!
| |
189 WebServiceWorkerGetRegistrationsCallbacks* callbacks) { | |
190 DCHECK(callbacks); | |
191 | |
192 int request_id = pending_get_registrations_callbacks_.Add(callbacks); | |
193 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", | |
194 "ServiceWorkerDispatcher::GetRegistrations", | |
195 request_id, | |
196 "Document URL", document_url.spec()); | |
197 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistrations( | |
198 CurrentWorkerId(), request_id, provider_id, document_url)); | |
199 } | |
200 | |
182 void ServiceWorkerDispatcher::GetRegistrationForReady( | 201 void ServiceWorkerDispatcher::GetRegistrationForReady( |
183 int provider_id, | 202 int provider_id, |
184 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks) { | 203 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks) { |
185 int request_id = get_for_ready_callbacks_.Add(callbacks); | 204 int request_id = get_for_ready_callbacks_.Add(callbacks); |
186 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", | 205 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", |
187 "ServiceWorkerDispatcher::GetRegistrationForReady", | 206 "ServiceWorkerDispatcher::GetRegistrationForReady", |
188 request_id); | 207 request_id); |
189 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistrationForReady( | 208 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistrationForReady( |
190 CurrentWorkerId(), request_id, provider_id)); | 209 CurrentWorkerId(), request_id, provider_id)); |
191 } | 210 } |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
409 return; | 428 return; |
410 | 429 |
411 WebServiceWorkerRegistrationImpl* registration = NULL; | 430 WebServiceWorkerRegistrationImpl* registration = NULL; |
412 if (info.handle_id != kInvalidServiceWorkerHandleId) | 431 if (info.handle_id != kInvalidServiceWorkerHandleId) |
413 registration = FindOrCreateRegistration(info, attrs); | 432 registration = FindOrCreateRegistration(info, attrs); |
414 | 433 |
415 callbacks->onSuccess(registration); | 434 callbacks->onSuccess(registration); |
416 pending_get_registration_callbacks_.Remove(request_id); | 435 pending_get_registration_callbacks_.Remove(request_id); |
417 } | 436 } |
418 | 437 |
438 void ServiceWorkerDispatcher::OnDidGetRegistrations( | |
439 int thread_id, | |
440 int request_id, | |
441 const std::vector<ServiceWorkerRegistrationObjectInfo>& infos, | |
442 const std::vector<ServiceWorkerVersionAttributes>& attrs) { | |
443 TRACE_EVENT_ASYNC_STEP_INTO0( | |
444 "ServiceWorker", | |
445 "ServiceWorkerDispatcher::GetRegistrations", | |
446 request_id, | |
447 "OnDidGetRegistrations"); | |
448 TRACE_EVENT_ASYNC_END0("ServiceWorker", | |
449 "ServiceWorkerDispatcher::GetRegistrations", | |
450 request_id); | |
451 | |
452 WebServiceWorkerGetRegistrationsCallbacks* callbacks = | |
453 pending_get_registrations_callbacks_.Lookup(request_id); | |
454 DCHECK(callbacks); | |
455 if (!callbacks) | |
456 return; | |
457 | |
458 typedef blink::WebVector<blink::WebServiceWorkerRegistration*> | |
459 WebServiceWorkerRegistrationArray; | |
460 scoped_ptr<WebServiceWorkerRegistrationArray> | |
461 registrations(new WebServiceWorkerRegistrationArray(infos.size())); | |
462 for (size_t i = 0; i < infos.size(); ++i) { | |
463 if (infos[i].handle_id != kInvalidServiceWorkerHandleId) { | |
464 ServiceWorkerRegistrationObjectInfo info(infos[i]); | |
465 ServiceWorkerVersionAttributes attr(attrs[i]); | |
466 (*registrations)[i] = FindOrCreateRegistration(info, attr); | |
467 } | |
468 } | |
469 | |
470 callbacks->onSuccess(registrations.release()); | |
471 pending_get_registrations_callbacks_.Remove(request_id); | |
472 } | |
473 | |
419 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( | 474 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( |
420 int thread_id, | 475 int thread_id, |
421 int request_id, | 476 int request_id, |
422 const ServiceWorkerRegistrationObjectInfo& info, | 477 const ServiceWorkerRegistrationObjectInfo& info, |
423 const ServiceWorkerVersionAttributes& attrs) { | 478 const ServiceWorkerVersionAttributes& attrs) { |
424 TRACE_EVENT_ASYNC_STEP_INTO0( | 479 TRACE_EVENT_ASYNC_STEP_INTO0( |
425 "ServiceWorker", | 480 "ServiceWorker", |
426 "ServiceWorkerDispatcher::GetRegistrationForReady", | 481 "ServiceWorkerDispatcher::GetRegistrationForReady", |
427 request_id, | 482 request_id, |
428 "OnDidGetRegistrationForReady"); | 483 "OnDidGetRegistrationForReady"); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
509 DCHECK(callbacks); | 564 DCHECK(callbacks); |
510 if (!callbacks) | 565 if (!callbacks) |
511 return; | 566 return; |
512 | 567 |
513 scoped_ptr<WebServiceWorkerError> error( | 568 scoped_ptr<WebServiceWorkerError> error( |
514 new WebServiceWorkerError(error_type, message)); | 569 new WebServiceWorkerError(error_type, message)); |
515 callbacks->onError(error.release()); | 570 callbacks->onError(error.release()); |
516 pending_get_registration_callbacks_.Remove(request_id); | 571 pending_get_registration_callbacks_.Remove(request_id); |
517 } | 572 } |
518 | 573 |
574 void ServiceWorkerDispatcher::OnGetRegistrationsError( | |
575 int thread_id, | |
576 int request_id, | |
577 WebServiceWorkerError::ErrorType error_type, | |
578 const base::string16& message) { | |
579 TRACE_EVENT_ASYNC_STEP_INTO0( | |
580 "ServiceWorker", | |
581 "ServiceWorkerDispatcher::GetRegistrations", | |
582 request_id, | |
583 "OnGetRegistrationsError"); | |
584 TRACE_EVENT_ASYNC_END0("ServiceWorker", | |
585 "ServiceWorkerDispatcher::GetRegistrations", | |
586 request_id); | |
587 WebServiceWorkerGetRegistrationsCallbacks* callbacks = | |
588 pending_get_registrations_callbacks_.Lookup(request_id); | |
589 DCHECK(callbacks); | |
590 if (!callbacks) | |
591 return; | |
592 | |
593 scoped_ptr<WebServiceWorkerError> error( | |
594 new WebServiceWorkerError(error_type, message)); | |
595 callbacks->onError(error.release()); | |
596 pending_get_registration_callbacks_.Remove(request_id); | |
597 } | |
598 | |
519 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged( | 599 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged( |
520 int thread_id, | 600 int thread_id, |
521 int handle_id, | 601 int handle_id, |
522 blink::WebServiceWorkerState state) { | 602 blink::WebServiceWorkerState state) { |
523 TRACE_EVENT2("ServiceWorker", | 603 TRACE_EVENT2("ServiceWorker", |
524 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged", | 604 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged", |
525 "Thread ID", thread_id, | 605 "Thread ID", thread_id, |
526 "State", state); | 606 "State", state); |
527 WorkerObjectMap::iterator worker = service_workers_.find(handle_id); | 607 WorkerObjectMap::iterator worker = service_workers_.find(handle_id); |
528 if (worker != service_workers_.end()) | 608 if (worker != service_workers_.end()) |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
687 bool adopt_handle = true; | 767 bool adopt_handle = true; |
688 WebServiceWorkerRegistrationImpl* registration = | 768 WebServiceWorkerRegistrationImpl* registration = |
689 CreateServiceWorkerRegistration(info, adopt_handle); | 769 CreateServiceWorkerRegistration(info, adopt_handle); |
690 registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); | 770 registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); |
691 registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); | 771 registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); |
692 registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); | 772 registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); |
693 return registration; | 773 return registration; |
694 } | 774 } |
695 | 775 |
696 } // namespace content | 776 } // namespace content |
OLD | NEW |