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

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 412833002: Ensure JavaScript equality when serviceWorker.register resolves to an existing worker [2/3] (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/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 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 if (!provider_host) { 308 if (!provider_host) {
309 BadMessageReceived(); 309 BadMessageReceived();
310 return; 310 return;
311 } 311 }
312 if (!provider_host->IsContextAlive()) 312 if (!provider_host->IsContextAlive())
313 return; 313 return;
314 if (!provider_host->SetHostedVersionId(version_id)) 314 if (!provider_host->SetHostedVersionId(version_id))
315 BadMessageReceived(); 315 BadMessageReceived();
316 } 316 }
317 317
318 ServiceWorkerHandle* ServiceWorkerDispatcherHost::FindHandle(int thread_id,
319 int64 version_id) {
320 for (IDMap<ServiceWorkerHandle, IDMapOwnPointer>::iterator iter(&handles_);
321 !iter.IsAtEnd();
322 iter.Advance()) {
323 ServiceWorkerHandle* handle = iter.GetCurrentValue();
324 DCHECK(handle);
325 if (handle->thread_id() == thread_id && handle->version() &&
326 handle->version()->version_id() == version_id)
327 return handle;
328 }
329 return NULL;
330 }
331
318 void ServiceWorkerDispatcherHost::RegistrationComplete( 332 void ServiceWorkerDispatcherHost::RegistrationComplete(
319 int thread_id, 333 int thread_id,
320 int request_id, 334 int request_id,
321 ServiceWorkerStatusCode status, 335 ServiceWorkerStatusCode status,
322 int64 registration_id, 336 int64 registration_id,
323 int64 version_id) { 337 int64 version_id) {
324 if (!GetContext()) 338 if (!GetContext())
325 return; 339 return;
326 340
327 if (status != SERVICE_WORKER_OK) { 341 if (status != SERVICE_WORKER_OK) {
328 SendRegistrationError(thread_id, request_id, status); 342 SendRegistrationError(thread_id, request_id, status);
329 return; 343 return;
330 } 344 }
331 345
332 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id); 346 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id);
333 DCHECK(version); 347 DCHECK(version);
334 DCHECK_EQ(registration_id, version->registration_id()); 348 DCHECK_EQ(registration_id, version->registration_id());
335 scoped_ptr<ServiceWorkerHandle> handle = 349 ServiceWorkerObjectInfo info;
336 ServiceWorkerHandle::Create(GetContext()->AsWeakPtr(), 350 ServiceWorkerHandle* handle = FindHandle(thread_id, version_id);
337 this, thread_id, version); 351 if (handle) {
352 info = handle->GetObjectInfo();
353 handle->IncrementRefCount();
354 } else {
355 scoped_ptr<ServiceWorkerHandle> new_handle = ServiceWorkerHandle::Create(
356 GetContext()->AsWeakPtr(), this, thread_id, version);
357 info = new_handle->GetObjectInfo();
358 RegisterServiceWorkerHandle(new_handle.Pass());
359 }
338 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( 360 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
339 thread_id, request_id, handle->GetObjectInfo())); 361 thread_id, request_id, info));
340 RegisterServiceWorkerHandle(handle.Pass());
341 } 362 }
342 363
343 void ServiceWorkerDispatcherHost::OnWorkerScriptLoaded(int embedded_worker_id) { 364 void ServiceWorkerDispatcherHost::OnWorkerScriptLoaded(int embedded_worker_id) {
344 if (!GetContext()) 365 if (!GetContext())
345 return; 366 return;
346 EmbeddedWorkerRegistry* registry = GetContext()->embedded_worker_registry(); 367 EmbeddedWorkerRegistry* registry = GetContext()->embedded_worker_registry();
347 if (!registry->CanHandle(embedded_worker_id)) 368 if (!registry->CanHandle(embedded_worker_id))
348 return; 369 return;
349 registry->OnWorkerScriptLoaded(render_process_id_, embedded_worker_id); 370 registry->OnWorkerScriptLoaded(render_process_id_, embedded_worker_id);
350 } 371 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 status, &error_type, &error_message); 485 status, &error_type, &error_message);
465 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 486 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
466 thread_id, request_id, error_type, error_message)); 487 thread_id, request_id, error_type, error_message));
467 } 488 }
468 489
469 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 490 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
470 return context_wrapper_->context(); 491 return context_wrapper_->context();
471 } 492 }
472 493
473 } // namespace content 494 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698