| 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 55   IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) | 55   IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) | 
| 56     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) | 56     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) | 
| 57     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, | 57     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, | 
| 58                         OnUnregistered) | 58                         OnUnregistered) | 
| 59     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, | 59     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, | 
| 60                         OnRegistrationError) | 60                         OnRegistrationError) | 
| 61     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 61     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, | 
| 62                         OnServiceWorkerStateChanged) | 62                         OnServiceWorkerStateChanged) | 
| 63     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 63     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetVersionAttributes, | 
| 64                         OnSetVersionAttributes) | 64                         OnSetVersionAttributes) | 
|  | 65     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_UpdateFound, | 
|  | 66                         OnUpdateFound) | 
| 65     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 67     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, | 
| 66                         OnSetControllerServiceWorker) | 68                         OnSetControllerServiceWorker) | 
| 67     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 69     IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, | 
| 68                         OnPostMessage) | 70                         OnPostMessage) | 
| 69     IPC_MESSAGE_UNHANDLED(handled = false) | 71     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 70   IPC_END_MESSAGE_MAP() | 72   IPC_END_MESSAGE_MAP() | 
| 71   DCHECK(handled) << "Unhandled message:" << msg.type(); | 73   DCHECK(handled) << "Unhandled message:" << msg.type(); | 
| 72 } | 74 } | 
| 73 | 75 | 
| 74 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { | 76 bool ServiceWorkerDispatcher::Send(IPC::Message* msg) { | 
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 231                          info, thread_safe_sender_.get()); | 233                          info, thread_safe_sender_.get()); | 
| 232 | 234 | 
| 233   // WebServiceWorkerRegistrationImpl constructor calls | 235   // WebServiceWorkerRegistrationImpl constructor calls | 
| 234   // AddServiceWorkerRegistration. | 236   // AddServiceWorkerRegistration. | 
| 235   return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); | 237   return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); | 
| 236 } | 238 } | 
| 237 | 239 | 
| 238 void ServiceWorkerDispatcher::OnRegistered( | 240 void ServiceWorkerDispatcher::OnRegistered( | 
| 239     int thread_id, | 241     int thread_id, | 
| 240     int request_id, | 242     int request_id, | 
| 241     const ServiceWorkerRegistrationObjectInfo& info) { | 243     const ServiceWorkerRegistrationObjectInfo& info, | 
|  | 244     const ServiceWorkerVersionAttributes& attrs) { | 
| 242   WebServiceWorkerRegistrationCallbacks* callbacks = | 245   WebServiceWorkerRegistrationCallbacks* callbacks = | 
| 243       pending_callbacks_.Lookup(request_id); | 246       pending_callbacks_.Lookup(request_id); | 
| 244   DCHECK(callbacks); | 247   DCHECK(callbacks); | 
| 245   if (!callbacks) | 248   if (!callbacks) | 
| 246     return; | 249     return; | 
| 247 | 250 | 
| 248   callbacks->onSuccess(GetServiceWorkerRegistration(info, true)); | 251   WebServiceWorkerRegistrationImpl* registration = | 
|  | 252       GetServiceWorkerRegistration(info, true); | 
|  | 253   registration->SetInstalling(GetServiceWorker(attrs.installing, true)); | 
|  | 254   registration->SetWaiting(GetServiceWorker(attrs.waiting, true)); | 
|  | 255   registration->SetActive(GetServiceWorker(attrs.active, true)); | 
|  | 256 | 
|  | 257   callbacks->onSuccess(registration); | 
| 249   pending_callbacks_.Remove(request_id); | 258   pending_callbacks_.Remove(request_id); | 
| 250 } | 259 } | 
| 251 | 260 | 
| 252 void ServiceWorkerDispatcher::OnUnregistered( | 261 void ServiceWorkerDispatcher::OnUnregistered( | 
| 253     int thread_id, | 262     int thread_id, | 
| 254     int request_id) { | 263     int request_id) { | 
| 255   WebServiceWorkerRegistrationCallbacks* callbacks = | 264   WebServiceWorkerRegistrationCallbacks* callbacks = | 
| 256       pending_callbacks_.Lookup(request_id); | 265       pending_callbacks_.Lookup(request_id); | 
| 257   DCHECK(callbacks); | 266   DCHECK(callbacks); | 
| 258   if (!callbacks) | 267   if (!callbacks) | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 309                             registration_handle_id, | 318                             registration_handle_id, | 
| 310                             attributes.waiting); | 319                             attributes.waiting); | 
| 311   } | 320   } | 
| 312   if (mask.active_changed()) { | 321   if (mask.active_changed()) { | 
| 313     SetActiveServiceWorker(provider_id, | 322     SetActiveServiceWorker(provider_id, | 
| 314                            registration_handle_id, | 323                            registration_handle_id, | 
| 315                            attributes.active); | 324                            attributes.active); | 
| 316   } | 325   } | 
| 317 } | 326 } | 
| 318 | 327 | 
|  | 328 void ServiceWorkerDispatcher::OnUpdateFound( | 
|  | 329     int thread_id, | 
|  | 330     const ServiceWorkerRegistrationObjectInfo& info) { | 
|  | 331   RegistrationObjectMap::iterator found = registrations_.find(info.handle_id); | 
|  | 332   if (found != registrations_.end()) | 
|  | 333     found->second->OnUpdateFound(); | 
|  | 334 } | 
|  | 335 | 
| 319 void ServiceWorkerDispatcher::SetInstallingServiceWorker( | 336 void ServiceWorkerDispatcher::SetInstallingServiceWorker( | 
| 320     int provider_id, | 337     int provider_id, | 
| 321     int registration_handle_id, | 338     int registration_handle_id, | 
| 322     const ServiceWorkerObjectInfo& info) { | 339     const ServiceWorkerObjectInfo& info) { | 
| 323   ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); | 340   ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); | 
| 324   if (provider != provider_contexts_.end()) { | 341   if (provider != provider_contexts_.end()) { | 
| 325     int existing_installing_id = provider->second->installing_handle_id(); | 342     int existing_installing_id = provider->second->installing_handle_id(); | 
| 326     if (existing_installing_id != info.handle_id && | 343     if (existing_installing_id != info.handle_id && | 
| 327         existing_installing_id != kInvalidServiceWorkerHandleId) { | 344         existing_installing_id != kInvalidServiceWorkerHandleId) { | 
| 328       WorkerToProviderMap::iterator associated_provider = | 345       WorkerToProviderMap::iterator associated_provider = | 
| 329           worker_to_provider_.find(existing_installing_id); | 346           worker_to_provider_.find(existing_installing_id); | 
| 330       DCHECK(associated_provider != worker_to_provider_.end()); | 347       DCHECK(associated_provider != worker_to_provider_.end()); | 
| 331       DCHECK(associated_provider->second->provider_id() == provider_id); | 348       DCHECK(associated_provider->second->provider_id() == provider_id); | 
| 332       worker_to_provider_.erase(associated_provider); | 349       worker_to_provider_.erase(associated_provider); | 
| 333     } | 350     } | 
| 334     provider->second->OnSetInstallingServiceWorker(provider_id, info); | 351     provider->second->OnSetInstallingServiceWorker(provider_id, info); | 
| 335     if (info.handle_id != kInvalidServiceWorkerHandleId) | 352     if (info.handle_id != kInvalidServiceWorkerHandleId) | 
| 336       worker_to_provider_[info.handle_id] = provider->second; | 353       worker_to_provider_[info.handle_id] = provider->second; | 
| 337   } | 354   } | 
| 338 | 355 | 
| 339   RegistrationObjectMap::iterator found = | 356   RegistrationObjectMap::iterator found = | 
| 340       registrations_.find(registration_handle_id); | 357       registrations_.find(registration_handle_id); | 
| 341   if (found != registrations_.end()) { | 358   if (found != registrations_.end()) { | 
| 342     // Populate the .installing field with the new worker object. | 359     // Populate the .installing field with the new worker object. | 
| 343     found->second->SetInstalling(GetServiceWorker(info, false)); | 360     found->second->SetInstalling(GetServiceWorker(info, false)); | 
| 344     if (info.handle_id != kInvalidServiceWorkerHandleId) |  | 
| 345       found->second->OnUpdateFound(); |  | 
| 346   } | 361   } | 
| 347 } | 362 } | 
| 348 | 363 | 
| 349 void ServiceWorkerDispatcher::SetWaitingServiceWorker( | 364 void ServiceWorkerDispatcher::SetWaitingServiceWorker( | 
| 350     int provider_id, | 365     int provider_id, | 
| 351     int registration_handle_id, | 366     int registration_handle_id, | 
| 352     const ServiceWorkerObjectInfo& info) { | 367     const ServiceWorkerObjectInfo& info) { | 
| 353   ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); | 368   ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); | 
| 354   if (provider != provider_contexts_.end()) { | 369   if (provider != provider_contexts_.end()) { | 
| 355     int existing_waiting_id = provider->second->waiting_handle_id(); | 370     int existing_waiting_id = provider->second->waiting_handle_id(); | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 467   registrations_[registration_handle_id] = registration; | 482   registrations_[registration_handle_id] = registration; | 
| 468 } | 483 } | 
| 469 | 484 | 
| 470 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( | 485 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( | 
| 471     int registration_handle_id) { | 486     int registration_handle_id) { | 
| 472   DCHECK(ContainsKey(registrations_, registration_handle_id)); | 487   DCHECK(ContainsKey(registrations_, registration_handle_id)); | 
| 473   registrations_.erase(registration_handle_id); | 488   registrations_.erase(registration_handle_id); | 
| 474 } | 489 } | 
| 475 | 490 | 
| 476 }  // namespace content | 491 }  // namespace content | 
| OLD | NEW | 
|---|