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

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

Issue 440403002: Don't share ServiceWorkerHandle between provider hosts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 return; 201 return;
202 } 202 }
203 GetContext()->RegisterServiceWorker( 203 GetContext()->RegisterServiceWorker(
204 pattern, 204 pattern,
205 script_url, 205 script_url,
206 render_process_id_, 206 render_process_id_,
207 provider_host, 207 provider_host,
208 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete, 208 base::Bind(&ServiceWorkerDispatcherHost::RegistrationComplete,
209 this, 209 this,
210 thread_id, 210 thread_id,
211 provider_id,
211 request_id)); 212 request_id));
212 } 213 }
213 214
214 void ServiceWorkerDispatcherHost::OnUnregisterServiceWorker( 215 void ServiceWorkerDispatcherHost::OnUnregisterServiceWorker(
215 int thread_id, 216 int thread_id,
216 int request_id, 217 int request_id,
217 int provider_id, 218 int provider_id,
218 const GURL& pattern) { 219 const GURL& pattern) {
219 if (!GetContext()) { 220 if (!GetContext()) {
220 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 221 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 if (!provider_host) { 309 if (!provider_host) {
309 BadMessageReceived(); 310 BadMessageReceived();
310 return; 311 return;
311 } 312 }
312 if (!provider_host->IsContextAlive()) 313 if (!provider_host->IsContextAlive())
313 return; 314 return;
314 if (!provider_host->SetHostedVersionId(version_id)) 315 if (!provider_host->SetHostedVersionId(version_id))
315 BadMessageReceived(); 316 BadMessageReceived();
316 } 317 }
317 318
318 ServiceWorkerHandle* ServiceWorkerDispatcherHost::FindHandle(int thread_id, 319 ServiceWorkerHandle* ServiceWorkerDispatcherHost::FindHandle(int provider_id,
319 int64 version_id) { 320 int64 version_id) {
320 for (IDMap<ServiceWorkerHandle, IDMapOwnPointer>::iterator iter(&handles_); 321 for (IDMap<ServiceWorkerHandle, IDMapOwnPointer>::iterator iter(&handles_);
321 !iter.IsAtEnd(); 322 !iter.IsAtEnd();
322 iter.Advance()) { 323 iter.Advance()) {
323 ServiceWorkerHandle* handle = iter.GetCurrentValue(); 324 ServiceWorkerHandle* handle = iter.GetCurrentValue();
324 DCHECK(handle); 325 DCHECK(handle);
325 if (handle->thread_id() == thread_id && handle->version() && 326 if (handle->provider_id() == provider_id && handle->version() &&
326 handle->version()->version_id() == version_id) 327 handle->version()->version_id() == version_id) {
327 return handle; 328 return handle;
329 }
328 } 330 }
329 return NULL; 331 return NULL;
330 } 332 }
331 333
332 void ServiceWorkerDispatcherHost::RegistrationComplete( 334 void ServiceWorkerDispatcherHost::RegistrationComplete(
333 int thread_id, 335 int thread_id,
336 int provider_id,
334 int request_id, 337 int request_id,
335 ServiceWorkerStatusCode status, 338 ServiceWorkerStatusCode status,
336 int64 registration_id, 339 int64 registration_id,
337 int64 version_id) { 340 int64 version_id) {
338 if (!GetContext()) 341 if (!GetContext())
339 return; 342 return;
340 343
341 if (status != SERVICE_WORKER_OK) { 344 if (status != SERVICE_WORKER_OK) {
342 SendRegistrationError(thread_id, request_id, status); 345 SendRegistrationError(thread_id, request_id, status);
343 return; 346 return;
344 } 347 }
345 348
346 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id); 349 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id);
347 DCHECK(version); 350 DCHECK(version);
348 DCHECK_EQ(registration_id, version->registration_id()); 351 DCHECK_EQ(registration_id, version->registration_id());
349 ServiceWorkerObjectInfo info; 352 ServiceWorkerObjectInfo info;
350 ServiceWorkerHandle* handle = FindHandle(thread_id, version_id); 353 ServiceWorkerHandle* handle = FindHandle(provider_id, version_id);
351 if (handle) { 354 if (handle) {
355 DCHECK_EQ(thread_id, handle->thread_id());
352 info = handle->GetObjectInfo(); 356 info = handle->GetObjectInfo();
353 handle->IncrementRefCount(); 357 handle->IncrementRefCount();
354 } else { 358 } else {
355 scoped_ptr<ServiceWorkerHandle> new_handle = ServiceWorkerHandle::Create( 359 scoped_ptr<ServiceWorkerHandle> new_handle = ServiceWorkerHandle::Create(
356 GetContext()->AsWeakPtr(), this, thread_id, version); 360 GetContext()->AsWeakPtr(), this, thread_id, provider_id, version);
357 info = new_handle->GetObjectInfo(); 361 info = new_handle->GetObjectInfo();
358 RegisterServiceWorkerHandle(new_handle.Pass()); 362 RegisterServiceWorkerHandle(new_handle.Pass());
359 } 363 }
360 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( 364 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
361 thread_id, request_id, info)); 365 thread_id, request_id, info));
362 } 366 }
363 367
364 void ServiceWorkerDispatcherHost::OnWorkerScriptLoaded(int embedded_worker_id) { 368 void ServiceWorkerDispatcherHost::OnWorkerScriptLoaded(int embedded_worker_id) {
365 if (!GetContext()) 369 if (!GetContext())
366 return; 370 return;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 status, &error_type, &error_message); 489 status, &error_type, &error_message);
486 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 490 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
487 thread_id, request_id, error_type, error_message)); 491 thread_id, request_id, error_type, error_message));
488 } 492 }
489 493
490 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 494 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
491 return context_wrapper_->context(); 495 return context_wrapper_->context();
492 } 496 }
493 497
494 } // namespace content 498 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698