| 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 "content/child/child_thread.h" | 10 #include "content/child/child_thread.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 g_dispatcher_tls.Pointer()->Set(this); | 46 g_dispatcher_tls.Pointer()->Set(this); |
| 47 } | 47 } |
| 48 | 48 |
| 49 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() { | 49 ServiceWorkerDispatcher::~ServiceWorkerDispatcher() { |
| 50 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); | 50 g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted); |
| 51 } | 51 } |
| 52 | 52 |
| 53 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) { | 53 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) { |
| 54 bool handled = true; | 54 bool handled = true; |
| 55 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) | 55 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) |
| 56 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_AssociateRegistration, |
| 57 OnAssociateRegistration) |
| 58 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UnassociateRegistration, |
| 59 OnUnassociateRegistration) |
| 56 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) | 60 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) |
| 57 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, | 61 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, |
| 58 OnUnregistered) | 62 OnUnregistered) |
| 59 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, | 63 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, |
| 60 OnRegistrationError) | 64 OnRegistrationError) |
| 61 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 65 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, |
| 62 OnServiceWorkerStateChanged) | 66 OnServiceWorkerStateChanged) |
| 63 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 67 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, |
| 64 OnSetVersionAttributes) | 68 OnSetVersionAttributes) |
| 65 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 69 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 adopt_handle ? ServiceWorkerRegistrationHandleReference::Adopt( | 234 adopt_handle ? ServiceWorkerRegistrationHandleReference::Adopt( |
| 231 info, thread_safe_sender_.get()) | 235 info, thread_safe_sender_.get()) |
| 232 : ServiceWorkerRegistrationHandleReference::Create( | 236 : ServiceWorkerRegistrationHandleReference::Create( |
| 233 info, thread_safe_sender_.get()); | 237 info, thread_safe_sender_.get()); |
| 234 | 238 |
| 235 // WebServiceWorkerRegistrationImpl constructor calls | 239 // WebServiceWorkerRegistrationImpl constructor calls |
| 236 // AddServiceWorkerRegistration. | 240 // AddServiceWorkerRegistration. |
| 237 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); | 241 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); |
| 238 } | 242 } |
| 239 | 243 |
| 244 void ServiceWorkerDispatcher::OnAssociateRegistration( |
| 245 int thread_id, |
| 246 int provider_id, |
| 247 const ServiceWorkerRegistrationObjectInfo& info) { |
| 248 ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); |
| 249 if (provider != provider_contexts_.end()) |
| 250 provider->second->AssociateRegistration(info); |
| 251 } |
| 252 |
| 253 void ServiceWorkerDispatcher::OnUnassociateRegistration( |
| 254 int thread_id, |
| 255 int provider_id) { |
| 256 ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); |
| 257 if (provider != provider_contexts_.end()) |
| 258 provider->second->UnassociateRegistration(); |
| 259 } |
| 260 |
| 240 void ServiceWorkerDispatcher::OnRegistered( | 261 void ServiceWorkerDispatcher::OnRegistered( |
| 241 int thread_id, | 262 int thread_id, |
| 242 int request_id, | 263 int request_id, |
| 243 const ServiceWorkerRegistrationObjectInfo& info, | 264 const ServiceWorkerRegistrationObjectInfo& info, |
| 244 const ServiceWorkerVersionAttributes& attrs) { | 265 const ServiceWorkerVersionAttributes& attrs) { |
| 245 WebServiceWorkerRegistrationCallbacks* callbacks = | 266 WebServiceWorkerRegistrationCallbacks* callbacks = |
| 246 pending_callbacks_.Lookup(request_id); | 267 pending_callbacks_.Lookup(request_id); |
| 247 DCHECK(callbacks); | 268 DCHECK(callbacks); |
| 248 if (!callbacks) | 269 if (!callbacks) |
| 249 return; | 270 return; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 existing_active_id != kInvalidServiceWorkerHandleId) { | 421 existing_active_id != kInvalidServiceWorkerHandleId) { |
| 401 WorkerToProviderMap::iterator associated_provider = | 422 WorkerToProviderMap::iterator associated_provider = |
| 402 worker_to_provider_.find(existing_active_id); | 423 worker_to_provider_.find(existing_active_id); |
| 403 DCHECK(associated_provider != worker_to_provider_.end()); | 424 DCHECK(associated_provider != worker_to_provider_.end()); |
| 404 DCHECK(associated_provider->second->provider_id() == provider_id); | 425 DCHECK(associated_provider->second->provider_id() == provider_id); |
| 405 worker_to_provider_.erase(associated_provider); | 426 worker_to_provider_.erase(associated_provider); |
| 406 } | 427 } |
| 407 provider->second->OnSetActiveServiceWorker(provider_id, info); | 428 provider->second->OnSetActiveServiceWorker(provider_id, info); |
| 408 if (info.handle_id != kInvalidServiceWorkerHandleId) | 429 if (info.handle_id != kInvalidServiceWorkerHandleId) |
| 409 worker_to_provider_[info.handle_id] = provider->second; | 430 worker_to_provider_[info.handle_id] = provider->second; |
| 431 |
| 432 if (provider->second->registration_handle_id() == registration_handle_id) { |
| 433 ScriptClientMap::iterator client = script_clients_.find(provider_id); |
| 434 if (client != script_clients_.end()) { |
| 435 // Resolve the .ready promise with the new registration object. |
| 436 ServiceWorkerRegistrationObjectInfo info = |
| 437 provider->second->registration()->info(); |
| 438 client->second->setReady(GetServiceWorkerRegistration(info, false)); |
| 439 } |
| 440 } |
| 410 } | 441 } |
| 411 | 442 |
| 412 RegistrationObjectMap::iterator found = | 443 RegistrationObjectMap::iterator found = |
| 413 registrations_.find(registration_handle_id); | 444 registrations_.find(registration_handle_id); |
| 414 if (found != registrations_.end()) { | 445 if (found != registrations_.end()) { |
| 415 // Populate the .active field with the new worker object. | 446 // Populate the .active field with the new worker object. |
| 416 found->second->SetActive(GetServiceWorker(info, false)); | 447 found->second->SetActive(GetServiceWorker(info, false)); |
| 417 } | 448 } |
| 418 } | 449 } |
| 419 | 450 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 registrations_[registration_handle_id] = registration; | 513 registrations_[registration_handle_id] = registration; |
| 483 } | 514 } |
| 484 | 515 |
| 485 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( | 516 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( |
| 486 int registration_handle_id) { | 517 int registration_handle_id) { |
| 487 DCHECK(ContainsKey(registrations_, registration_handle_id)); | 518 DCHECK(ContainsKey(registrations_, registration_handle_id)); |
| 488 registrations_.erase(registration_handle_id); | 519 registrations_.erase(registration_handle_id); |
| 489 } | 520 } |
| 490 | 521 |
| 491 } // namespace content | 522 } // namespace content |
| OLD | NEW |