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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 scoped_ptr<ServiceWorkerHandleReference> handle_ref = | 198 scoped_ptr<ServiceWorkerHandleReference> handle_ref = |
199 adopt_handle | 199 adopt_handle |
200 ? ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_) | 200 ? ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_) |
201 : ServiceWorkerHandleReference::Create(info, thread_safe_sender_); | 201 : ServiceWorkerHandleReference::Create(info, thread_safe_sender_); |
202 // WebServiceWorkerImpl constructor calls AddServiceWorker. | 202 // WebServiceWorkerImpl constructor calls AddServiceWorker. |
203 return new WebServiceWorkerImpl(handle_ref.Pass(), thread_safe_sender_); | 203 return new WebServiceWorkerImpl(handle_ref.Pass(), thread_safe_sender_); |
204 } | 204 } |
205 | 205 |
206 WebServiceWorkerRegistrationImpl* | 206 WebServiceWorkerRegistrationImpl* |
207 ServiceWorkerDispatcher::GetServiceWorkerRegistration( | 207 ServiceWorkerDispatcher::GetServiceWorkerRegistration( |
208 int registration_handle_id, | 208 const ServiceWorkerRegistrationObjectInfo& info, |
209 const ServiceWorkerObjectInfo& info, | |
210 bool adopt_handle) { | 209 bool adopt_handle) { |
211 if (registration_handle_id == kInvalidServiceWorkerRegistrationHandleId) | 210 if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId) |
212 return NULL; | 211 return NULL; |
213 | 212 |
214 RegistrationObjectMap::iterator existing_registration = | 213 RegistrationObjectMap::iterator existing_registration = |
215 registrations_.find(registration_handle_id); | 214 registrations_.find(info.handle_id); |
216 | 215 |
217 if (existing_registration != registrations_.end()) { | 216 if (existing_registration != registrations_.end()) { |
218 if (adopt_handle) { | 217 if (adopt_handle) { |
219 // We are instructed to adopt a handle but we already have one, so | 218 // We are instructed to adopt a handle but we already have one, so |
220 // adopt and destroy a handle ref. | 219 // adopt and destroy a handle ref. |
221 ServiceWorkerRegistrationHandleReference::Adopt( | 220 ServiceWorkerRegistrationHandleReference::Adopt( |
222 registration_handle_id, info, thread_safe_sender_); | 221 info, thread_safe_sender_); |
223 } | 222 } |
224 return existing_registration->second; | 223 return existing_registration->second; |
225 } | 224 } |
226 | 225 |
227 scoped_ptr<ServiceWorkerRegistrationHandleReference> handle_ref = | 226 scoped_ptr<ServiceWorkerRegistrationHandleReference> handle_ref = |
228 adopt_handle | 227 adopt_handle |
229 ? ServiceWorkerRegistrationHandleReference::Adopt( | 228 ? ServiceWorkerRegistrationHandleReference::Adopt( |
230 registration_handle_id, info, thread_safe_sender_) | 229 info, thread_safe_sender_) |
231 : ServiceWorkerRegistrationHandleReference::Create( | 230 : ServiceWorkerRegistrationHandleReference::Create( |
232 registration_handle_id, info, thread_safe_sender_); | 231 info, thread_safe_sender_); |
233 | 232 |
234 // WebServiceWorkerRegistrationImpl constructor calls | 233 // WebServiceWorkerRegistrationImpl constructor calls |
235 // AddServiceWorkerRegistration. | 234 // AddServiceWorkerRegistration. |
236 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); | 235 return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); |
237 } | 236 } |
238 | 237 |
239 void ServiceWorkerDispatcher::OnRegistered( | 238 void ServiceWorkerDispatcher::OnRegistered( |
240 int thread_id, | 239 int thread_id, |
241 int request_id, | 240 int request_id, |
242 int registration_handle_id, | 241 const ServiceWorkerRegistrationObjectInfo& info) { |
243 const ServiceWorkerObjectInfo& info) { | |
244 WebServiceWorkerRegistrationCallbacks* callbacks = | 242 WebServiceWorkerRegistrationCallbacks* callbacks = |
245 pending_callbacks_.Lookup(request_id); | 243 pending_callbacks_.Lookup(request_id); |
246 DCHECK(callbacks); | 244 DCHECK(callbacks); |
247 if (!callbacks) | 245 if (!callbacks) |
248 return; | 246 return; |
249 | 247 |
250 callbacks->onSuccess(GetServiceWorkerRegistration( | 248 callbacks->onSuccess(GetServiceWorkerRegistration(info, true)); |
251 registration_handle_id, info, true)); | |
252 | |
253 // The handle ref is unused, so adopt and destroy it. | |
254 // TODO(nhiroki): ServiceWorkerDispatcherHost don't have to pass a handle ref. | |
255 ServiceWorkerHandleReference::Adopt(info, thread_safe_sender_); | |
256 | |
257 pending_callbacks_.Remove(request_id); | 249 pending_callbacks_.Remove(request_id); |
258 } | 250 } |
259 | 251 |
260 void ServiceWorkerDispatcher::OnUnregistered( | 252 void ServiceWorkerDispatcher::OnUnregistered( |
261 int thread_id, | 253 int thread_id, |
262 int request_id) { | 254 int request_id) { |
263 WebServiceWorkerRegistrationCallbacks* callbacks = | 255 WebServiceWorkerRegistrationCallbacks* callbacks = |
264 pending_callbacks_.Lookup(request_id); | 256 pending_callbacks_.Lookup(request_id); |
265 DCHECK(callbacks); | 257 DCHECK(callbacks); |
266 if (!callbacks) | 258 if (!callbacks) |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 registrations_[registration_handle_id] = registration; | 467 registrations_[registration_handle_id] = registration; |
476 } | 468 } |
477 | 469 |
478 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( | 470 void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( |
479 int registration_handle_id) { | 471 int registration_handle_id) { |
480 DCHECK(ContainsKey(registrations_, registration_handle_id)); | 472 DCHECK(ContainsKey(registrations_, registration_handle_id)); |
481 registrations_.erase(registration_handle_id); | 473 registrations_.erase(registration_handle_id); |
482 } | 474 } |
483 | 475 |
484 } // namespace content | 476 } // namespace content |
OLD | NEW |