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

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

Issue 1145013004: Introduce bad_message.h for chrome and NaCl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 6 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
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/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"
11 #include "content/browser/bad_message.h"
11 #include "content/browser/message_port_message_filter.h" 12 #include "content/browser/message_port_message_filter.h"
12 #include "content/browser/message_port_service.h" 13 #include "content/browser/message_port_service.h"
13 #include "content/browser/service_worker/embedded_worker_registry.h" 14 #include "content/browser/service_worker/embedded_worker_registry.h"
14 #include "content/browser/service_worker/service_worker_context_core.h" 15 #include "content/browser/service_worker/service_worker_context_core.h"
15 #include "content/browser/service_worker/service_worker_context_wrapper.h" 16 #include "content/browser/service_worker/service_worker_context_wrapper.h"
16 #include "content/browser/service_worker/service_worker_handle.h" 17 #include "content/browser/service_worker/service_worker_handle.h"
17 #include "content/browser/service_worker/service_worker_registration.h" 18 #include "content/browser/service_worker/service_worker_registration.h"
18 #include "content/browser/service_worker/service_worker_registration_handle.h" 19 #include "content/browser/service_worker/service_worker_registration_handle.h"
19 #include "content/browser/service_worker/service_worker_utils.h" 20 #include "content/browser/service_worker/service_worker_utils.h"
20 #include "content/common/service_worker/embedded_worker_messages.h" 21 #include "content/common/service_worker/embedded_worker_messages.h"
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount, 199 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount,
199 OnDecrementRegistrationRefCount) 200 OnDecrementRegistrationRefCount)
200 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker) 201 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker)
201 IPC_MESSAGE_UNHANDLED(handled = false) 202 IPC_MESSAGE_UNHANDLED(handled = false)
202 IPC_END_MESSAGE_MAP() 203 IPC_END_MESSAGE_MAP()
203 204
204 if (!handled && GetContext()) { 205 if (!handled && GetContext()) {
205 handled = GetContext()->embedded_worker_registry()->OnMessageReceived( 206 handled = GetContext()->embedded_worker_registry()->OnMessageReceived(
206 message, render_process_id_); 207 message, render_process_id_);
207 if (!handled) 208 if (!handled)
208 BadMessageReceived(); 209 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED);
209 } 210 }
210 211
211 return handled; 212 return handled;
212 } 213 }
213 214
214 bool ServiceWorkerDispatcherHost::Send(IPC::Message* message) { 215 bool ServiceWorkerDispatcherHost::Send(IPC::Message* message) {
215 if (channel_ready_) { 216 if (channel_ready_) {
216 BrowserMessageFilter::Send(message); 217 BrowserMessageFilter::Send(message);
217 // Don't bother passing through Send()'s result: it's not reliable. 218 // Don't bother passing through Send()'s result: it's not reliable.
218 return true; 219 return true;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 TRACE_EVENT0("ServiceWorker", 280 TRACE_EVENT0("ServiceWorker",
280 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); 281 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker");
281 if (!GetContext()) { 282 if (!GetContext()) {
282 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 283 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
283 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort, 284 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
284 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 285 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
285 base::ASCIIToUTF16(kShutdownErrorMessage))); 286 base::ASCIIToUTF16(kShutdownErrorMessage)));
286 return; 287 return;
287 } 288 }
288 if (!pattern.is_valid() || !script_url.is_valid()) { 289 if (!pattern.is_valid() || !script_url.is_valid()) {
289 BadMessageReceived(); 290 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_BAD_URL);
290 return; 291 return;
291 } 292 }
292 293
293 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost( 294 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost(
294 render_process_id_, provider_id); 295 render_process_id_, provider_id);
295 if (!provider_host) { 296 if (!provider_host) {
296 BadMessageReceived(); 297 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_NO_HOST);
297 return; 298 return;
298 } 299 }
299 if (!provider_host->IsContextAlive()) { 300 if (!provider_host->IsContextAlive()) {
300 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 301 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
301 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort, 302 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
302 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 303 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
303 base::ASCIIToUTF16(kShutdownErrorMessage))); 304 base::ASCIIToUTF16(kShutdownErrorMessage)));
304 return; 305 return;
305 } 306 }
306 307
307 // TODO(ksakamoto): Currently, document_url is empty if the document is in an 308 // TODO(ksakamoto): Currently, document_url is empty if the document is in an
308 // IFRAME using frame.contentDocument.write(...). We can remove this check 309 // IFRAME using frame.contentDocument.write(...). We can remove this check
309 // once crbug.com/439697 is fixed. 310 // once crbug.com/439697 is fixed.
310 if (provider_host->document_url().is_empty()) { 311 if (provider_host->document_url().is_empty()) {
311 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 312 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
312 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, 313 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
313 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 314 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
314 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); 315 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
315 return; 316 return;
316 } 317 }
317 318
318 if (!CanRegisterServiceWorker( 319 if (!CanRegisterServiceWorker(
319 provider_host->document_url(), pattern, script_url)) { 320 provider_host->document_url(), pattern, script_url)) {
320 BadMessageReceived(); 321 bad_message::ReceivedBadMessage(this, bad_message::SWDH_REGISTER_CANNOT);
321 return; 322 return;
322 } 323 }
323 324
324 std::string error_message; 325 std::string error_message;
325 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url, 326 if (ServiceWorkerUtils::ContainsDisallowedCharacter(pattern, script_url,
326 &error_message)) { 327 &error_message)) {
327 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 328 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
328 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, 329 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
329 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) + 330 base::ASCIIToUTF16(kServiceWorkerRegisterErrorPrefix) +
330 base::UTF8ToUTF16(error_message))); 331 base::UTF8ToUTF16(error_message)));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 "ServiceWorkerDispatcherHost::OnUnregisterServiceWorker"); 367 "ServiceWorkerDispatcherHost::OnUnregisterServiceWorker");
367 if (!GetContext()) { 368 if (!GetContext()) {
368 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( 369 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
369 thread_id, 370 thread_id,
370 request_id, 371 request_id,
371 blink::WebServiceWorkerError::ErrorTypeAbort, 372 blink::WebServiceWorkerError::ErrorTypeAbort,
372 base::ASCIIToUTF16(kShutdownErrorMessage))); 373 base::ASCIIToUTF16(kShutdownErrorMessage)));
373 return; 374 return;
374 } 375 }
375 if (!pattern.is_valid()) { 376 if (!pattern.is_valid()) {
376 BadMessageReceived(); 377 bad_message::ReceivedBadMessage(this, bad_message::SWDH_UNREGISTER_BAD_URL);
377 return; 378 return;
378 } 379 }
379 380
380 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost( 381 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost(
381 render_process_id_, provider_id); 382 render_process_id_, provider_id);
382 if (!provider_host) { 383 if (!provider_host) {
383 BadMessageReceived(); 384 bad_message::ReceivedBadMessage(this, bad_message::SWDH_UNREGISTER_NO_HOST);
384 return; 385 return;
385 } 386 }
386 if (!provider_host->IsContextAlive()) { 387 if (!provider_host->IsContextAlive()) {
387 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( 388 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
388 thread_id, 389 thread_id,
389 request_id, 390 request_id,
390 blink::WebServiceWorkerError::ErrorTypeAbort, 391 blink::WebServiceWorkerError::ErrorTypeAbort,
391 base::ASCIIToUTF16(kShutdownErrorMessage))); 392 base::ASCIIToUTF16(kShutdownErrorMessage)));
392 return; 393 return;
393 } 394 }
394 395
395 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed. 396 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed.
396 if (provider_host->document_url().is_empty()) { 397 if (provider_host->document_url().is_empty()) {
397 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( 398 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
398 thread_id, 399 thread_id,
399 request_id, 400 request_id,
400 WebServiceWorkerError::ErrorTypeSecurity, 401 WebServiceWorkerError::ErrorTypeSecurity,
401 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); 402 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
402 return; 403 return;
403 } 404 }
404 405
405 if (!CanUnregisterServiceWorker(provider_host->document_url(), pattern)) { 406 if (!CanUnregisterServiceWorker(provider_host->document_url(), pattern)) {
406 BadMessageReceived(); 407 bad_message::ReceivedBadMessage(this, bad_message::SWDH_UNREGISTER_CANNOT);
407 return; 408 return;
408 } 409 }
409 410
410 if (!GetContentClient()->browser()->AllowServiceWorker( 411 if (!GetContentClient()->browser()->AllowServiceWorker(
411 pattern, provider_host->topmost_frame_url(), resource_context_, 412 pattern, provider_host->topmost_frame_url(), resource_context_,
412 render_process_id_, provider_host->frame_id())) { 413 render_process_id_, provider_host->frame_id())) {
413 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError( 414 Send(new ServiceWorkerMsg_ServiceWorkerUnregistrationError(
414 thread_id, 415 thread_id,
415 request_id, 416 request_id,
416 WebServiceWorkerError::ErrorTypeUnknown, 417 WebServiceWorkerError::ErrorTypeUnknown,
(...skipping 22 matching lines...) Expand all
439 TRACE_EVENT0("ServiceWorker", 440 TRACE_EVENT0("ServiceWorker",
440 "ServiceWorkerDispatcherHost::OnGetRegistration"); 441 "ServiceWorkerDispatcherHost::OnGetRegistration");
441 if (!GetContext()) { 442 if (!GetContext()) {
442 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 443 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
443 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort, 444 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort,
444 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + 445 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
445 base::ASCIIToUTF16(kShutdownErrorMessage))); 446 base::ASCIIToUTF16(kShutdownErrorMessage)));
446 return; 447 return;
447 } 448 }
448 if (!document_url.is_valid()) { 449 if (!document_url.is_valid()) {
449 BadMessageReceived(); 450 bad_message::ReceivedBadMessage(this,
451 bad_message::SWDH_GET_REGISTRATION_BAD_URL);
450 return; 452 return;
451 } 453 }
452 454
453 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost( 455 ServiceWorkerProviderHost* provider_host = GetContext()->GetProviderHost(
454 render_process_id_, provider_id); 456 render_process_id_, provider_id);
455 if (!provider_host) { 457 if (!provider_host) {
456 BadMessageReceived(); 458 bad_message::ReceivedBadMessage(this,
459 bad_message::SWDH_GET_REGISTRATION_NO_HOST);
457 return; 460 return;
458 } 461 }
459 if (!provider_host->IsContextAlive()) { 462 if (!provider_host->IsContextAlive()) {
460 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 463 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
461 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort, 464 thread_id, request_id, blink::WebServiceWorkerError::ErrorTypeAbort,
462 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + 465 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
463 base::ASCIIToUTF16(kShutdownErrorMessage))); 466 base::ASCIIToUTF16(kShutdownErrorMessage)));
464 return; 467 return;
465 } 468 }
466 469
467 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed. 470 // TODO(ksakamoto): This check can be removed once crbug.com/439697 is fixed.
468 if (provider_host->document_url().is_empty()) { 471 if (provider_host->document_url().is_empty()) {
469 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 472 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
470 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity, 473 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
471 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + 474 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
472 base::ASCIIToUTF16(kNoDocumentURLErrorMessage))); 475 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
473 return; 476 return;
474 } 477 }
475 478
476 if (!CanGetRegistration(provider_host->document_url(), document_url)) { 479 if (!CanGetRegistration(provider_host->document_url(), document_url)) {
477 BadMessageReceived(); 480 bad_message::ReceivedBadMessage(this,
481 bad_message::SWDH_GET_REGISTRATION_CANNOT);
478 return; 482 return;
479 } 483 }
480 484
481 if (!GetContentClient()->browser()->AllowServiceWorker( 485 if (!GetContentClient()->browser()->AllowServiceWorker(
482 provider_host->document_url(), provider_host->topmost_frame_url(), 486 provider_host->document_url(), provider_host->topmost_frame_url(),
483 resource_context_, render_process_id_, provider_host->frame_id())) { 487 resource_context_, render_process_id_, provider_host->frame_id())) {
484 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( 488 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError(
485 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, 489 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown,
486 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + 490 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
487 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); 491 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
(...skipping 25 matching lines...) Expand all
513 int thread_id, 517 int thread_id,
514 int request_id, 518 int request_id,
515 int provider_id) { 519 int provider_id) {
516 TRACE_EVENT0("ServiceWorker", 520 TRACE_EVENT0("ServiceWorker",
517 "ServiceWorkerDispatcherHost::OnGetRegistrationForReady"); 521 "ServiceWorkerDispatcherHost::OnGetRegistrationForReady");
518 if (!GetContext()) 522 if (!GetContext())
519 return; 523 return;
520 ServiceWorkerProviderHost* provider_host = 524 ServiceWorkerProviderHost* provider_host =
521 GetContext()->GetProviderHost(render_process_id_, provider_id); 525 GetContext()->GetProviderHost(render_process_id_, provider_id);
522 if (!provider_host) { 526 if (!provider_host) {
523 BadMessageReceived(); 527 bad_message::ReceivedBadMessage(
528 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_NO_HOST);
524 return; 529 return;
525 } 530 }
526 if (!provider_host->IsContextAlive()) 531 if (!provider_host->IsContextAlive())
527 return; 532 return;
528 533
529 TRACE_EVENT_ASYNC_BEGIN0( 534 TRACE_EVENT_ASYNC_BEGIN0(
530 "ServiceWorker", 535 "ServiceWorker",
531 "ServiceWorkerDispatcherHost::GetRegistrationForReady", 536 "ServiceWorkerDispatcherHost::GetRegistrationForReady",
532 request_id); 537 request_id);
533 538
534 if (!provider_host->GetRegistrationForReady(base::Bind( 539 if (!provider_host->GetRegistrationForReady(base::Bind(
535 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete, 540 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete,
536 this, thread_id, request_id, provider_host->AsWeakPtr()))) { 541 this, thread_id, request_id, provider_host->AsWeakPtr()))) {
537 BadMessageReceived(); 542 bad_message::ReceivedBadMessage(
543 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS);
538 } 544 }
539 } 545 }
540 546
541 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( 547 void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
542 int handle_id, 548 int handle_id,
543 const base::string16& message, 549 const base::string16& message,
544 const std::vector<TransferredMessagePort>& sent_message_ports) { 550 const std::vector<TransferredMessagePort>& sent_message_ports) {
545 TRACE_EVENT0("ServiceWorker", 551 TRACE_EVENT0("ServiceWorker",
546 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); 552 "ServiceWorkerDispatcherHost::OnPostMessageToWorker");
547 if (!GetContext()) 553 if (!GetContext())
548 return; 554 return;
549 555
550 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 556 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
551 if (!handle) { 557 if (!handle) {
552 BadMessageReceived(); 558 bad_message::ReceivedBadMessage(this, bad_message::SWDH_POST_MESSAGE);
553 return; 559 return;
554 } 560 }
555 561
556 handle->version()->DispatchMessageEvent( 562 handle->version()->DispatchMessageEvent(
557 message, sent_message_ports, 563 message, sent_message_ports,
558 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 564 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
559 } 565 }
560 566
561 void ServiceWorkerDispatcherHost::OnProviderCreated( 567 void ServiceWorkerDispatcherHost::OnProviderCreated(
562 int provider_id, 568 int provider_id,
563 int render_frame_id, 569 int render_frame_id,
564 ServiceWorkerProviderType provider_type) { 570 ServiceWorkerProviderType provider_type) {
565 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. 571 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed.
566 tracked_objects::ScopedTracker tracking_profile( 572 tracked_objects::ScopedTracker tracking_profile(
567 FROM_HERE_WITH_EXPLICIT_FUNCTION( 573 FROM_HERE_WITH_EXPLICIT_FUNCTION(
568 "477117 ServiceWorkerDispatcherHost::OnProviderCreated")); 574 "477117 ServiceWorkerDispatcherHost::OnProviderCreated"));
569 TRACE_EVENT0("ServiceWorker", 575 TRACE_EVENT0("ServiceWorker",
570 "ServiceWorkerDispatcherHost::OnProviderCreated"); 576 "ServiceWorkerDispatcherHost::OnProviderCreated");
571 if (!GetContext()) 577 if (!GetContext())
572 return; 578 return;
573 if (GetContext()->GetProviderHost(render_process_id_, provider_id)) { 579 if (GetContext()->GetProviderHost(render_process_id_, provider_id)) {
574 BadMessageReceived(); 580 bad_message::ReceivedBadMessage(this,
581 bad_message::SWDH_PROVIDER_CREATED_NO_HOST);
575 return; 582 return;
576 } 583 }
577 scoped_ptr<ServiceWorkerProviderHost> provider_host( 584 scoped_ptr<ServiceWorkerProviderHost> provider_host(
578 new ServiceWorkerProviderHost(render_process_id_, 585 new ServiceWorkerProviderHost(render_process_id_,
579 render_frame_id, 586 render_frame_id,
580 provider_id, 587 provider_id,
581 provider_type, 588 provider_type,
582 GetContext()->AsWeakPtr(), 589 GetContext()->AsWeakPtr(),
583 this)); 590 this));
584 GetContext()->AddProviderHost(provider_host.Pass()); 591 GetContext()->AddProviderHost(provider_host.Pass());
585 } 592 }
586 593
587 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) { 594 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) {
588 TRACE_EVENT0("ServiceWorker", 595 TRACE_EVENT0("ServiceWorker",
589 "ServiceWorkerDispatcherHost::OnProviderDestroyed"); 596 "ServiceWorkerDispatcherHost::OnProviderDestroyed");
590 if (!GetContext()) 597 if (!GetContext())
591 return; 598 return;
592 if (!GetContext()->GetProviderHost(render_process_id_, provider_id)) { 599 if (!GetContext()->GetProviderHost(render_process_id_, provider_id)) {
593 BadMessageReceived(); 600 bad_message::ReceivedBadMessage(
601 this, bad_message::SWDH_PROVIDER_DESTROYED_NO_HOST);
594 return; 602 return;
595 } 603 }
596 GetContext()->RemoveProviderHost(render_process_id_, provider_id); 604 GetContext()->RemoveProviderHost(render_process_id_, provider_id);
597 } 605 }
598 606
599 void ServiceWorkerDispatcherHost::OnSetHostedVersionId( 607 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(
600 int provider_id, int64 version_id) { 608 int provider_id, int64 version_id) {
601 TRACE_EVENT0("ServiceWorker", 609 TRACE_EVENT0("ServiceWorker",
602 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); 610 "ServiceWorkerDispatcherHost::OnSetHostedVersionId");
603 if (!GetContext()) 611 if (!GetContext())
604 return; 612 return;
605 ServiceWorkerProviderHost* provider_host = 613 ServiceWorkerProviderHost* provider_host =
606 GetContext()->GetProviderHost(render_process_id_, provider_id); 614 GetContext()->GetProviderHost(render_process_id_, provider_id);
607 if (!provider_host) { 615 if (!provider_host) {
608 BadMessageReceived(); 616 bad_message::ReceivedBadMessage(
617 this, bad_message::SWDH_SET_HOSTED_VERSION_NO_HOST);
609 return; 618 return;
610 } 619 }
611 if (!provider_host->IsContextAlive()) 620 if (!provider_host->IsContextAlive())
612 return; 621 return;
613 if (!provider_host->SetHostedVersionId(version_id)) 622 if (!provider_host->SetHostedVersionId(version_id))
614 BadMessageReceived(); 623 bad_message::ReceivedBadMessage(this, bad_message::SWDH_SET_HOSTED_VERSION);
615 624
616 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id); 625 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id);
617 if (!version) 626 if (!version)
618 return; 627 return;
619 628
620 // Retrieve the registration associated with |version|. The registration 629 // Retrieve the registration associated with |version|. The registration
621 // must be alive because the version keeps it during starting worker. 630 // must be alive because the version keeps it during starting worker.
622 ServiceWorkerRegistration* registration = 631 ServiceWorkerRegistration* registration =
623 GetContext()->GetLiveRegistration(version->registration_id()); 632 GetContext()->GetLiveRegistration(version->registration_id());
624 DCHECK(registration); 633 DCHECK(registration);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
729 int thread_id, 738 int thread_id,
730 int provider_id) { 739 int provider_id) {
731 TRACE_EVENT0("ServiceWorker", 740 TRACE_EVENT0("ServiceWorker",
732 "ServiceWorkerDispatcherHost::OnWorkerScriptLoaded"); 741 "ServiceWorkerDispatcherHost::OnWorkerScriptLoaded");
733 if (!GetContext()) 742 if (!GetContext())
734 return; 743 return;
735 744
736 ServiceWorkerProviderHost* provider_host = 745 ServiceWorkerProviderHost* provider_host =
737 GetContext()->GetProviderHost(render_process_id_, provider_id); 746 GetContext()->GetProviderHost(render_process_id_, provider_id);
738 if (!provider_host) { 747 if (!provider_host) {
739 BadMessageReceived(); 748 bad_message::ReceivedBadMessage(
749 this, bad_message::SWDH_WORKER_SCRIPT_LOAD_NO_HOST);
740 return; 750 return;
741 } 751 }
742 752
743 provider_host->SetReadyToSendMessagesToWorker(thread_id); 753 provider_host->SetReadyToSendMessagesToWorker(thread_id);
744 754
745 EmbeddedWorkerRegistry* registry = GetContext()->embedded_worker_registry(); 755 EmbeddedWorkerRegistry* registry = GetContext()->embedded_worker_registry();
746 if (!registry->CanHandle(embedded_worker_id)) 756 if (!registry->CanHandle(embedded_worker_id))
747 return; 757 return;
748 registry->OnWorkerScriptLoaded( 758 registry->OnWorkerScriptLoaded(
749 render_process_id_, thread_id, embedded_worker_id); 759 render_process_id_, thread_id, embedded_worker_id);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 params.line_number, 854 params.line_number,
845 params.source_url); 855 params.source_url);
846 } 856 }
847 857
848 void ServiceWorkerDispatcherHost::OnIncrementServiceWorkerRefCount( 858 void ServiceWorkerDispatcherHost::OnIncrementServiceWorkerRefCount(
849 int handle_id) { 859 int handle_id) {
850 TRACE_EVENT0("ServiceWorker", 860 TRACE_EVENT0("ServiceWorker",
851 "ServiceWorkerDispatcherHost::OnIncrementServiceWorkerRefCount"); 861 "ServiceWorkerDispatcherHost::OnIncrementServiceWorkerRefCount");
852 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 862 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
853 if (!handle) { 863 if (!handle) {
854 BadMessageReceived(); 864 bad_message::ReceivedBadMessage(
865 this, bad_message::SWDH_INCREMENT_WORKER_BAD_HANDLE);
855 return; 866 return;
856 } 867 }
857 handle->IncrementRefCount(); 868 handle->IncrementRefCount();
858 } 869 }
859 870
860 void ServiceWorkerDispatcherHost::OnDecrementServiceWorkerRefCount( 871 void ServiceWorkerDispatcherHost::OnDecrementServiceWorkerRefCount(
861 int handle_id) { 872 int handle_id) {
862 TRACE_EVENT0("ServiceWorker", 873 TRACE_EVENT0("ServiceWorker",
863 "ServiceWorkerDispatcherHost::OnDecrementServiceWorkerRefCount"); 874 "ServiceWorkerDispatcherHost::OnDecrementServiceWorkerRefCount");
864 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 875 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
865 if (!handle) { 876 if (!handle) {
866 BadMessageReceived(); 877 bad_message::ReceivedBadMessage(
878 this, bad_message::SWDH_DECREMENT_WORKER_BAD_HANDLE);
867 return; 879 return;
868 } 880 }
869 handle->DecrementRefCount(); 881 handle->DecrementRefCount();
870 if (handle->HasNoRefCount()) 882 if (handle->HasNoRefCount())
871 handles_.Remove(handle_id); 883 handles_.Remove(handle_id);
872 } 884 }
873 885
874 void ServiceWorkerDispatcherHost::OnIncrementRegistrationRefCount( 886 void ServiceWorkerDispatcherHost::OnIncrementRegistrationRefCount(
875 int registration_handle_id) { 887 int registration_handle_id) {
876 TRACE_EVENT0("ServiceWorker", 888 TRACE_EVENT0("ServiceWorker",
877 "ServiceWorkerDispatcherHost::OnIncrementRegistrationRefCount"); 889 "ServiceWorkerDispatcherHost::OnIncrementRegistrationRefCount");
878 ServiceWorkerRegistrationHandle* handle = 890 ServiceWorkerRegistrationHandle* handle =
879 registration_handles_.Lookup(registration_handle_id); 891 registration_handles_.Lookup(registration_handle_id);
880 if (!handle) { 892 if (!handle) {
881 BadMessageReceived(); 893 bad_message::ReceivedBadMessage(
894 this, bad_message::SWDH_INCREMENT_REGISTRATION_BAD_HANDLE);
882 return; 895 return;
883 } 896 }
884 handle->IncrementRefCount(); 897 handle->IncrementRefCount();
885 } 898 }
886 899
887 void ServiceWorkerDispatcherHost::OnDecrementRegistrationRefCount( 900 void ServiceWorkerDispatcherHost::OnDecrementRegistrationRefCount(
888 int registration_handle_id) { 901 int registration_handle_id) {
889 TRACE_EVENT0("ServiceWorker", 902 TRACE_EVENT0("ServiceWorker",
890 "ServiceWorkerDispatcherHost::OnDecrementRegistrationRefCount"); 903 "ServiceWorkerDispatcherHost::OnDecrementRegistrationRefCount");
891 ServiceWorkerRegistrationHandle* handle = 904 ServiceWorkerRegistrationHandle* handle =
892 registration_handles_.Lookup(registration_handle_id); 905 registration_handles_.Lookup(registration_handle_id);
893 if (!handle) { 906 if (!handle) {
894 BadMessageReceived(); 907 bad_message::ReceivedBadMessage(
908 this, bad_message::SWDH_DECREMENT_REGISTRATION_BAD_HANDLE);
895 return; 909 return;
896 } 910 }
897 handle->DecrementRefCount(); 911 handle->DecrementRefCount();
898 if (handle->HasNoRefCount()) 912 if (handle->HasNoRefCount())
899 registration_handles_.Remove(registration_handle_id); 913 registration_handles_.Remove(registration_handle_id);
900 } 914 }
901 915
902 void ServiceWorkerDispatcherHost::UnregistrationComplete( 916 void ServiceWorkerDispatcherHost::UnregistrationComplete(
903 int thread_id, 917 int thread_id,
904 int request_id, 918 int request_id,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 1039
1026 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 1040 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
1027 if (!context_wrapper_.get()) 1041 if (!context_wrapper_.get())
1028 return nullptr; 1042 return nullptr;
1029 return context_wrapper_->context(); 1043 return context_wrapper_->context();
1030 } 1044 }
1031 1045
1032 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) { 1046 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) {
1033 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 1047 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
1034 if (!handle) { 1048 if (!handle) {
1035 BadMessageReceived(); 1049 bad_message::ReceivedBadMessage(this,
1050 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1036 return; 1051 return;
1037 } 1052 }
1038 handle->version()->StopWorker( 1053 handle->version()->StopWorker(
1039 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1054 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1040 } 1055 }
1041 1056
1042 } // namespace content 1057 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698