Chromium Code Reviews| 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" |
| 11 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 11 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
| 12 #include "content/browser/service_worker/service_worker_context_core.h" | 12 #include "content/browser/service_worker/service_worker_context_core.h" |
| 13 #include "content/browser/service_worker/service_worker_registration.h" | 13 #include "content/browser/service_worker/service_worker_registration.h" |
| 14 #include "content/browser/service_worker/service_worker_test_utils.h" | 14 #include "content/browser/service_worker/service_worker_test_utils.h" |
| 15 #include "content/browser/service_worker/service_worker_version.h" | 15 #include "content/browser/service_worker/service_worker_version.h" |
| 16 #include "content/common/service_worker/service_worker_utils.h" | 16 #include "content/common/service_worker/service_worker_utils.h" |
| 17 #include "content/public/common/push_event_payload.h" | |
| 17 #include "content/public/test/mock_render_process_host.h" | 18 #include "content/public/test/mock_render_process_host.h" |
| 18 #include "content/public/test/test_browser_thread_bundle.h" | 19 #include "content/public/test/test_browser_thread_bundle.h" |
| 19 #include "content/public/test/test_mojo_service.mojom.h" | 20 #include "content/public/test/test_mojo_service.mojom.h" |
| 20 #include "content/public/test/test_utils.h" | 21 #include "content/public/test/test_utils.h" |
| 21 #include "mojo/public/cpp/bindings/strong_binding.h" | 22 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 24 |
| 24 // IPC messages for testing --------------------------------------------------- | 25 // IPC messages for testing --------------------------------------------------- |
| 25 | 26 |
| 26 #define IPC_MESSAGE_IMPL | 27 #define IPC_MESSAGE_IMPL |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 701 } | 702 } |
| 702 | 703 |
| 703 // Test that update isn't triggered for a non-stale worker. | 704 // Test that update isn't triggered for a non-stale worker. |
| 704 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { | 705 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { |
| 705 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 706 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 706 | 707 |
| 707 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 708 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 708 registration_->SetActiveVersion(version_); | 709 registration_->SetActiveVersion(version_); |
| 709 registration_->set_last_update_check(base::Time::Now()); | 710 registration_->set_last_update_check(base::Time::Now()); |
| 710 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 711 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
| 711 std::string()); | 712 PushEventPayload(std::string())); |
|
Peter Beverloo
2016/01/25 17:39:06
Mm. It doesn't seem to be significant for these te
harkness
2016/01/26 12:07:19
Done.
| |
| 712 base::RunLoop().RunUntilIdle(); | 713 base::RunLoop().RunUntilIdle(); |
| 713 | 714 |
| 714 EXPECT_EQ(SERVICE_WORKER_OK, status); | 715 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 715 EXPECT_TRUE(version_->stale_time_.is_null()); | 716 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 716 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 717 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 717 } | 718 } |
| 718 | 719 |
| 719 // Test that update isn't triggered for a non-active worker. | 720 // Test that update isn't triggered for a non-active worker. |
| 720 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { | 721 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { |
| 721 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 722 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 733 | 734 |
| 734 // Test that staleness is detected when starting a worker. | 735 // Test that staleness is detected when starting a worker. |
| 735 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { | 736 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { |
| 736 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 737 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 737 | 738 |
| 738 // Starting the worker marks it as stale. | 739 // Starting the worker marks it as stale. |
| 739 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 740 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 740 registration_->SetActiveVersion(version_); | 741 registration_->SetActiveVersion(version_); |
| 741 registration_->set_last_update_check(GetYesterday()); | 742 registration_->set_last_update_check(GetYesterday()); |
| 742 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 743 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
| 743 std::string()); | 744 PushEventPayload(std::string())); |
| 744 base::RunLoop().RunUntilIdle(); | 745 base::RunLoop().RunUntilIdle(); |
| 745 EXPECT_EQ(SERVICE_WORKER_OK, status); | 746 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 746 EXPECT_FALSE(version_->stale_time_.is_null()); | 747 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 747 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 748 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 748 | 749 |
| 749 // Update is actually scheduled after the worker stops. | 750 // Update is actually scheduled after the worker stops. |
| 750 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 751 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
| 751 base::RunLoop().RunUntilIdle(); | 752 base::RunLoop().RunUntilIdle(); |
| 752 EXPECT_EQ(SERVICE_WORKER_OK, status); | 753 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 753 EXPECT_TRUE(version_->stale_time_.is_null()); | 754 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 754 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 755 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 755 } | 756 } |
| 756 | 757 |
| 757 // Test that staleness is detected on a running worker. | 758 // Test that staleness is detected on a running worker. |
| 758 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { | 759 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { |
| 759 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 760 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 760 | 761 |
| 761 // Start a fresh worker. | 762 // Start a fresh worker. |
| 762 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 763 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 763 registration_->SetActiveVersion(version_); | 764 registration_->SetActiveVersion(version_); |
| 764 registration_->set_last_update_check(base::Time::Now()); | 765 registration_->set_last_update_check(base::Time::Now()); |
| 765 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 766 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
| 766 std::string()); | 767 PushEventPayload(std::string())); |
| 767 base::RunLoop().RunUntilIdle(); | 768 base::RunLoop().RunUntilIdle(); |
| 768 EXPECT_EQ(SERVICE_WORKER_OK, status); | 769 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 769 EXPECT_TRUE(version_->stale_time_.is_null()); | 770 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 770 | 771 |
| 771 // Simulate it running for a day. It will be marked stale. | 772 // Simulate it running for a day. It will be marked stale. |
| 772 registration_->set_last_update_check(GetYesterday()); | 773 registration_->set_last_update_check(GetYesterday()); |
| 773 version_->OnTimeoutTimer(); | 774 version_->OnTimeoutTimer(); |
| 774 EXPECT_FALSE(version_->stale_time_.is_null()); | 775 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 775 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 776 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 776 | 777 |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 792 registration_->SetActiveVersion(version_); | 793 registration_->SetActiveVersion(version_); |
| 793 registration_->set_last_update_check(GetYesterday()); | 794 registration_->set_last_update_check(GetYesterday()); |
| 794 base::TimeTicks stale_time = | 795 base::TimeTicks stale_time = |
| 795 base::TimeTicks::Now() - | 796 base::TimeTicks::Now() - |
| 796 base::TimeDelta::FromMinutes( | 797 base::TimeDelta::FromMinutes( |
| 797 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); | 798 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); |
| 798 version_->stale_time_ = stale_time; | 799 version_->stale_time_ = stale_time; |
| 799 | 800 |
| 800 // Stale time is not deferred. | 801 // Stale time is not deferred. |
| 801 version_->DispatchPushEvent( | 802 version_->DispatchPushEvent( |
| 802 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 803 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), |
| 804 PushEventPayload(std::string())); | |
| 803 version_->DispatchPushEvent( | 805 version_->DispatchPushEvent( |
| 804 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 806 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), |
| 807 PushEventPayload(std::string())); | |
| 805 EXPECT_EQ(stale_time, version_->stale_time_); | 808 EXPECT_EQ(stale_time, version_->stale_time_); |
| 806 | 809 |
| 807 // Timeout triggers the update. | 810 // Timeout triggers the update. |
| 808 version_->OnTimeoutTimer(); | 811 version_->OnTimeoutTimer(); |
| 809 EXPECT_TRUE(version_->stale_time_.is_null()); | 812 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 810 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 813 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 811 | 814 |
| 812 // Update timer is not deferred. | 815 // Update timer is not deferred. |
| 813 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); | 816 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); |
| 814 version_->DispatchPushEvent( | 817 version_->DispatchPushEvent( |
| 815 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 818 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), |
| 819 PushEventPayload(std::string())); | |
| 816 version_->DispatchPushEvent( | 820 version_->DispatchPushEvent( |
| 817 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 821 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), |
| 822 PushEventPayload(std::string())); | |
| 818 version_->DispatchPushEvent( | 823 version_->DispatchPushEvent( |
| 819 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 824 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), |
| 825 PushEventPayload(std::string())); | |
| 820 base::RunLoop().RunUntilIdle(); | 826 base::RunLoop().RunUntilIdle(); |
| 821 EXPECT_TRUE(version_->stale_time_.is_null()); | 827 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 822 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); | 828 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); |
| 823 } | 829 } |
| 824 | 830 |
| 825 TEST_F(ServiceWorkerWaitForeverInFetchTest, RequestTimeout) { | 831 TEST_F(ServiceWorkerWaitForeverInFetchTest, RequestTimeout) { |
| 826 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 832 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 827 | 833 |
| 828 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 834 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 829 version_->DispatchFetchEvent(ServiceWorkerFetchRequest(), | 835 version_->DispatchFetchEvent(ServiceWorkerFetchRequest(), |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1338 | 1344 |
| 1339 // Verify correct response was received. | 1345 // Verify correct response was received. |
| 1340 EXPECT_EQ(request_id1, received_request_id1); | 1346 EXPECT_EQ(request_id1, received_request_id1); |
| 1341 EXPECT_EQ(request_id2, received_request_id2); | 1347 EXPECT_EQ(request_id2, received_request_id2); |
| 1342 EXPECT_EQ(reply1, received_data1); | 1348 EXPECT_EQ(reply1, received_data1); |
| 1343 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1349 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1344 EXPECT_TRUE(version_->FinishRequest(request_id1)); | 1350 EXPECT_TRUE(version_->FinishRequest(request_id1)); |
| 1345 } | 1351 } |
| 1346 | 1352 |
| 1347 } // namespace content | 1353 } // namespace content |
| OLD | NEW |