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

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

Issue 1795863006: service worker: Attribute purpose to start worker attempts for UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: patch for landing? Created 4 years, 9 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "content/browser/message_port_service.h" 9 #include "content/browser/message_port_service.h"
10 #include "content/browser/service_worker/embedded_worker_registry.h" 10 #include "content/browser/service_worker/embedded_worker_registry.h"
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 registration_ = 0; 245 registration_ = 0;
246 helper_.reset(); 246 helper_.reset();
247 } 247 }
248 248
249 void SimulateDispatchEvent(ServiceWorkerMetrics::EventType event_type) { 249 void SimulateDispatchEvent(ServiceWorkerMetrics::EventType event_type) {
250 ServiceWorkerStatusCode status = 250 ServiceWorkerStatusCode status =
251 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 251 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
252 252
253 // Make sure worker is running. 253 // Make sure worker is running.
254 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 254 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
255 version_->RunAfterStartWorker(runner->QuitClosure(), 255 version_->RunAfterStartWorker(event_type, runner->QuitClosure(),
256 CreateReceiverOnCurrentThread(&status)); 256 CreateReceiverOnCurrentThread(&status));
257 runner->Run(); 257 runner->Run();
258 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 258 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
259 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 259 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
260 260
261 // Start request, as if an event is being dispatched. 261 // Start request, as if an event is being dispatched.
262 int request_id = version_->StartRequest( 262 int request_id = version_->StartRequest(
263 event_type, CreateReceiverOnCurrentThread(&status)); 263 event_type, CreateReceiverOnCurrentThread(&status));
264 base::RunLoop().RunUntilIdle(); 264 base::RunLoop().RunUntilIdle();
265 265
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 380
381 private: 381 private:
382 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest); 382 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest);
383 }; 383 };
384 384
385 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { 385 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
386 // Call StartWorker() multiple times. 386 // Call StartWorker() multiple times.
387 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 387 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
388 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 388 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
389 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; 389 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
390 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 390 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
391 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); 391 CreateReceiverOnCurrentThread(&status1));
392 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
393 CreateReceiverOnCurrentThread(&status2));
392 394
393 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 395 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
394 base::RunLoop().RunUntilIdle(); 396 base::RunLoop().RunUntilIdle();
395 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 397 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
396 398
397 // Call StartWorker() after it's started. 399 // Call StartWorker() after it's started.
398 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 400 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
401 CreateReceiverOnCurrentThread(&status3));
399 base::RunLoop().RunUntilIdle(); 402 base::RunLoop().RunUntilIdle();
400 403
401 // All should just succeed. 404 // All should just succeed.
402 EXPECT_EQ(SERVICE_WORKER_OK, status1); 405 EXPECT_EQ(SERVICE_WORKER_OK, status1);
403 EXPECT_EQ(SERVICE_WORKER_OK, status2); 406 EXPECT_EQ(SERVICE_WORKER_OK, status2);
404 EXPECT_EQ(SERVICE_WORKER_OK, status3); 407 EXPECT_EQ(SERVICE_WORKER_OK, status3);
405 408
406 // Call StopWorker() multiple times. 409 // Call StopWorker() multiple times.
407 status1 = SERVICE_WORKER_ERROR_FAILED; 410 status1 = SERVICE_WORKER_ERROR_FAILED;
408 status2 = SERVICE_WORKER_ERROR_FAILED; 411 status2 = SERVICE_WORKER_ERROR_FAILED;
409 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); 412 version_->StopWorker(CreateReceiverOnCurrentThread(&status1));
410 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 413 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
411 414
412 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 415 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
413 base::RunLoop().RunUntilIdle(); 416 base::RunLoop().RunUntilIdle();
414 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 417 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
415 418
416 // All StopWorker should just succeed. 419 // All StopWorker should just succeed.
417 EXPECT_EQ(SERVICE_WORKER_OK, status1); 420 EXPECT_EQ(SERVICE_WORKER_OK, status1);
418 EXPECT_EQ(SERVICE_WORKER_OK, status2); 421 EXPECT_EQ(SERVICE_WORKER_OK, status2);
419 422
420 // Start worker again. 423 // Start worker again.
421 status1 = SERVICE_WORKER_ERROR_FAILED; 424 status1 = SERVICE_WORKER_ERROR_FAILED;
422 status2 = SERVICE_WORKER_ERROR_FAILED; 425 status2 = SERVICE_WORKER_ERROR_FAILED;
423 status3 = SERVICE_WORKER_ERROR_FAILED; 426 status3 = SERVICE_WORKER_ERROR_FAILED;
424 427
425 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 428 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
429 CreateReceiverOnCurrentThread(&status1));
426 430
427 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 431 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
428 base::RunLoop().RunUntilIdle(); 432 base::RunLoop().RunUntilIdle();
429 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 433 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
430 434
431 // Call StopWorker() 435 // Call StopWorker()
432 status2 = SERVICE_WORKER_ERROR_FAILED; 436 status2 = SERVICE_WORKER_ERROR_FAILED;
433 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 437 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
434 438
435 // And try calling StartWorker while StopWorker is in queue. 439 // And try calling StartWorker while StopWorker is in queue.
436 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 440 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
441 CreateReceiverOnCurrentThread(&status3));
437 442
438 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 443 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
439 base::RunLoop().RunUntilIdle(); 444 base::RunLoop().RunUntilIdle();
440 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 445 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
441 446
442 // All should just succeed. 447 // All should just succeed.
443 EXPECT_EQ(SERVICE_WORKER_OK, status1); 448 EXPECT_EQ(SERVICE_WORKER_OK, status1);
444 EXPECT_EQ(SERVICE_WORKER_OK, status2); 449 EXPECT_EQ(SERVICE_WORKER_OK, status2);
445 EXPECT_EQ(SERVICE_WORKER_OK, status3); 450 EXPECT_EQ(SERVICE_WORKER_OK, status3);
446 } 451 }
(...skipping 14 matching lines...) Expand all
461 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); 466 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL);
462 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 467 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
463 468
464 // The worker should be now started again. 469 // The worker should be now started again.
465 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 470 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
466 } 471 }
467 472
468 TEST_F(ServiceWorkerVersionTest, StartUnregisteredButStillLiveWorker) { 473 TEST_F(ServiceWorkerVersionTest, StartUnregisteredButStillLiveWorker) {
469 // Start the worker. 474 // Start the worker.
470 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 475 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
471 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 476 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
477 CreateReceiverOnCurrentThread(&status));
472 base::RunLoop().RunUntilIdle(); 478 base::RunLoop().RunUntilIdle();
473 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 479 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
474 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 480 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
475 481
476 // Delete the registration. 482 // Delete the registration.
477 status = SERVICE_WORKER_ERROR_FAILED; 483 status = SERVICE_WORKER_ERROR_FAILED;
478 helper_->context()->storage()->DeleteRegistration( 484 helper_->context()->storage()->DeleteRegistration(
479 registration_->id(), registration_->pattern().GetOrigin(), 485 registration_->id(), registration_->pattern().GetOrigin(),
480 CreateReceiverOnCurrentThread(&status)); 486 CreateReceiverOnCurrentThread(&status));
481 base::RunLoop().RunUntilIdle(); 487 base::RunLoop().RunUntilIdle();
(...skipping 12 matching lines...) Expand all
494 status = SERVICE_WORKER_ERROR_FAILED; 500 status = SERVICE_WORKER_ERROR_FAILED;
495 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH); 501 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH);
496 502
497 // The worker should be now started again. 503 // The worker should be now started again.
498 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 504 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
499 } 505 }
500 506
501 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) { 507 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) {
502 // Start worker. 508 // Start worker.
503 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 509 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
504 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 510 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
511 CreateReceiverOnCurrentThread(&status));
505 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 512 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
506 base::RunLoop().RunUntilIdle(); 513 base::RunLoop().RunUntilIdle();
507 EXPECT_EQ(SERVICE_WORKER_OK, status); 514 EXPECT_EQ(SERVICE_WORKER_OK, status);
508 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 515 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
509 516
510 MessageReceiverFromWorker receiver(version_->embedded_worker()); 517 MessageReceiverFromWorker receiver(version_->embedded_worker());
511 518
512 // Simulate sending some dummy values from the worker. 519 // Simulate sending some dummy values from the worker.
513 helper_->SimulateSendValueToBrowser( 520 helper_->SimulateSendValueToBrowser(
514 version_->embedded_worker()->embedded_worker_id(), 555); 521 version_->embedded_worker()->embedded_worker_id(), 555);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 // Used to reliably test when the idle time gets reset regardless of clock 592 // Used to reliably test when the idle time gets reset regardless of clock
586 // granularity. 593 // granularity.
587 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); 594 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1);
588 595
589 // Verify the timer is not running when version initializes its status. 596 // Verify the timer is not running when version initializes its status.
590 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 597 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
591 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); 598 EXPECT_FALSE(version_->timeout_timer_.IsRunning());
592 599
593 // Verify the timer is running after the worker is started. 600 // Verify the timer is running after the worker is started.
594 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 601 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
595 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 602 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
603 CreateReceiverOnCurrentThread(&status));
596 base::RunLoop().RunUntilIdle(); 604 base::RunLoop().RunUntilIdle();
597 EXPECT_EQ(SERVICE_WORKER_OK, status); 605 EXPECT_EQ(SERVICE_WORKER_OK, status);
598 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 606 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
599 EXPECT_FALSE(version_->idle_time_.is_null()); 607 EXPECT_FALSE(version_->idle_time_.is_null());
600 608
601 // The idle time should be reset if the worker is restarted without 609 // The idle time should be reset if the worker is restarted without
602 // controllee. 610 // controllee.
603 status = SERVICE_WORKER_ERROR_FAILED; 611 status = SERVICE_WORKER_ERROR_FAILED;
604 version_->idle_time_ -= kOneSecond; 612 version_->idle_time_ -= kOneSecond;
605 base::TimeTicks idle_time = version_->idle_time_; 613 base::TimeTicks idle_time = version_->idle_time_;
606 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 614 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
607 base::RunLoop().RunUntilIdle(); 615 base::RunLoop().RunUntilIdle();
608 EXPECT_EQ(SERVICE_WORKER_OK, status); 616 EXPECT_EQ(SERVICE_WORKER_OK, status);
609 status = SERVICE_WORKER_ERROR_FAILED; 617 status = SERVICE_WORKER_ERROR_FAILED;
610 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 618 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
619 CreateReceiverOnCurrentThread(&status));
611 base::RunLoop().RunUntilIdle(); 620 base::RunLoop().RunUntilIdle();
612 EXPECT_EQ(SERVICE_WORKER_OK, status); 621 EXPECT_EQ(SERVICE_WORKER_OK, status);
613 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 622 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
614 EXPECT_LT(idle_time, version_->idle_time_); 623 EXPECT_LT(idle_time, version_->idle_time_);
615 624
616 // Adding a controllee resets the idle time. 625 // Adding a controllee resets the idle time.
617 version_->idle_time_ -= kOneSecond; 626 version_->idle_time_ -= kOneSecond;
618 idle_time = version_->idle_time_; 627 idle_time = version_->idle_time_;
619 scoped_ptr<ServiceWorkerProviderHost> host(new ServiceWorkerProviderHost( 628 scoped_ptr<ServiceWorkerProviderHost> host(new ServiceWorkerProviderHost(
620 33 /* dummy render process id */, MSG_ROUTING_NONE /* render_frame_id */, 629 33 /* dummy render process id */, MSG_ROUTING_NONE /* render_frame_id */,
(...skipping 30 matching lines...) Expand all
651 CreateReceiverOnCurrentThread(&status)); 660 CreateReceiverOnCurrentThread(&status));
652 base::RunLoop().RunUntilIdle(); 661 base::RunLoop().RunUntilIdle();
653 MessagePortService::GetInstance()->Destroy(ports[0].id); 662 MessagePortService::GetInstance()->Destroy(ports[0].id);
654 663
655 EXPECT_EQ(SERVICE_WORKER_OK, status); 664 EXPECT_EQ(SERVICE_WORKER_OK, status);
656 EXPECT_LT(idle_time, version_->idle_time_); 665 EXPECT_LT(idle_time, version_->idle_time_);
657 } 666 }
658 667
659 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { 668 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
660 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 669 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
661 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 670 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
671 CreateReceiverOnCurrentThread(&status));
662 672
663 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 673 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
664 674
665 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); 675 ASSERT_TRUE(version_->timeout_timer_.IsRunning());
666 ASSERT_FALSE(version_->start_time_.is_null()); 676 ASSERT_FALSE(version_->start_time_.is_null());
667 ASSERT_FALSE(version_->skip_recording_startup_time_); 677 ASSERT_FALSE(version_->skip_recording_startup_time_);
668 678
669 // Simulate DevTools is attached. This should deactivate the timer for start 679 // Simulate DevTools is attached. This should deactivate the timer for start
670 // timeout, but not stop the timer itself. 680 // timeout, but not stop the timer itself.
671 version_->SetDevToolsAttached(true); 681 version_->SetDevToolsAttached(true);
(...skipping 11 matching lines...) Expand all
683 base::RunLoop().RunUntilIdle(); 693 base::RunLoop().RunUntilIdle();
684 EXPECT_EQ(SERVICE_WORKER_OK, status); 694 EXPECT_EQ(SERVICE_WORKER_OK, status);
685 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 695 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
686 } 696 }
687 697
688 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) { 698 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) {
689 RunningStateListener listener; 699 RunningStateListener listener;
690 version_->AddListener(&listener); 700 version_->AddListener(&listener);
691 701
692 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 702 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
693 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 703 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
704 CreateReceiverOnCurrentThread(&status));
694 base::RunLoop().RunUntilIdle(); 705 base::RunLoop().RunUntilIdle();
695 EXPECT_EQ(SERVICE_WORKER_OK, status); 706 EXPECT_EQ(SERVICE_WORKER_OK, status);
696 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 707 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
697 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status); 708 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status);
698 709
699 version_ = nullptr; 710 version_ = nullptr;
700 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status); 711 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status);
701 } 712 }
702 713
703 // Test that update isn't triggered for a non-stale worker. 714 // Test that update isn't triggered for a non-stale worker.
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
775 registration_->SetActiveVersion(version_); 786 registration_->SetActiveVersion(version_);
776 registration_->set_last_update_check(GetYesterday()); 787 registration_->set_last_update_check(GetYesterday());
777 base::TimeTicks stale_time = 788 base::TimeTicks stale_time =
778 base::TimeTicks::Now() - 789 base::TimeTicks::Now() -
779 base::TimeDelta::FromMinutes( 790 base::TimeDelta::FromMinutes(
780 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); 791 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1);
781 version_->stale_time_ = stale_time; 792 version_->stale_time_ = stale_time;
782 793
783 // Stale time is not deferred. 794 // Stale time is not deferred.
784 version_->RunAfterStartWorker( 795 version_->RunAfterStartWorker(
785 base::Bind(&base::DoNothing), 796 ServiceWorkerMetrics::EventType::UNKNOWN, base::Bind(&base::DoNothing),
786 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 797 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
787 version_->RunAfterStartWorker( 798 version_->RunAfterStartWorker(
788 base::Bind(&base::DoNothing), 799 ServiceWorkerMetrics::EventType::UNKNOWN, base::Bind(&base::DoNothing),
789 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 800 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
790 base::RunLoop().RunUntilIdle(); 801 base::RunLoop().RunUntilIdle();
791 EXPECT_EQ(stale_time, version_->stale_time_); 802 EXPECT_EQ(stale_time, version_->stale_time_);
792 803
793 // Timeout triggers the update. 804 // Timeout triggers the update.
794 version_->OnTimeoutTimer(); 805 version_->OnTimeoutTimer();
795 EXPECT_TRUE(version_->stale_time_.is_null()); 806 EXPECT_TRUE(version_->stale_time_.is_null());
796 EXPECT_TRUE(version_->update_timer_.IsRunning()); 807 EXPECT_TRUE(version_->update_timer_.IsRunning());
797 808
798 // Update timer is not deferred. 809 // Update timer is not deferred.
799 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); 810 base::TimeTicks run_time = version_->update_timer_.desired_run_time();
800 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 811 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
801 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 812 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
802 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 813 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
803 base::RunLoop().RunUntilIdle(); 814 base::RunLoop().RunUntilIdle();
804 EXPECT_TRUE(version_->stale_time_.is_null()); 815 EXPECT_TRUE(version_->stale_time_.is_null());
805 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); 816 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time());
806 } 817 }
807 818
808 TEST_F(ServiceWorkerVersionTest, RequestTimeout) { 819 TEST_F(ServiceWorkerVersionTest, RequestTimeout) {
809 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 820 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
810 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 821 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
811 822
812 version_->StartWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 823 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH,
824 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
813 base::RunLoop().RunUntilIdle(); 825 base::RunLoop().RunUntilIdle();
814 826
815 // Create a request. 827 // Create a request.
816 int request_id = 828 int request_id =
817 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH, 829 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH,
818 CreateReceiverOnCurrentThread(&status)); 830 CreateReceiverOnCurrentThread(&status));
819 base::RunLoop().RunUntilIdle(); 831 base::RunLoop().RunUntilIdle();
820 832
821 // Callback has not completed yet. 833 // Callback has not completed yet.
822 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 834 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
823 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 835 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
824 836
825 // Simulate timeout. 837 // Simulate timeout.
826 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 838 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
827 version_->SetAllRequestExpirations(base::TimeTicks::Now()); 839 version_->SetAllRequestExpirations(base::TimeTicks::Now());
828 version_->timeout_timer_.user_task().Run(); 840 version_->timeout_timer_.user_task().Run();
829 base::RunLoop().RunUntilIdle(); 841 base::RunLoop().RunUntilIdle();
830 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 842 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
831 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 843 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
832 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 844 EXPECT_FALSE(version_->FinishRequest(request_id, true));
833 } 845 }
834 846
835 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) { 847 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) {
836 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 848 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
837 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 849 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
838 850
839 version_->StartWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 851 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
852 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
840 base::RunLoop().RunUntilIdle(); 853 base::RunLoop().RunUntilIdle();
841 854
842 // Create a request that should expire Now(). 855 // Create a request that should expire Now().
843 int request_id = version_->StartRequestWithCustomTimeout( 856 int request_id = version_->StartRequestWithCustomTimeout(
844 ServiceWorkerMetrics::EventType::SYNC, 857 ServiceWorkerMetrics::EventType::SYNC,
845 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 858 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
846 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); 859 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT);
847 860
848 base::RunLoop().RunUntilIdle(); 861 base::RunLoop().RunUntilIdle();
849 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 862 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
850 version_->timeout_timer_.user_task().Run(); 863 version_->timeout_timer_.user_task().Run();
851 base::RunLoop().RunUntilIdle(); 864 base::RunLoop().RunUntilIdle();
852 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 865 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
853 866
854 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 867 EXPECT_FALSE(version_->FinishRequest(request_id, true));
855 868
856 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker. 869 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker.
857 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 870 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
858 } 871 }
859 872
860 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeoutKill) { 873 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeoutKill) {
861 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 874 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
862 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 875 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
863 876
864 version_->StartWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 877 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
878 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
865 base::RunLoop().RunUntilIdle(); 879 base::RunLoop().RunUntilIdle();
866 880
867 // Create a request that should expire Now(). 881 // Create a request that should expire Now().
868 int request_id = version_->StartRequestWithCustomTimeout( 882 int request_id = version_->StartRequestWithCustomTimeout(
869 ServiceWorkerMetrics::EventType::SYNC, 883 ServiceWorkerMetrics::EventType::SYNC,
870 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 884 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
871 ServiceWorkerVersion::KILL_ON_TIMEOUT); 885 ServiceWorkerVersion::KILL_ON_TIMEOUT);
872 886
873 base::RunLoop().RunUntilIdle(); 887 base::RunLoop().RunUntilIdle();
874 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 888 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
875 version_->timeout_timer_.user_task().Run(); 889 version_->timeout_timer_.user_task().Run();
876 base::RunLoop().RunUntilIdle(); 890 base::RunLoop().RunUntilIdle();
877 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 891 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
878 892
879 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 893 EXPECT_FALSE(version_->FinishRequest(request_id, true));
880 894
881 // KILL_ON_TIMEOUT timeouts should stop the service worker. 895 // KILL_ON_TIMEOUT timeouts should stop the service worker.
882 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 896 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
883 } 897 }
884 898
885 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) { 899 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) {
886 ServiceWorkerStatusCode sync_status = 900 ServiceWorkerStatusCode sync_status =
887 SERVICE_WORKER_ERROR_NETWORK; // dummy value 901 SERVICE_WORKER_ERROR_NETWORK; // dummy value
888 ServiceWorkerStatusCode fetch_status = 902 ServiceWorkerStatusCode fetch_status =
889 SERVICE_WORKER_ERROR_NETWORK; // dummy value 903 SERVICE_WORKER_ERROR_NETWORK; // dummy value
890 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 904 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
891 905
892 version_->StartWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 906 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH,
907 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
893 base::RunLoop().RunUntilIdle(); 908 base::RunLoop().RunUntilIdle();
894 909
895 // Create a fetch request that should expire sometime later. 910 // Create a fetch request that should expire sometime later.
896 int fetch_request_id = 911 int fetch_request_id =
897 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH, 912 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH,
898 CreateReceiverOnCurrentThread(&fetch_status)); 913 CreateReceiverOnCurrentThread(&fetch_status));
899 // Create a request that should expire Now(). 914 // Create a request that should expire Now().
900 int sync_request_id = version_->StartRequestWithCustomTimeout( 915 int sync_request_id = version_->StartRequestWithCustomTimeout(
901 ServiceWorkerMetrics::EventType::SYNC, 916 ServiceWorkerMetrics::EventType::SYNC,
902 CreateReceiverOnCurrentThread(&sync_status), base::TimeDelta(), 917 CreateReceiverOnCurrentThread(&sync_status), base::TimeDelta(),
(...skipping 22 matching lines...) Expand all
925 940
926 // Fetch request should no longer exist. 941 // Fetch request should no longer exist.
927 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true)); 942 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true));
928 943
929 // Other timeouts do stop the service worker. 944 // Other timeouts do stop the service worker.
930 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 945 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
931 } 946 }
932 947
933 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) { 948 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) {
934 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 949 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
935 version_->StartWorker( 950 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
936 CreateReceiverOnCurrentThread(&status)); 951 CreateReceiverOnCurrentThread(&status));
937 base::RunLoop().RunUntilIdle(); 952 base::RunLoop().RunUntilIdle();
938 953
939 // Callback has not completed yet. 954 // Callback has not completed yet.
940 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 955 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
941 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 956 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
942 957
943 // Simulate renderer crash: do what 958 // Simulate renderer crash: do what
944 // ServiceWorkerDispatcherHost::OnFilterRemoved does. 959 // ServiceWorkerDispatcherHost::OnFilterRemoved does.
945 int process_id = helper_->mock_render_process_id(); 960 int process_id = helper_->mock_render_process_id();
946 helper_->context()->RemoveAllProviderHostsForProcess(process_id); 961 helper_->context()->RemoveAllProviderHostsForProcess(process_id);
947 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender( 962 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender(
948 process_id); 963 process_id);
949 base::RunLoop().RunUntilIdle(); 964 base::RunLoop().RunUntilIdle();
950 965
951 // Callback completed. 966 // Callback completed.
952 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status); 967 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status);
953 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 968 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
954 } 969 }
955 970
956 TEST_F(ServiceWorkerFailToStartTest, Timeout) { 971 TEST_F(ServiceWorkerFailToStartTest, Timeout) {
957 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 972 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
958 973
959 // Start starting the worker. 974 // Start starting the worker.
960 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 975 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
976 CreateReceiverOnCurrentThread(&status));
961 base::RunLoop().RunUntilIdle(); 977 base::RunLoop().RunUntilIdle();
962 978
963 // Callback has not completed yet. 979 // Callback has not completed yet.
964 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 980 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
965 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 981 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
966 982
967 // Simulate timeout. 983 // Simulate timeout.
968 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 984 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
969 version_->start_time_ = 985 version_->start_time_ =
970 base::TimeTicks::Now() - 986 base::TimeTicks::Now() -
971 base::TimeDelta::FromMinutes( 987 base::TimeDelta::FromMinutes(
972 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); 988 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1);
973 version_->timeout_timer_.user_task().Run(); 989 version_->timeout_timer_.user_task().Run();
974 base::RunLoop().RunUntilIdle(); 990 base::RunLoop().RunUntilIdle();
975 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 991 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
976 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 992 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
977 } 993 }
978 994
979 // Test that a service worker stalled in stopping will timeout and not get in a 995 // Test that a service worker stalled in stopping will timeout and not get in a
980 // sticky error state. 996 // sticky error state.
981 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenStart) { 997 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenStart) {
982 // Start a worker. 998 // Start a worker.
983 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 999 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
984 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1000 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1001 CreateReceiverOnCurrentThread(&status));
985 base::RunLoop().RunUntilIdle(); 1002 base::RunLoop().RunUntilIdle();
986 EXPECT_EQ(SERVICE_WORKER_OK, status); 1003 EXPECT_EQ(SERVICE_WORKER_OK, status);
987 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1004 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
988 1005
989 // Try to stop the worker. 1006 // Try to stop the worker.
990 status = SERVICE_WORKER_ERROR_FAILED; 1007 status = SERVICE_WORKER_ERROR_FAILED;
991 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 1008 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
992 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 1009 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
993 base::RunLoop().RunUntilIdle(); 1010 base::RunLoop().RunUntilIdle();
994 1011
995 // Worker is now stalled in stopping. Verify a fast timeout is in place. 1012 // Worker is now stalled in stopping. Verify a fast timeout is in place.
996 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1013 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
997 EXPECT_EQ(base::TimeDelta::FromSeconds( 1014 EXPECT_EQ(base::TimeDelta::FromSeconds(
998 ServiceWorkerVersion::kStopWorkerTimeoutSeconds), 1015 ServiceWorkerVersion::kStopWorkerTimeoutSeconds),
999 version_->timeout_timer_.GetCurrentDelay()); 1016 version_->timeout_timer_.GetCurrentDelay());
1000 1017
1001 // Simulate timeout. 1018 // Simulate timeout.
1002 version_->stop_time_ = 1019 version_->stop_time_ =
1003 base::TimeTicks::Now() - 1020 base::TimeTicks::Now() -
1004 base::TimeDelta::FromSeconds( 1021 base::TimeDelta::FromSeconds(
1005 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1); 1022 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1);
1006 version_->timeout_timer_.user_task().Run(); 1023 version_->timeout_timer_.user_task().Run();
1007 base::RunLoop().RunUntilIdle(); 1024 base::RunLoop().RunUntilIdle();
1008 EXPECT_EQ(SERVICE_WORKER_OK, status); 1025 EXPECT_EQ(SERVICE_WORKER_OK, status);
1009 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 1026 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
1010 1027
1011 // Try to start the worker again. It should work. 1028 // Try to start the worker again. It should work.
1012 status = SERVICE_WORKER_ERROR_FAILED; 1029 status = SERVICE_WORKER_ERROR_FAILED;
1013 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1030 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1031 CreateReceiverOnCurrentThread(&status));
1014 base::RunLoop().RunUntilIdle(); 1032 base::RunLoop().RunUntilIdle();
1015 EXPECT_EQ(SERVICE_WORKER_OK, status); 1033 EXPECT_EQ(SERVICE_WORKER_OK, status);
1016 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1034 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1017 1035
1018 // The timeout interval should be reset to normal. 1036 // The timeout interval should be reset to normal.
1019 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1037 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
1020 EXPECT_EQ(base::TimeDelta::FromSeconds( 1038 EXPECT_EQ(base::TimeDelta::FromSeconds(
1021 ServiceWorkerVersion::kTimeoutTimerDelaySeconds), 1039 ServiceWorkerVersion::kTimeoutTimerDelaySeconds),
1022 version_->timeout_timer_.GetCurrentDelay()); 1040 version_->timeout_timer_.GetCurrentDelay());
1023 } 1041 }
1024 1042
1025 // Test that a service worker stalled in stopping with a start worker 1043 // Test that a service worker stalled in stopping with a start worker
1026 // request queued up will timeout and restart. 1044 // request queued up will timeout and restart.
1027 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenRestart) { 1045 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenRestart) {
1028 // Start a worker. 1046 // Start a worker.
1029 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 1047 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1030 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1048 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1049 CreateReceiverOnCurrentThread(&status));
1031 base::RunLoop().RunUntilIdle(); 1050 base::RunLoop().RunUntilIdle();
1032 EXPECT_EQ(SERVICE_WORKER_OK, status); 1051 EXPECT_EQ(SERVICE_WORKER_OK, status);
1033 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1052 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1034 1053
1035 // Try to stop the worker. 1054 // Try to stop the worker.
1036 status = SERVICE_WORKER_ERROR_FAILED; 1055 status = SERVICE_WORKER_ERROR_FAILED;
1037 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 1056 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
1038 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 1057 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
1039 1058
1040 // Worker is now stalled in stopping. Add a start worker requset. 1059 // Worker is now stalled in stopping. Add a start worker requset.
1041 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; 1060 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED;
1042 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); 1061 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1062 CreateReceiverOnCurrentThread(&start_status));
1043 1063
1044 // Simulate timeout. The worker should stop and get restarted. 1064 // Simulate timeout. The worker should stop and get restarted.
1045 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1065 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
1046 version_->stop_time_ = 1066 version_->stop_time_ =
1047 base::TimeTicks::Now() - 1067 base::TimeTicks::Now() -
1048 base::TimeDelta::FromSeconds( 1068 base::TimeDelta::FromSeconds(
1049 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1); 1069 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1);
1050 version_->timeout_timer_.user_task().Run(); 1070 version_->timeout_timer_.user_task().Run();
1051 base::RunLoop().RunUntilIdle(); 1071 base::RunLoop().RunUntilIdle();
1052 EXPECT_EQ(SERVICE_WORKER_OK, status); 1072 EXPECT_EQ(SERVICE_WORKER_OK, status);
1053 EXPECT_EQ(SERVICE_WORKER_OK, start_status); 1073 EXPECT_EQ(SERVICE_WORKER_OK, start_status);
1054 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1074 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1055 } 1075 }
1056 1076
1057 TEST_F(ServiceWorkerVersionTest, RegisterForeignFetchScopes) { 1077 TEST_F(ServiceWorkerVersionTest, RegisterForeignFetchScopes) {
1058 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 1078 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
1059 // Start a worker. 1079 // Start a worker.
1060 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 1080 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1061 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1081 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1082 CreateReceiverOnCurrentThread(&status));
1062 base::RunLoop().RunUntilIdle(); 1083 base::RunLoop().RunUntilIdle();
1063 EXPECT_EQ(SERVICE_WORKER_OK, status); 1084 EXPECT_EQ(SERVICE_WORKER_OK, status);
1064 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1085 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1065 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count()); 1086 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count());
1066 1087
1067 GURL valid_scope_1("http://www.example.com/test/subscope"); 1088 GURL valid_scope_1("http://www.example.com/test/subscope");
1068 GURL valid_scope_2("http://www.example.com/test/othersubscope"); 1089 GURL valid_scope_2("http://www.example.com/test/othersubscope");
1069 std::vector<GURL> valid_scopes; 1090 std::vector<GURL> valid_scopes;
1070 valid_scopes.push_back(valid_scope_1); 1091 valid_scopes.push_back(valid_scope_1);
1071 valid_scopes.push_back(valid_scope_2); 1092 valid_scopes.push_back(valid_scope_2);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); 1147 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]);
1127 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]); 1148 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]);
1128 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size()); 1149 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size());
1129 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]); 1150 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]);
1130 } 1151 }
1131 1152
1132 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) { 1153 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) {
1133 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1154 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1134 1155
1135 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1156 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1136 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1157 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1158 CreateReceiverOnCurrentThread(&status));
1137 base::RunLoop().RunUntilIdle(); 1159 base::RunLoop().RunUntilIdle();
1138 EXPECT_EQ(SERVICE_WORKER_OK, status); 1160 EXPECT_EQ(SERVICE_WORKER_OK, status);
1139 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1161 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1140 1162
1141 int request_id = 1163 int request_id =
1142 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC, 1164 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC,
1143 CreateReceiverOnCurrentThread(&status)); 1165 CreateReceiverOnCurrentThread(&status));
1144 base::RunLoop().RunUntilIdle(); 1166 base::RunLoop().RunUntilIdle();
1145 1167
1146 // Callback has not completed yet. 1168 // Callback has not completed yet.
(...skipping 12 matching lines...) Expand all
1159 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 1181 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
1160 1182
1161 // Request already failed, calling finsh should return false. 1183 // Request already failed, calling finsh should return false.
1162 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 1184 EXPECT_FALSE(version_->FinishRequest(request_id, true));
1163 } 1185 }
1164 1186
1165 TEST_F(ServiceWorkerVersionWithMojoTest, MojoService) { 1187 TEST_F(ServiceWorkerVersionWithMojoTest, MojoService) {
1166 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1188 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1167 1189
1168 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1190 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1169 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1191 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1192 CreateReceiverOnCurrentThread(&status));
1170 base::RunLoop().RunUntilIdle(); 1193 base::RunLoop().RunUntilIdle();
1171 EXPECT_EQ(SERVICE_WORKER_OK, status); 1194 EXPECT_EQ(SERVICE_WORKER_OK, status);
1172 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1195 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1173 1196
1174 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1197 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1175 int request_id = version_->StartRequest( 1198 int request_id = version_->StartRequest(
1176 ServiceWorkerMetrics::EventType::SYNC, 1199 ServiceWorkerMetrics::EventType::SYNC,
1177 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1200 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1178 base::WeakPtr<TestMojoService> service = 1201 base::WeakPtr<TestMojoService> service =
1179 version_->GetMojoServiceForRequest<TestMojoService>(request_id); 1202 version_->GetMojoServiceForRequest<TestMojoService>(request_id);
1180 service->DoSomething(runner->QuitClosure()); 1203 service->DoSomething(runner->QuitClosure());
1181 runner->Run(); 1204 runner->Run();
1182 1205
1183 // Mojo service does exist in worker, so error callback should not have been 1206 // Mojo service does exist in worker, so error callback should not have been
1184 // called and FinishRequest should return true. 1207 // called and FinishRequest should return true.
1185 EXPECT_EQ(SERVICE_WORKER_OK, status); 1208 EXPECT_EQ(SERVICE_WORKER_OK, status);
1186 EXPECT_TRUE(version_->FinishRequest(request_id, true)); 1209 EXPECT_TRUE(version_->FinishRequest(request_id, true));
1187 } 1210 }
1188 1211
1189 TEST_F(ServiceWorkerVersionTest, NonExistentMojoService) { 1212 TEST_F(ServiceWorkerVersionTest, NonExistentMojoService) {
1190 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1213 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1191 1214
1192 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1215 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1193 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1216 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1217 CreateReceiverOnCurrentThread(&status));
1194 base::RunLoop().RunUntilIdle(); 1218 base::RunLoop().RunUntilIdle();
1195 EXPECT_EQ(SERVICE_WORKER_OK, status); 1219 EXPECT_EQ(SERVICE_WORKER_OK, status);
1196 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1220 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1197 1221
1198 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1222 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1199 int request_id = version_->StartRequest( 1223 int request_id = version_->StartRequest(
1200 ServiceWorkerMetrics::EventType::SYNC, 1224 ServiceWorkerMetrics::EventType::SYNC,
1201 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1225 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1202 base::WeakPtr<TestMojoService> service = 1226 base::WeakPtr<TestMojoService> service =
1203 version_->GetMojoServiceForRequest<TestMojoService>(request_id); 1227 version_->GetMojoServiceForRequest<TestMojoService>(request_id);
1204 service->DoSomething(runner->QuitClosure()); 1228 service->DoSomething(runner->QuitClosure());
1205 runner->Run(); 1229 runner->Run();
1206 1230
1207 // Mojo service doesn't exist in worker, so error callback should have been 1231 // Mojo service doesn't exist in worker, so error callback should have been
1208 // called and FinishRequest should return false. 1232 // called and FinishRequest should return false.
1209 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1233 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1210 EXPECT_FALSE(version_->FinishRequest(request_id, true)); 1234 EXPECT_FALSE(version_->FinishRequest(request_id, true));
1211 } 1235 }
1212 1236
1213 TEST_F(ServiceWorkerVersionTest, DispatchEvent) { 1237 TEST_F(ServiceWorkerVersionTest, DispatchEvent) {
1214 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1238 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1215 1239
1216 // Activate and start worker. 1240 // Activate and start worker.
1217 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1241 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1218 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1242 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1243 CreateReceiverOnCurrentThread(&status));
1219 base::RunLoop().RunUntilIdle(); 1244 base::RunLoop().RunUntilIdle();
1220 EXPECT_EQ(SERVICE_WORKER_OK, status); 1245 EXPECT_EQ(SERVICE_WORKER_OK, status);
1221 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1246 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1222 1247
1223 // Start request and dispatch test event. 1248 // Start request and dispatch test event.
1224 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1249 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1225 int request_id = version_->StartRequest( 1250 int request_id = version_->StartRequest(
1226 ServiceWorkerMetrics::EventType::SYNC, 1251 ServiceWorkerMetrics::EventType::SYNC,
1227 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1252 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1228 int received_request_id = 0; 1253 int received_request_id = 0;
(...skipping 29 matching lines...) Expand all
1258 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1283 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1259 1284
1260 helper_->SimulateAddProcessToPattern(pattern_, 1285 helper_->SimulateAddProcessToPattern(pattern_,
1261 helper_->new_render_process_id()); 1286 helper_->new_render_process_id());
1262 1287
1263 // (1) Fail twice and then succeed. The failure count should be reset. 1288 // (1) Fail twice and then succeed. The failure count should be reset.
1264 ServiceWorkerContextCore* context = helper_->context(); 1289 ServiceWorkerContextCore* context = helper_->context();
1265 int64_t id = version_->version_id(); 1290 int64_t id = version_->version_id();
1266 set_start_mode(MessageReceiverDisallowStart::StartMode::FAIL); 1291 set_start_mode(MessageReceiverDisallowStart::StartMode::FAIL);
1267 // Fail once. 1292 // Fail once.
1268 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1293 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1294 CreateReceiverOnCurrentThread(&status));
1269 base::RunLoop().RunUntilIdle(); 1295 base::RunLoop().RunUntilIdle();
1270 EXPECT_EQ(1, context->GetVersionFailureCount(id)); 1296 EXPECT_EQ(1, context->GetVersionFailureCount(id));
1271 // Fail again. 1297 // Fail again.
1272 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1298 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1299 CreateReceiverOnCurrentThread(&status));
1273 base::RunLoop().RunUntilIdle(); 1300 base::RunLoop().RunUntilIdle();
1274 EXPECT_EQ(2, context->GetVersionFailureCount(id)); 1301 EXPECT_EQ(2, context->GetVersionFailureCount(id));
1275 // Succeed. It should choose the "new process". 1302 // Succeed. It should choose the "new process".
1276 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); 1303 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED);
1277 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1304 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1305 CreateReceiverOnCurrentThread(&status));
1278 base::RunLoop().RunUntilIdle(); 1306 base::RunLoop().RunUntilIdle();
1279 EXPECT_EQ(helper_->new_render_process_id(), 1307 EXPECT_EQ(helper_->new_render_process_id(),
1280 version_->embedded_worker()->process_id()); 1308 version_->embedded_worker()->process_id());
1281 EXPECT_EQ(0, context->GetVersionFailureCount(id)); 1309 EXPECT_EQ(0, context->GetVersionFailureCount(id));
1282 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 1310 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
1283 base::RunLoop().RunUntilIdle(); 1311 base::RunLoop().RunUntilIdle();
1284 1312
1285 // (2) Fail three times. The worker should be disabled. 1313 // (2) Fail three times. The worker should be disabled.
1286 set_start_mode(MessageReceiverDisallowStart::StartMode::FAIL); 1314 set_start_mode(MessageReceiverDisallowStart::StartMode::FAIL);
1287 // Fail once. 1315 // Fail once.
1288 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1316 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1317 CreateReceiverOnCurrentThread(&status));
1289 base::RunLoop().RunUntilIdle(); 1318 base::RunLoop().RunUntilIdle();
1290 EXPECT_EQ(1, context->GetVersionFailureCount(id)); 1319 EXPECT_EQ(1, context->GetVersionFailureCount(id));
1291 // Fail again. 1320 // Fail again.
1292 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1321 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1322 CreateReceiverOnCurrentThread(&status));
1293 base::RunLoop().RunUntilIdle(); 1323 base::RunLoop().RunUntilIdle();
1294 EXPECT_EQ(2, context->GetVersionFailureCount(id)); 1324 EXPECT_EQ(2, context->GetVersionFailureCount(id));
1295 // Fail again. 1325 // Fail again.
1296 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1326 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1327 CreateReceiverOnCurrentThread(&status));
1297 base::RunLoop().RunUntilIdle(); 1328 base::RunLoop().RunUntilIdle();
1298 EXPECT_EQ(3, context->GetVersionFailureCount(id)); 1329 EXPECT_EQ(3, context->GetVersionFailureCount(id));
1299 1330
1300 // The worker should be disabled. 1331 // The worker should be disabled.
1301 EXPECT_TRUE(version_->IsDisabled()); 1332 EXPECT_TRUE(version_->IsDisabled());
1302 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); 1333 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED);
1303 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1334 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1335 CreateReceiverOnCurrentThread(&status));
1304 base::RunLoop().RunUntilIdle(); 1336 base::RunLoop().RunUntilIdle();
1305 EXPECT_EQ(SERVICE_WORKER_ERROR_DISABLED_WORKER, status); 1337 EXPECT_EQ(SERVICE_WORKER_ERROR_DISABLED_WORKER, status);
1306 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 1338 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
1307 1339
1308 // (3) The worker is re-enabled when the failure counts expire. 1340 // (3) The worker is re-enabled when the failure counts expire.
1309 EXPECT_TRUE(version_->IsDisabled()); 1341 EXPECT_TRUE(version_->IsDisabled());
1310 base::Time yesterday = GetYesterday(); 1342 base::Time yesterday = GetYesterday();
1311 context->failure_counts_expiration_time_ = yesterday; 1343 context->failure_counts_expiration_time_ = yesterday;
1312 EXPECT_EQ(0, context->GetVersionFailureCount(id)); 1344 EXPECT_EQ(0, context->GetVersionFailureCount(id));
1313 EXPECT_LT(yesterday, context->failure_counts_expiration_time_); 1345 EXPECT_LT(yesterday, context->failure_counts_expiration_time_);
1314 EXPECT_FALSE(version_->IsDisabled()); 1346 EXPECT_FALSE(version_->IsDisabled());
1315 } 1347 }
1316 1348
1317 TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) { 1349 TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) {
1318 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1350 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1319 1351
1320 // Activate and start worker. 1352 // Activate and start worker.
1321 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1353 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1322 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1354 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1355 CreateReceiverOnCurrentThread(&status));
1323 base::RunLoop().RunUntilIdle(); 1356 base::RunLoop().RunUntilIdle();
1324 EXPECT_EQ(SERVICE_WORKER_OK, status); 1357 EXPECT_EQ(SERVICE_WORKER_OK, status);
1325 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1358 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1326 1359
1327 // Start first request and dispatch test event. 1360 // Start first request and dispatch test event.
1328 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner); 1361 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
1329 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value 1362 ServiceWorkerStatusCode status1 = SERVICE_WORKER_OK; // dummy value
1330 int request_id1 = version_->StartRequest( 1363 int request_id1 = version_->StartRequest(
1331 ServiceWorkerMetrics::EventType::SYNC, 1364 ServiceWorkerMetrics::EventType::SYNC,
1332 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure())); 1365 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1389 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1422 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1390 EXPECT_TRUE(version_->FinishRequest(request_id1, true)); 1423 EXPECT_TRUE(version_->FinishRequest(request_id1, true));
1391 } 1424 }
1392 1425
1393 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) { 1426 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) {
1394 ServiceWorkerStatusCode status = 1427 ServiceWorkerStatusCode status =
1395 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1428 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1396 1429
1397 // Activate and start worker. 1430 // Activate and start worker.
1398 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1431 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1399 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1432 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1433 CreateReceiverOnCurrentThread(&status));
1400 base::RunLoop().RunUntilIdle(); 1434 base::RunLoop().RunUntilIdle();
1401 EXPECT_EQ(SERVICE_WORKER_OK, status); 1435 EXPECT_EQ(SERVICE_WORKER_OK, status);
1402 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1436 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1403 1437
1404 // Start request and dispatch test event. 1438 // Start request and dispatch test event.
1405 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1439 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1406 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1440 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1407 int request_id = version_->StartRequest( 1441 int request_id = version_->StartRequest(
1408 ServiceWorkerMetrics::EventType::SYNC, 1442 ServiceWorkerMetrics::EventType::SYNC,
1409 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1443 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
(...skipping 15 matching lines...) Expand all
1425 // Verify callback was called with correct status. 1459 // Verify callback was called with correct status.
1426 EXPECT_EQ(SERVICE_WORKER_OK, status); 1460 EXPECT_EQ(SERVICE_WORKER_OK, status);
1427 } 1461 }
1428 1462
1429 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { 1463 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) {
1430 ServiceWorkerStatusCode status = 1464 ServiceWorkerStatusCode status =
1431 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1465 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1432 1466
1433 // Activate and start worker. 1467 // Activate and start worker.
1434 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1468 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1435 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 1469 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1470 CreateReceiverOnCurrentThread(&status));
1436 base::RunLoop().RunUntilIdle(); 1471 base::RunLoop().RunUntilIdle();
1437 EXPECT_EQ(SERVICE_WORKER_OK, status); 1472 EXPECT_EQ(SERVICE_WORKER_OK, status);
1438 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 1473 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
1439 1474
1440 // Start request and dispatch test event. 1475 // Start request and dispatch test event.
1441 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1476 status = SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1442 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1477 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1443 int request_id = version_->StartRequest( 1478 int request_id = version_->StartRequest(
1444 ServiceWorkerMetrics::EventType::SYNC, 1479 ServiceWorkerMetrics::EventType::SYNC,
1445 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1480 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
(...skipping 10 matching lines...) Expand all
1456 helper_->SimulateSendSimpleEventResult( 1491 helper_->SimulateSendSimpleEventResult(
1457 version_->embedded_worker()->embedded_worker_id(), request_id, 1492 version_->embedded_worker()->embedded_worker_id(), request_id,
1458 blink::WebServiceWorkerEventResultRejected); 1493 blink::WebServiceWorkerEventResultRejected);
1459 runner->Run(); 1494 runner->Run();
1460 1495
1461 // Verify callback was called with correct status. 1496 // Verify callback was called with correct status.
1462 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 1497 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
1463 } 1498 }
1464 1499
1465 } // namespace content 1500 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698