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/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
10 #include "base/threading/thread_local.h" | 10 #include "base/threading/thread_local.h" |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 return NULL; | 255 return NULL; |
256 return g_dispatcher_tls.Pointer()->Get(); | 256 return g_dispatcher_tls.Pointer()->Get(); |
257 } | 257 } |
258 | 258 |
259 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { | 259 void ServiceWorkerDispatcher::OnWorkerRunLoopStopped() { |
260 delete this; | 260 delete this; |
261 } | 261 } |
262 | 262 |
263 WebServiceWorkerImpl* ServiceWorkerDispatcher::GetServiceWorker( | 263 WebServiceWorkerImpl* ServiceWorkerDispatcher::GetServiceWorker( |
264 const ServiceWorkerObjectInfo& info, | 264 const ServiceWorkerObjectInfo& info, |
| 265 int provider_id, |
265 bool adopt_handle) { | 266 bool adopt_handle) { |
266 if (info.handle_id == kInvalidServiceWorkerHandleId) | 267 if (info.handle_id == kInvalidServiceWorkerHandleId) |
267 return NULL; | 268 return NULL; |
268 | 269 |
269 WorkerObjectMap::iterator existing_worker = | 270 WorkerObjectMap::iterator existing_worker = |
270 service_workers_.find(info.handle_id); | 271 service_workers_.find(info.handle_id); |
271 | 272 |
272 if (existing_worker != service_workers_.end()) { | 273 if (existing_worker != service_workers_.end()) { |
273 if (adopt_handle) { | 274 if (adopt_handle) { |
274 // We are instructed to adopt a handle but we already have one, so | 275 // We are instructed to adopt a handle but we already have one, so |
275 // adopt and destroy a handle ref. | 276 // adopt and destroy a handle ref. |
276 ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()); | 277 ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()); |
277 } | 278 } |
278 return existing_worker->second; | 279 return existing_worker->second; |
279 } | 280 } |
280 | 281 |
281 scoped_ptr<ServiceWorkerHandleReference> handle_ref = | 282 scoped_ptr<ServiceWorkerHandleReference> handle_ref = |
282 adopt_handle | 283 adopt_handle |
283 ? ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()) | 284 ? ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_.get()) |
284 : ServiceWorkerHandleReference::Create(info, | 285 : ServiceWorkerHandleReference::Create(info, |
285 thread_safe_sender_.get()); | 286 thread_safe_sender_.get()); |
286 // WebServiceWorkerImpl constructor calls AddServiceWorker. | 287 // WebServiceWorkerImpl constructor calls AddServiceWorker. |
287 return new WebServiceWorkerImpl(handle_ref.Pass(), thread_safe_sender_.get()); | 288 return new WebServiceWorkerImpl(handle_ref.Pass(), provider_id, |
| 289 thread_safe_sender_.get()); |
288 } | 290 } |
289 | 291 |
290 WebServiceWorkerRegistrationImpl* | 292 WebServiceWorkerRegistrationImpl* |
291 ServiceWorkerDispatcher::CreateServiceWorkerRegistration( | 293 ServiceWorkerDispatcher::CreateServiceWorkerRegistration( |
292 const ServiceWorkerRegistrationObjectInfo& info, | 294 const ServiceWorkerRegistrationObjectInfo& info, |
293 bool adopt_handle) { | 295 bool adopt_handle) { |
294 DCHECK(!ContainsKey(registrations_, info.handle_id)); | 296 DCHECK(!ContainsKey(registrations_, info.handle_id)); |
295 if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId) | 297 if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId) |
296 return NULL; | 298 return NULL; |
297 | 299 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 worker_to_provider_.erase(provider->second->installing_handle_id()); | 355 worker_to_provider_.erase(provider->second->installing_handle_id()); |
354 worker_to_provider_.erase(provider->second->waiting_handle_id()); | 356 worker_to_provider_.erase(provider->second->waiting_handle_id()); |
355 worker_to_provider_.erase(provider->second->active_handle_id()); | 357 worker_to_provider_.erase(provider->second->active_handle_id()); |
356 worker_to_provider_.erase(provider->second->controller_handle_id()); | 358 worker_to_provider_.erase(provider->second->controller_handle_id()); |
357 provider->second->OnDisassociateRegistration(); | 359 provider->second->OnDisassociateRegistration(); |
358 } | 360 } |
359 | 361 |
360 void ServiceWorkerDispatcher::OnRegistered( | 362 void ServiceWorkerDispatcher::OnRegistered( |
361 int thread_id, | 363 int thread_id, |
362 int request_id, | 364 int request_id, |
| 365 int provider_id, |
363 const ServiceWorkerRegistrationObjectInfo& info, | 366 const ServiceWorkerRegistrationObjectInfo& info, |
364 const ServiceWorkerVersionAttributes& attrs) { | 367 const ServiceWorkerVersionAttributes& attrs) { |
365 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", | 368 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", |
366 "ServiceWorkerDispatcher::RegisterServiceWorker", | 369 "ServiceWorkerDispatcher::RegisterServiceWorker", |
367 request_id, | 370 request_id, |
368 "OnRegistered"); | 371 "OnRegistered"); |
369 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 372 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
370 "ServiceWorkerDispatcher::RegisterServiceWorker", | 373 "ServiceWorkerDispatcher::RegisterServiceWorker", |
371 request_id); | 374 request_id); |
372 WebServiceWorkerRegistrationCallbacks* callbacks = | 375 WebServiceWorkerRegistrationCallbacks* callbacks = |
373 pending_registration_callbacks_.Lookup(request_id); | 376 pending_registration_callbacks_.Lookup(request_id); |
374 DCHECK(callbacks); | 377 DCHECK(callbacks); |
375 if (!callbacks) | 378 if (!callbacks) |
376 return; | 379 return; |
377 | 380 |
378 callbacks->onSuccess(FindOrCreateRegistration(info, attrs)); | 381 callbacks->onSuccess(FindOrCreateRegistration(provider_id, info, attrs)); |
379 pending_registration_callbacks_.Remove(request_id); | 382 pending_registration_callbacks_.Remove(request_id); |
380 } | 383 } |
381 | 384 |
382 void ServiceWorkerDispatcher::OnUnregistered(int thread_id, | 385 void ServiceWorkerDispatcher::OnUnregistered(int thread_id, |
383 int request_id, | 386 int request_id, |
384 bool is_success) { | 387 bool is_success) { |
385 TRACE_EVENT_ASYNC_STEP_INTO0( | 388 TRACE_EVENT_ASYNC_STEP_INTO0( |
386 "ServiceWorker", | 389 "ServiceWorker", |
387 "ServiceWorkerDispatcher::UnregisterServiceWorker", | 390 "ServiceWorkerDispatcher::UnregisterServiceWorker", |
388 request_id, | 391 request_id, |
389 "OnUnregistered"); | 392 "OnUnregistered"); |
390 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 393 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
391 "ServiceWorkerDispatcher::UnregisterServiceWorker", | 394 "ServiceWorkerDispatcher::UnregisterServiceWorker", |
392 request_id); | 395 request_id); |
393 WebServiceWorkerUnregistrationCallbacks* callbacks = | 396 WebServiceWorkerUnregistrationCallbacks* callbacks = |
394 pending_unregistration_callbacks_.Lookup(request_id); | 397 pending_unregistration_callbacks_.Lookup(request_id); |
395 DCHECK(callbacks); | 398 DCHECK(callbacks); |
396 if (!callbacks) | 399 if (!callbacks) |
397 return; | 400 return; |
398 callbacks->onSuccess(&is_success); | 401 callbacks->onSuccess(&is_success); |
399 pending_unregistration_callbacks_.Remove(request_id); | 402 pending_unregistration_callbacks_.Remove(request_id); |
400 } | 403 } |
401 | 404 |
402 void ServiceWorkerDispatcher::OnDidGetRegistration( | 405 void ServiceWorkerDispatcher::OnDidGetRegistration( |
403 int thread_id, | 406 int thread_id, |
404 int request_id, | 407 int request_id, |
| 408 int provider_id, |
405 const ServiceWorkerRegistrationObjectInfo& info, | 409 const ServiceWorkerRegistrationObjectInfo& info, |
406 const ServiceWorkerVersionAttributes& attrs) { | 410 const ServiceWorkerVersionAttributes& attrs) { |
407 TRACE_EVENT_ASYNC_STEP_INTO0( | 411 TRACE_EVENT_ASYNC_STEP_INTO0( |
408 "ServiceWorker", | 412 "ServiceWorker", |
409 "ServiceWorkerDispatcher::GetRegistration", | 413 "ServiceWorkerDispatcher::GetRegistration", |
410 request_id, | 414 request_id, |
411 "OnDidGetRegistration"); | 415 "OnDidGetRegistration"); |
412 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 416 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
413 "ServiceWorkerDispatcher::GetRegistration", | 417 "ServiceWorkerDispatcher::GetRegistration", |
414 request_id); | 418 request_id); |
415 WebServiceWorkerRegistrationCallbacks* callbacks = | 419 WebServiceWorkerRegistrationCallbacks* callbacks = |
416 pending_get_registration_callbacks_.Lookup(request_id); | 420 pending_get_registration_callbacks_.Lookup(request_id); |
417 DCHECK(callbacks); | 421 DCHECK(callbacks); |
418 if (!callbacks) | 422 if (!callbacks) |
419 return; | 423 return; |
420 | 424 |
421 WebServiceWorkerRegistrationImpl* registration = NULL; | 425 WebServiceWorkerRegistrationImpl* registration = NULL; |
422 if (info.handle_id != kInvalidServiceWorkerHandleId) | 426 if (info.handle_id != kInvalidServiceWorkerHandleId) |
423 registration = FindOrCreateRegistration(info, attrs); | 427 registration = FindOrCreateRegistration(provider_id, info, attrs); |
424 | 428 |
425 callbacks->onSuccess(registration); | 429 callbacks->onSuccess(registration); |
426 pending_get_registration_callbacks_.Remove(request_id); | 430 pending_get_registration_callbacks_.Remove(request_id); |
427 } | 431 } |
428 | 432 |
429 void ServiceWorkerDispatcher::OnDidGetRegistrations( | 433 void ServiceWorkerDispatcher::OnDidGetRegistrations( |
430 int thread_id, | 434 int thread_id, |
431 int request_id, | 435 int request_id, |
| 436 int provider_id, |
432 const std::vector<ServiceWorkerRegistrationObjectInfo>& infos, | 437 const std::vector<ServiceWorkerRegistrationObjectInfo>& infos, |
433 const std::vector<ServiceWorkerVersionAttributes>& attrs) { | 438 const std::vector<ServiceWorkerVersionAttributes>& attrs) { |
434 TRACE_EVENT_ASYNC_STEP_INTO0( | 439 TRACE_EVENT_ASYNC_STEP_INTO0( |
435 "ServiceWorker", | 440 "ServiceWorker", |
436 "ServiceWorkerDispatcher::GetRegistrations", | 441 "ServiceWorkerDispatcher::GetRegistrations", |
437 request_id, | 442 request_id, |
438 "OnDidGetRegistrations"); | 443 "OnDidGetRegistrations"); |
439 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 444 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
440 "ServiceWorkerDispatcher::GetRegistrations", | 445 "ServiceWorkerDispatcher::GetRegistrations", |
441 request_id); | 446 request_id); |
442 | 447 |
443 WebServiceWorkerGetRegistrationsCallbacks* callbacks = | 448 WebServiceWorkerGetRegistrationsCallbacks* callbacks = |
444 pending_get_registrations_callbacks_.Lookup(request_id); | 449 pending_get_registrations_callbacks_.Lookup(request_id); |
445 DCHECK(callbacks); | 450 DCHECK(callbacks); |
446 if (!callbacks) | 451 if (!callbacks) |
447 return; | 452 return; |
448 | 453 |
449 typedef blink::WebVector<blink::WebServiceWorkerRegistration*> | 454 typedef blink::WebVector<blink::WebServiceWorkerRegistration*> |
450 WebServiceWorkerRegistrationArray; | 455 WebServiceWorkerRegistrationArray; |
451 scoped_ptr<WebServiceWorkerRegistrationArray> | 456 scoped_ptr<WebServiceWorkerRegistrationArray> |
452 registrations(new WebServiceWorkerRegistrationArray(infos.size())); | 457 registrations(new WebServiceWorkerRegistrationArray(infos.size())); |
453 for (size_t i = 0; i < infos.size(); ++i) { | 458 for (size_t i = 0; i < infos.size(); ++i) { |
454 if (infos[i].handle_id != kInvalidServiceWorkerHandleId) { | 459 if (infos[i].handle_id != kInvalidServiceWorkerHandleId) { |
455 ServiceWorkerRegistrationObjectInfo info(infos[i]); | 460 ServiceWorkerRegistrationObjectInfo info(infos[i]); |
456 ServiceWorkerVersionAttributes attr(attrs[i]); | 461 ServiceWorkerVersionAttributes attr(attrs[i]); |
457 (*registrations)[i] = FindOrCreateRegistration(info, attr); | 462 (*registrations)[i] = FindOrCreateRegistration(provider_id, info, attr); |
458 } | 463 } |
459 } | 464 } |
460 | 465 |
461 callbacks->onSuccess(registrations.release()); | 466 callbacks->onSuccess(registrations.release()); |
462 pending_get_registrations_callbacks_.Remove(request_id); | 467 pending_get_registrations_callbacks_.Remove(request_id); |
463 } | 468 } |
464 | 469 |
465 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( | 470 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( |
466 int thread_id, | 471 int thread_id, |
467 int request_id, | 472 int request_id, |
| 473 int provider_id, |
468 const ServiceWorkerRegistrationObjectInfo& info, | 474 const ServiceWorkerRegistrationObjectInfo& info, |
469 const ServiceWorkerVersionAttributes& attrs) { | 475 const ServiceWorkerVersionAttributes& attrs) { |
470 TRACE_EVENT_ASYNC_STEP_INTO0( | 476 TRACE_EVENT_ASYNC_STEP_INTO0( |
471 "ServiceWorker", | 477 "ServiceWorker", |
472 "ServiceWorkerDispatcher::GetRegistrationForReady", | 478 "ServiceWorkerDispatcher::GetRegistrationForReady", |
473 request_id, | 479 request_id, |
474 "OnDidGetRegistrationForReady"); | 480 "OnDidGetRegistrationForReady"); |
475 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 481 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
476 "ServiceWorkerDispatcher::GetRegistrationForReady", | 482 "ServiceWorkerDispatcher::GetRegistrationForReady", |
477 request_id); | 483 request_id); |
478 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks = | 484 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks = |
479 get_for_ready_callbacks_.Lookup(request_id); | 485 get_for_ready_callbacks_.Lookup(request_id); |
480 DCHECK(callbacks); | 486 DCHECK(callbacks); |
481 if (!callbacks) | 487 if (!callbacks) |
482 return; | 488 return; |
483 | 489 |
484 WebServiceWorkerRegistrationImpl* registration = NULL; | 490 WebServiceWorkerRegistrationImpl* registration = NULL; |
485 DCHECK(info.handle_id != kInvalidServiceWorkerHandleId); | 491 DCHECK(info.handle_id != kInvalidServiceWorkerHandleId); |
486 registration = FindOrCreateRegistration(info, attrs); | 492 registration = FindOrCreateRegistration(provider_id, info, attrs); |
487 callbacks->onSuccess(registration); | 493 callbacks->onSuccess(registration); |
488 get_for_ready_callbacks_.Remove(request_id); | 494 get_for_ready_callbacks_.Remove(request_id); |
489 } | 495 } |
490 | 496 |
491 void ServiceWorkerDispatcher::OnRegistrationError( | 497 void ServiceWorkerDispatcher::OnRegistrationError( |
492 int thread_id, | 498 int thread_id, |
493 int request_id, | 499 int request_id, |
494 WebServiceWorkerError::ErrorType error_type, | 500 WebServiceWorkerError::ErrorType error_type, |
495 const base::string16& message) { | 501 const base::string16& message) { |
496 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", | 502 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 worker_to_provider_[attrs.active.handle_id] = provider->second; | 640 worker_to_provider_[attrs.active.handle_id] = provider->second; |
635 } | 641 } |
636 provider->second->SetVersionAttributes(mask, attrs); | 642 provider->second->SetVersionAttributes(mask, attrs); |
637 } | 643 } |
638 | 644 |
639 RegistrationObjectMap::iterator found = | 645 RegistrationObjectMap::iterator found = |
640 registrations_.find(registration_handle_id); | 646 registrations_.find(registration_handle_id); |
641 if (found != registrations_.end()) { | 647 if (found != registrations_.end()) { |
642 // Populate the version fields (eg. .installing) with new worker objects. | 648 // Populate the version fields (eg. .installing) with new worker objects. |
643 if (mask.installing_changed()) | 649 if (mask.installing_changed()) |
644 found->second->SetInstalling(GetServiceWorker(attrs.installing, false)); | 650 found->second->SetInstalling( |
| 651 GetServiceWorker(attrs.installing, provider_id, false)); |
645 if (mask.waiting_changed()) | 652 if (mask.waiting_changed()) |
646 found->second->SetWaiting(GetServiceWorker(attrs.waiting, false)); | 653 found->second->SetWaiting( |
| 654 GetServiceWorker(attrs.waiting, provider_id, false)); |
647 if (mask.active_changed()) | 655 if (mask.active_changed()) |
648 found->second->SetActive(GetServiceWorker(attrs.active, false)); | 656 found->second->SetActive( |
| 657 GetServiceWorker(attrs.active, provider_id, false)); |
649 } | 658 } |
650 } | 659 } |
651 | 660 |
652 void ServiceWorkerDispatcher::OnUpdateFound( | 661 void ServiceWorkerDispatcher::OnUpdateFound( |
653 int thread_id, | 662 int thread_id, |
654 int registration_handle_id) { | 663 int registration_handle_id) { |
655 TRACE_EVENT0("ServiceWorker", | 664 TRACE_EVENT0("ServiceWorker", |
656 "ServiceWorkerDispatcher::OnUpdateFound"); | 665 "ServiceWorkerDispatcher::OnUpdateFound"); |
657 RegistrationObjectMap::iterator found = | 666 RegistrationObjectMap::iterator found = |
658 registrations_.find(registration_handle_id); | 667 registrations_.find(registration_handle_id); |
(...skipping 15 matching lines...) Expand all Loading... |
674 if (provider != provider_contexts_.end()) { | 683 if (provider != provider_contexts_.end()) { |
675 worker_to_provider_.erase(provider->second->controller_handle_id()); | 684 worker_to_provider_.erase(provider->second->controller_handle_id()); |
676 if (info.handle_id != kInvalidServiceWorkerHandleId) | 685 if (info.handle_id != kInvalidServiceWorkerHandleId) |
677 worker_to_provider_[info.handle_id] = provider->second; | 686 worker_to_provider_[info.handle_id] = provider->second; |
678 provider->second->OnSetControllerServiceWorker(info); | 687 provider->second->OnSetControllerServiceWorker(info); |
679 } | 688 } |
680 | 689 |
681 ProviderClientMap::iterator found = provider_clients_.find(provider_id); | 690 ProviderClientMap::iterator found = provider_clients_.find(provider_id); |
682 if (found != provider_clients_.end()) { | 691 if (found != provider_clients_.end()) { |
683 // Populate the .controller field with the new worker object. | 692 // Populate the .controller field with the new worker object. |
684 found->second->setController(GetServiceWorker(info, false), | 693 found->second->setController(GetServiceWorker(info, provider_id, false), |
685 should_notify_controllerchange); | 694 should_notify_controllerchange); |
686 } | 695 } |
687 } | 696 } |
688 | 697 |
689 void ServiceWorkerDispatcher::OnPostMessage( | 698 void ServiceWorkerDispatcher::OnPostMessage( |
690 const ServiceWorkerMsg_MessageToDocument_Params& params) { | 699 const ServiceWorkerMsg_MessageToDocument_Params& params) { |
691 // Make sure we're on the main document thread. (That must be the only | 700 // Make sure we're on the main document thread. (That must be the only |
692 // thread we get this message) | 701 // thread we get this message) |
693 DCHECK(ChildThreadImpl::current()); | 702 DCHECK(ChildThreadImpl::current()); |
694 TRACE_EVENT1("ServiceWorker", "ServiceWorkerDispatcher::OnPostMessage", | 703 TRACE_EVENT1("ServiceWorker", "ServiceWorkerDispatcher::OnPostMessage", |
695 "Thread ID", params.thread_id); | 704 "Thread ID", params.thread_id); |
696 | 705 |
697 ProviderClientMap::iterator found = | 706 ProviderClientMap::iterator found = |
698 provider_clients_.find(params.provider_id); | 707 provider_clients_.find(params.provider_id); |
699 if (found == provider_clients_.end()) { | 708 if (found == provider_clients_.end()) { |
700 // For now we do no queueing for messages sent to nonexistent / unattached | 709 // For now we do no queueing for messages sent to nonexistent / unattached |
701 // client. | 710 // client. |
702 return; | 711 return; |
703 } | 712 } |
704 | 713 |
705 blink::WebMessagePortChannelArray ports = | 714 blink::WebMessagePortChannelArray ports = |
706 WebMessagePortChannelImpl::CreatePorts( | 715 WebMessagePortChannelImpl::CreatePorts( |
707 params.message_ports, params.new_routing_ids, | 716 params.message_ports, params.new_routing_ids, |
708 base::ThreadTaskRunnerHandle::Get()); | 717 base::ThreadTaskRunnerHandle::Get()); |
709 | 718 |
710 found->second->dispatchMessageEvent( | 719 found->second->dispatchMessageEvent( |
711 GetServiceWorker(params.service_worker_info, false /* adopt_handle */), | 720 GetServiceWorker(params.service_worker_info, params.provider_id, |
| 721 false /* adopt_handle */), |
712 params.message, ports); | 722 params.message, ports); |
713 } | 723 } |
714 | 724 |
715 void ServiceWorkerDispatcher::AddServiceWorker( | 725 void ServiceWorkerDispatcher::AddServiceWorker( |
716 int handle_id, WebServiceWorkerImpl* worker) { | 726 int handle_id, WebServiceWorkerImpl* worker) { |
717 DCHECK(!ContainsKey(service_workers_, handle_id)); | 727 DCHECK(!ContainsKey(service_workers_, handle_id)); |
718 service_workers_[handle_id] = worker; | 728 service_workers_[handle_id] = worker; |
719 } | 729 } |
720 | 730 |
721 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { | 731 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { |
722 DCHECK(ContainsKey(service_workers_, handle_id)); | 732 DCHECK(ContainsKey(service_workers_, handle_id)); |
723 service_workers_.erase(handle_id); | 733 service_workers_.erase(handle_id); |
724 } | 734 } |
725 | 735 |
726 void ServiceWorkerDispatcher::AddServiceWorkerRegistration( | 736 void ServiceWorkerDispatcher::AddServiceWorkerRegistration( |
727 int registration_handle_id, | 737 int registration_handle_id, |
728 WebServiceWorkerRegistrationImpl* registration) { | 738 WebServiceWorkerRegistrationImpl* registration) { |
729 DCHECK(!ContainsKey(registrations_, registration_handle_id)); | 739 DCHECK(!ContainsKey(registrations_, registration_handle_id)); |
730 registrations_[registration_handle_id] = registration; | 740 registrations_[registration_handle_id] = registration; |
731 } | 741 } |
732 | 742 |
733 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( | 743 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( |
734 int registration_handle_id) { | 744 int registration_handle_id) { |
735 DCHECK(ContainsKey(registrations_, registration_handle_id)); | 745 DCHECK(ContainsKey(registrations_, registration_handle_id)); |
736 registrations_.erase(registration_handle_id); | 746 registrations_.erase(registration_handle_id); |
737 } | 747 } |
738 | 748 |
739 WebServiceWorkerRegistrationImpl* | 749 WebServiceWorkerRegistrationImpl* |
740 ServiceWorkerDispatcher::FindOrCreateRegistration( | 750 ServiceWorkerDispatcher::FindOrCreateRegistration( |
| 751 int provider_id, |
741 const ServiceWorkerRegistrationObjectInfo& info, | 752 const ServiceWorkerRegistrationObjectInfo& info, |
742 const ServiceWorkerVersionAttributes& attrs) { | 753 const ServiceWorkerVersionAttributes& attrs) { |
743 RegistrationObjectMap::iterator found = registrations_.find(info.handle_id); | 754 RegistrationObjectMap::iterator found = registrations_.find(info.handle_id); |
744 if (found != registrations_.end()) { | 755 if (found != registrations_.end()) { |
745 ServiceWorkerRegistrationHandleReference::Adopt(info, | 756 ServiceWorkerRegistrationHandleReference::Adopt(info, |
746 thread_safe_sender_.get()); | 757 thread_safe_sender_.get()); |
747 ServiceWorkerHandleReference::Adopt(attrs.installing, | 758 ServiceWorkerHandleReference::Adopt(attrs.installing, |
748 thread_safe_sender_.get()); | 759 thread_safe_sender_.get()); |
749 ServiceWorkerHandleReference::Adopt(attrs.waiting, | 760 ServiceWorkerHandleReference::Adopt(attrs.waiting, |
750 thread_safe_sender_.get()); | 761 thread_safe_sender_.get()); |
751 ServiceWorkerHandleReference::Adopt(attrs.active, | 762 ServiceWorkerHandleReference::Adopt(attrs.active, |
752 thread_safe_sender_.get()); | 763 thread_safe_sender_.get()); |
753 return found->second; | 764 return found->second; |
754 } | 765 } |
755 | 766 |
756 bool adopt_handle = true; | 767 bool adopt_handle = true; |
757 WebServiceWorkerRegistrationImpl* registration = | 768 WebServiceWorkerRegistrationImpl* registration = |
758 CreateServiceWorkerRegistration(info, adopt_handle); | 769 CreateServiceWorkerRegistration(info, adopt_handle); |
759 registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); | 770 registration->SetInstalling( |
760 registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); | 771 GetServiceWorker(attrs.installing, provider_id, adopt_handle)); |
761 registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); | 772 registration->SetWaiting( |
| 773 GetServiceWorker(attrs.waiting, provider_id, adopt_handle)); |
| 774 registration->SetActive( |
| 775 GetServiceWorker(attrs.active, provider_id, adopt_handle)); |
762 return registration; | 776 return registration; |
763 } | 777 } |
764 | 778 |
765 } // namespace content | 779 } // namespace content |
OLD | NEW |