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

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

Issue 369013002: ServiceWorker: Support navigator.serviceWorker.installing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) { 51 void ServiceWorkerDispatcher::OnMessageReceived(const IPC::Message& msg) {
52 bool handled = true; 52 bool handled = true;
53 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg) 53 IPC_BEGIN_MESSAGE_MAP(ServiceWorkerDispatcher, msg)
54 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered) 54 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistered, OnRegistered)
55 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered, 55 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerUnregistered,
56 OnUnregistered) 56 OnUnregistered)
57 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError, 57 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerRegistrationError,
58 OnRegistrationError) 58 OnRegistrationError)
59 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged, 59 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ServiceWorkerStateChanged,
60 OnServiceWorkerStateChanged) 60 OnServiceWorkerStateChanged)
61 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetInstallingServiceWorker,
62 OnSetInstallingServiceWorker)
61 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetWaitingServiceWorker, 63 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetWaitingServiceWorker,
62 OnSetWaitingServiceWorker) 64 OnSetWaitingServiceWorker)
63 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker, 65 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SetControllerServiceWorker,
64 OnSetControllerServiceWorker) 66 OnSetControllerServiceWorker)
65 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument, 67 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToDocument,
66 OnPostMessage) 68 OnPostMessage)
67 IPC_MESSAGE_UNHANDLED(handled = false) 69 IPC_MESSAGE_UNHANDLED(handled = false)
68 IPC_END_MESSAGE_MAP() 70 IPC_END_MESSAGE_MAP()
69 DCHECK(handled) << "Unhandled message:" << msg.type(); 71 DCHECK(handled) << "Unhandled message:" << msg.type();
70 } 72 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 int provider_id = provider_context->provider_id(); 123 int provider_id = provider_context->provider_id();
122 DCHECK(!ContainsKey(provider_contexts_, provider_id)); 124 DCHECK(!ContainsKey(provider_contexts_, provider_id));
123 provider_contexts_[provider_id] = provider_context; 125 provider_contexts_[provider_id] = provider_context;
124 } 126 }
125 127
126 void ServiceWorkerDispatcher::RemoveProviderContext( 128 void ServiceWorkerDispatcher::RemoveProviderContext(
127 ServiceWorkerProviderContext* provider_context) { 129 ServiceWorkerProviderContext* provider_context) {
128 DCHECK(provider_context); 130 DCHECK(provider_context);
129 DCHECK(ContainsKey(provider_contexts_, provider_context->provider_id())); 131 DCHECK(ContainsKey(provider_contexts_, provider_context->provider_id()));
130 provider_contexts_.erase(provider_context->provider_id()); 132 provider_contexts_.erase(provider_context->provider_id());
133 worker_to_provider_.erase(provider_context->installing_handle_id());
131 worker_to_provider_.erase(provider_context->waiting_handle_id()); 134 worker_to_provider_.erase(provider_context->waiting_handle_id());
132 worker_to_provider_.erase(provider_context->controller_handle_id()); 135 worker_to_provider_.erase(provider_context->controller_handle_id());
133 } 136 }
134 137
135 void ServiceWorkerDispatcher::AddScriptClient( 138 void ServiceWorkerDispatcher::AddScriptClient(
136 int provider_id, 139 int provider_id,
137 blink::WebServiceWorkerProviderClient* client) { 140 blink::WebServiceWorkerProviderClient* client) {
138 DCHECK(client); 141 DCHECK(client);
139 DCHECK(!ContainsKey(script_clients_, provider_id)); 142 DCHECK(!ContainsKey(script_clients_, provider_id));
140 script_clients_[provider_id] = client; 143 script_clients_[provider_id] = client;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 blink::WebServiceWorkerState state) { 252 blink::WebServiceWorkerState state) {
250 WorkerObjectMap::iterator worker = service_workers_.find(handle_id); 253 WorkerObjectMap::iterator worker = service_workers_.find(handle_id);
251 if (worker != service_workers_.end()) 254 if (worker != service_workers_.end())
252 worker->second->OnStateChanged(state); 255 worker->second->OnStateChanged(state);
253 256
254 WorkerToProviderMap::iterator provider = worker_to_provider_.find(handle_id); 257 WorkerToProviderMap::iterator provider = worker_to_provider_.find(handle_id);
255 if (provider != worker_to_provider_.end()) 258 if (provider != worker_to_provider_.end())
256 provider->second->OnServiceWorkerStateChanged(handle_id, state); 259 provider->second->OnServiceWorkerStateChanged(handle_id, state);
257 } 260 }
258 261
262 void ServiceWorkerDispatcher::OnSetInstallingServiceWorker(
263 int thread_id,
264 int provider_id,
265 const ServiceWorkerObjectInfo& info) {
266 ProviderContextMap::iterator provider = provider_contexts_.find(provider_id);
267 if (provider != provider_contexts_.end()) {
268 int existing_installing_id = provider->second->installing_handle_id();
269 if (existing_installing_id != info.handle_id &&
270 existing_installing_id != kInvalidServiceWorkerHandleId) {
271 WorkerToProviderMap::iterator associated_provider =
272 worker_to_provider_.find(existing_installing_id);
273 DCHECK(associated_provider != worker_to_provider_.end());
274 DCHECK(associated_provider->second->provider_id() == provider_id);
275 worker_to_provider_.erase(associated_provider);
276 }
277 provider->second->OnSetInstallingServiceWorker(provider_id, info);
278 if (info.handle_id != kInvalidServiceWorkerHandleId)
279 worker_to_provider_[info.handle_id] = provider->second;
280 }
281
282 ScriptClientMap::iterator found = script_clients_.find(provider_id);
283 if (found != script_clients_.end()) {
284 // Populate the .installing field with the new worker object.
285 found->second->setInstalling(GetServiceWorker(info, false));
286 }
287 }
288
259 void ServiceWorkerDispatcher::OnSetWaitingServiceWorker( 289 void ServiceWorkerDispatcher::OnSetWaitingServiceWorker(
260 int thread_id, 290 int thread_id,
261 int provider_id, 291 int provider_id,
262 const ServiceWorkerObjectInfo& info) { 292 const ServiceWorkerObjectInfo& info) {
263 ProviderContextMap::iterator provider = provider_contexts_.find(provider_id); 293 ProviderContextMap::iterator provider = provider_contexts_.find(provider_id);
264 if (provider != provider_contexts_.end()) { 294 if (provider != provider_contexts_.end()) {
265 int existing_waiting_id = provider->second->waiting_handle_id(); 295 int existing_waiting_id = provider->second->waiting_handle_id();
266 if (existing_waiting_id != info.handle_id && 296 if (existing_waiting_id != info.handle_id &&
267 existing_waiting_id != kInvalidServiceWorkerHandleId) { 297 existing_waiting_id != kInvalidServiceWorkerHandleId) {
268 WorkerToProviderMap::iterator associated_provider = 298 WorkerToProviderMap::iterator associated_provider =
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 DCHECK(!ContainsKey(service_workers_, handle_id)); 365 DCHECK(!ContainsKey(service_workers_, handle_id));
336 service_workers_[handle_id] = worker; 366 service_workers_[handle_id] = worker;
337 } 367 }
338 368
339 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) { 369 void ServiceWorkerDispatcher::RemoveServiceWorker(int handle_id) {
340 DCHECK(ContainsKey(service_workers_, handle_id)); 370 DCHECK(ContainsKey(service_workers_, handle_id));
341 service_workers_.erase(handle_id); 371 service_workers_.erase(handle_id);
342 } 372 }
343 373
344 } // namespace content 374 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698