OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |