Chromium Code Reviews| 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/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/browser/message_port_message_filter.h" | 9 #include "content/browser/message_port_message_filter.h" |
| 10 #include "content/browser/message_port_service.h" | 10 #include "content/browser/message_port_service.h" |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 322 if (!provider_host) { | 322 if (!provider_host) { |
| 323 BadMessageReceived(); | 323 BadMessageReceived(); |
| 324 return; | 324 return; |
| 325 } | 325 } |
| 326 if (!provider_host->IsContextAlive()) | 326 if (!provider_host->IsContextAlive()) |
| 327 return; | 327 return; |
| 328 if (!provider_host->SetHostedVersionId(version_id)) | 328 if (!provider_host->SetHostedVersionId(version_id)) |
| 329 BadMessageReceived(); | 329 BadMessageReceived(); |
| 330 } | 330 } |
| 331 | 331 |
| 332 ServiceWorkerRegistrationObjectInfo | |
| 333 ServiceWorkerDispatcherHost::GetOrCreateRegistrationHandle( | |
| 334 int provider_id, | |
| 335 ServiceWorkerRegistration* registration) { | |
| 336 ServiceWorkerRegistrationHandle* handle = | |
| 337 FindRegistrationHandle(provider_id, registration->id()); | |
| 338 if (handle) { | |
| 339 handle->IncrementRefCount(); | |
| 340 return handle->GetObjectInfo(); | |
| 341 } | |
| 342 | |
| 343 scoped_ptr<ServiceWorkerRegistrationHandle> new_handle( | |
| 344 new ServiceWorkerRegistrationHandle( | |
| 345 GetContext()->AsWeakPtr(), this, provider_id, registration)); | |
| 346 ServiceWorkerRegistrationObjectInfo info = new_handle->GetObjectInfo(); | |
| 347 RegisterServiceWorkerRegistrationHandle(new_handle.Pass()); | |
| 348 return info; | |
| 349 } | |
| 350 | |
| 332 ServiceWorkerRegistrationHandle* | 351 ServiceWorkerRegistrationHandle* |
| 333 ServiceWorkerDispatcherHost::FindRegistrationHandle(int provider_id, | 352 ServiceWorkerDispatcherHost::FindRegistrationHandle(int provider_id, |
| 334 int64 registration_id) { | 353 int64 registration_id) { |
| 335 for (IDMap<ServiceWorkerRegistrationHandle, IDMapOwnPointer>::iterator | 354 for (IDMap<ServiceWorkerRegistrationHandle, IDMapOwnPointer>::iterator |
| 336 iter(®istration_handles_); | 355 iter(®istration_handles_); |
| 337 !iter.IsAtEnd(); | 356 !iter.IsAtEnd(); |
| 338 iter.Advance()) { | 357 iter.Advance()) { |
| 339 ServiceWorkerRegistrationHandle* handle = iter.GetCurrentValue(); | 358 ServiceWorkerRegistrationHandle* handle = iter.GetCurrentValue(); |
| 340 DCHECK(handle); | 359 DCHECK(handle); |
| 341 if (handle->provider_id() == provider_id && handle->registration() && | 360 if (handle->provider_id() == provider_id && handle->registration() && |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 358 | 377 |
| 359 if (status != SERVICE_WORKER_OK) { | 378 if (status != SERVICE_WORKER_OK) { |
| 360 SendRegistrationError(thread_id, request_id, status); | 379 SendRegistrationError(thread_id, request_id, status); |
| 361 return; | 380 return; |
| 362 } | 381 } |
| 363 | 382 |
| 364 ServiceWorkerRegistration* registration = | 383 ServiceWorkerRegistration* registration = |
| 365 GetContext()->GetLiveRegistration(registration_id); | 384 GetContext()->GetLiveRegistration(registration_id); |
| 366 DCHECK(registration); | 385 DCHECK(registration); |
| 367 | 386 |
| 387 ServiceWorkerRegistrationObjectInfo info = | |
| 388 GetOrCreateRegistrationHandle(provider_id, registration); | |
|
michaeln
2014/09/04 00:27:23
seems like GetOrCreateRegistrationHandle() should
nhiroki
2014/09/08 15:55:51
Done in the separate CL (https://codereview.chromi
| |
| 389 | |
| 368 ServiceWorkerRegistrationHandle* handle = | 390 ServiceWorkerRegistrationHandle* handle = |
| 369 FindRegistrationHandle(provider_id, registration_id); | 391 FindRegistrationHandle(provider_id, registration_id); |
| 370 ServiceWorkerRegistrationObjectInfo info; | 392 DCHECK(handle); |
| 371 if (handle) { | |
| 372 handle->IncrementRefCount(); | |
| 373 info = handle->GetObjectInfo(); | |
| 374 } else { | |
| 375 scoped_ptr<ServiceWorkerRegistrationHandle> new_handle( | |
| 376 new ServiceWorkerRegistrationHandle( | |
| 377 GetContext()->AsWeakPtr(), this, provider_id, registration)); | |
| 378 info = new_handle->GetObjectInfo(); | |
| 379 handle = new_handle.get(); | |
| 380 RegisterServiceWorkerRegistrationHandle(new_handle.Pass()); | |
| 381 } | |
| 382 | 393 |
| 383 ServiceWorkerVersionAttributes attrs; | 394 ServiceWorkerVersionAttributes attrs; |
| 384 attrs.installing = handle->CreateServiceWorkerHandleAndPass( | 395 attrs.installing = handle->CreateServiceWorkerHandleAndPass( |
| 385 registration->installing_version()); | 396 registration->installing_version()); |
| 386 attrs.waiting = handle->CreateServiceWorkerHandleAndPass( | 397 attrs.waiting = handle->CreateServiceWorkerHandleAndPass( |
| 387 registration->waiting_version()); | 398 registration->waiting_version()); |
| 388 attrs.active = handle->CreateServiceWorkerHandleAndPass( | 399 attrs.active = handle->CreateServiceWorkerHandleAndPass( |
| 389 registration->active_version()); | 400 registration->active_version()); |
| 390 | 401 |
| 391 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( | 402 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 552 status, &error_type, &error_message); | 563 status, &error_type, &error_message); |
| 553 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( | 564 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( |
| 554 thread_id, request_id, error_type, error_message)); | 565 thread_id, request_id, error_type, error_message)); |
| 555 } | 566 } |
| 556 | 567 |
| 557 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { | 568 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { |
| 558 return context_wrapper_->context(); | 569 return context_wrapper_->context(); |
| 559 } | 570 } |
| 560 | 571 |
| 561 } // namespace content | 572 } // namespace content |
| OLD | NEW |