| 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/browser/service_worker/service_worker_dispatcher_host.h" | 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/profiler/scoped_tracker.h" | 8 #include "base/profiler/scoped_tracker.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 DCHECK(handle->version()); | 252 DCHECK(handle->version()); |
| 253 if (handle->provider_id() == provider_id && | 253 if (handle->provider_id() == provider_id && |
| 254 handle->version()->version_id() == version_id) { | 254 handle->version()->version_id() == version_id) { |
| 255 return handle; | 255 return handle; |
| 256 } | 256 } |
| 257 } | 257 } |
| 258 return NULL; | 258 return NULL; |
| 259 } | 259 } |
| 260 | 260 |
| 261 ServiceWorkerRegistrationHandle* | 261 ServiceWorkerRegistrationHandle* |
| 262 ServiceWorkerDispatcherHost::GetOrCreateRegistrationHandle( | 262 ServiceWorkerDispatcherHost::CreateRegistrationHandle( |
| 263 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 263 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
| 264 ServiceWorkerRegistration* registration) { | 264 ServiceWorkerRegistration* registration) { |
| 265 DCHECK(provider_host); | 265 DCHECK(provider_host); |
| 266 ServiceWorkerRegistrationHandle* handle = | 266 scoped_ptr<ServiceWorkerRegistrationHandle> handle( |
| 267 FindRegistrationHandle(provider_host->provider_id(), registration->id()); | 267 new ServiceWorkerRegistrationHandle(GetContext()->AsWeakPtr(), |
| 268 if (handle) { | 268 provider_host, registration)); |
| 269 handle->IncrementRefCount(); | 269 ServiceWorkerRegistrationHandle* handle_ptr = handle.get(); |
| 270 return handle; | 270 RegisterServiceWorkerRegistrationHandle(handle.Pass()); |
| 271 } | 271 return handle_ptr; |
| 272 | |
| 273 scoped_ptr<ServiceWorkerRegistrationHandle> new_handle( | |
| 274 new ServiceWorkerRegistrationHandle( | |
| 275 GetContext()->AsWeakPtr(), provider_host, registration)); | |
| 276 handle = new_handle.get(); | |
| 277 RegisterServiceWorkerRegistrationHandle(new_handle.Pass()); | |
| 278 return handle; | |
| 279 } | 272 } |
| 280 | 273 |
| 281 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( | 274 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( |
| 282 int thread_id, | 275 int thread_id, |
| 283 int request_id, | 276 int request_id, |
| 284 int provider_id, | 277 int provider_id, |
| 285 const GURL& pattern, | 278 const GURL& pattern, |
| 286 const GURL& script_url) { | 279 const GURL& script_url) { |
| 287 TRACE_EVENT0("ServiceWorker", | 280 TRACE_EVENT0("ServiceWorker", |
| 288 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); | 281 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 789 | 782 |
| 790 ServiceWorkerRegistrationObjectInfo info; | 783 ServiceWorkerRegistrationObjectInfo info; |
| 791 ServiceWorkerVersionAttributes attrs; | 784 ServiceWorkerVersionAttributes attrs; |
| 792 GetRegistrationObjectInfoAndVersionAttributes( | 785 GetRegistrationObjectInfoAndVersionAttributes( |
| 793 provider_host->AsWeakPtr(), registration, &info, &attrs); | 786 provider_host->AsWeakPtr(), registration, &info, &attrs); |
| 794 | 787 |
| 795 Send(new ServiceWorkerMsg_AssociateRegistrationWithServiceWorker( | 788 Send(new ServiceWorkerMsg_AssociateRegistrationWithServiceWorker( |
| 796 kDocumentMainThreadId, provider_id, info, attrs)); | 789 kDocumentMainThreadId, provider_id, info, attrs)); |
| 797 } | 790 } |
| 798 | 791 |
| 799 ServiceWorkerRegistrationHandle* | |
| 800 ServiceWorkerDispatcherHost::FindRegistrationHandle(int provider_id, | |
| 801 int64 registration_id) { | |
| 802 for (IDMap<ServiceWorkerRegistrationHandle, IDMapOwnPointer>::iterator | |
| 803 iter(®istration_handles_); | |
| 804 !iter.IsAtEnd(); | |
| 805 iter.Advance()) { | |
| 806 ServiceWorkerRegistrationHandle* handle = iter.GetCurrentValue(); | |
| 807 DCHECK(handle); | |
| 808 DCHECK(handle->registration()); | |
| 809 if (handle->provider_id() == provider_id && | |
| 810 handle->registration()->id() == registration_id) { | |
| 811 return handle; | |
| 812 } | |
| 813 } | |
| 814 return NULL; | |
| 815 } | |
| 816 | |
| 817 void ServiceWorkerDispatcherHost::GetRegistrationObjectInfoAndVersionAttributes( | 792 void ServiceWorkerDispatcherHost::GetRegistrationObjectInfoAndVersionAttributes( |
| 818 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 793 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
| 819 ServiceWorkerRegistration* registration, | 794 ServiceWorkerRegistration* registration, |
| 820 ServiceWorkerRegistrationObjectInfo* info, | 795 ServiceWorkerRegistrationObjectInfo* info, |
| 821 ServiceWorkerVersionAttributes* attrs) { | 796 ServiceWorkerVersionAttributes* attrs) { |
| 822 ServiceWorkerRegistrationHandle* handle = | 797 ServiceWorkerRegistrationHandle* handle = |
| 823 GetOrCreateRegistrationHandle(provider_host, registration); | 798 CreateRegistrationHandle(provider_host, registration); |
| 824 *info = handle->GetObjectInfo(); | 799 *info = handle->GetObjectInfo(); |
| 825 | 800 |
| 826 attrs->installing = provider_host->GetOrCreateServiceWorkerHandle( | 801 attrs->installing = provider_host->GetOrCreateServiceWorkerHandle( |
| 827 registration->installing_version()); | 802 registration->installing_version()); |
| 828 attrs->waiting = provider_host->GetOrCreateServiceWorkerHandle( | 803 attrs->waiting = provider_host->GetOrCreateServiceWorkerHandle( |
| 829 registration->waiting_version()); | 804 registration->waiting_version()); |
| 830 attrs->active = provider_host->GetOrCreateServiceWorkerHandle( | 805 attrs->active = provider_host->GetOrCreateServiceWorkerHandle( |
| 831 registration->active_version()); | 806 registration->active_version()); |
| 832 } | 807 } |
| 833 | 808 |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1286 if (!handle) { | 1261 if (!handle) { |
| 1287 bad_message::ReceivedBadMessage(this, | 1262 bad_message::ReceivedBadMessage(this, |
| 1288 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1263 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
| 1289 return; | 1264 return; |
| 1290 } | 1265 } |
| 1291 handle->version()->StopWorker( | 1266 handle->version()->StopWorker( |
| 1292 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1267 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 1293 } | 1268 } |
| 1294 | 1269 |
| 1295 } // namespace content | 1270 } // namespace content |
| OLD | NEW |