| 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 |