Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 517493002: ServiceWorker: Update the install sequence as per the latest spec (Closed) Base URL: http://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment fix (+rebase) Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/child/service_worker/service_worker_dispatcher.h ('k') | content/child/service_worker/service_worker_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698