| 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 virtual scoped_ptr<MessageReceiver> GetMessageReceiver() { | 233 virtual scoped_ptr<MessageReceiver> GetMessageReceiver() { |
| 234 return make_scoped_ptr(new MessageReceiver()); | 234 return make_scoped_ptr(new MessageReceiver()); |
| 235 } | 235 } |
| 236 | 236 |
| 237 void TearDown() override { | 237 void TearDown() override { |
| 238 version_ = 0; | 238 version_ = 0; |
| 239 registration_ = 0; | 239 registration_ = 0; |
| 240 helper_.reset(); | 240 helper_.reset(); |
| 241 } | 241 } |
| 242 | 242 |
| 243 void SimulateDispatchEvent() { |
| 244 ServiceWorkerStatusCode status = |
| 245 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
| 246 |
| 247 // Make sure worker is running. |
| 248 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); |
| 249 base::RunLoop().RunUntilIdle(); |
| 250 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 251 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 252 |
| 253 // Start request, as if an event is being dispatched. |
| 254 int request_id = |
| 255 version_->StartRequest(ServiceWorkerMetrics::EventType::PUSH, |
| 256 CreateReceiverOnCurrentThread(&status)); |
| 257 base::RunLoop().RunUntilIdle(); |
| 258 |
| 259 // And finish request, as if a response to the event was received. |
| 260 EXPECT_TRUE(version_->FinishRequest(request_id)); |
| 261 base::RunLoop().RunUntilIdle(); |
| 262 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 263 } |
| 264 |
| 243 TestBrowserThreadBundle thread_bundle_; | 265 TestBrowserThreadBundle thread_bundle_; |
| 244 scoped_ptr<MessageReceiver> helper_; | 266 scoped_ptr<MessageReceiver> helper_; |
| 245 scoped_refptr<ServiceWorkerRegistration> registration_; | 267 scoped_refptr<ServiceWorkerRegistration> registration_; |
| 246 scoped_refptr<ServiceWorkerVersion> version_; | 268 scoped_refptr<ServiceWorkerVersion> version_; |
| 247 GURL pattern_; | 269 GURL pattern_; |
| 248 | 270 |
| 249 private: | 271 private: |
| 250 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest); | 272 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest); |
| 251 }; | 273 }; |
| 252 | 274 |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 EXPECT_EQ(SERVICE_WORKER_OK, status); | 717 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 696 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); | 718 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 697 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status); | 719 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status); |
| 698 | 720 |
| 699 version_ = nullptr; | 721 version_ = nullptr; |
| 700 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status); | 722 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status); |
| 701 } | 723 } |
| 702 | 724 |
| 703 // Test that update isn't triggered for a non-stale worker. | 725 // Test that update isn't triggered for a non-stale worker. |
| 704 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { | 726 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { |
| 705 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | |
| 706 | |
| 707 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 727 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 708 registration_->SetActiveVersion(version_); | 728 registration_->SetActiveVersion(version_); |
| 709 registration_->set_last_update_check(base::Time::Now()); | 729 registration_->set_last_update_check(base::Time::Now()); |
| 710 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 730 SimulateDispatchEvent(); |
| 711 std::string()); | |
| 712 base::RunLoop().RunUntilIdle(); | |
| 713 | 731 |
| 714 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 715 EXPECT_TRUE(version_->stale_time_.is_null()); | 732 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 716 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 733 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 717 } | 734 } |
| 718 | 735 |
| 719 // Test that update isn't triggered for a non-active worker. | 736 // Test that update isn't triggered for a non-active worker. |
| 720 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { | 737 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { |
| 721 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 738 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 722 | 739 |
| 723 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 740 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 724 registration_->SetInstallingVersion(version_); | 741 registration_->SetInstallingVersion(version_); |
| 725 registration_->set_last_update_check(GetYesterday()); | 742 registration_->set_last_update_check(GetYesterday()); |
| 726 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); | 743 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); |
| 727 base::RunLoop().RunUntilIdle(); | 744 base::RunLoop().RunUntilIdle(); |
| 728 | 745 |
| 729 EXPECT_EQ(SERVICE_WORKER_OK, status); | 746 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 730 EXPECT_TRUE(version_->stale_time_.is_null()); | 747 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 731 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 748 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 732 } | 749 } |
| 733 | 750 |
| 734 // Test that staleness is detected when starting a worker. | 751 // Test that staleness is detected when starting a worker. |
| 735 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { | 752 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { |
| 736 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 753 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 737 | 754 |
| 738 // Starting the worker marks it as stale. | 755 // Starting the worker marks it as stale. |
| 739 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 756 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 740 registration_->SetActiveVersion(version_); | 757 registration_->SetActiveVersion(version_); |
| 741 registration_->set_last_update_check(GetYesterday()); | 758 registration_->set_last_update_check(GetYesterday()); |
| 742 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 759 SimulateDispatchEvent(); |
| 743 std::string()); | |
| 744 base::RunLoop().RunUntilIdle(); | |
| 745 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 746 EXPECT_FALSE(version_->stale_time_.is_null()); | 760 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 747 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 761 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 748 | 762 |
| 749 // Update is actually scheduled after the worker stops. | 763 // Update is actually scheduled after the worker stops. |
| 750 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 764 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
| 751 base::RunLoop().RunUntilIdle(); | 765 base::RunLoop().RunUntilIdle(); |
| 752 EXPECT_EQ(SERVICE_WORKER_OK, status); | 766 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 753 EXPECT_TRUE(version_->stale_time_.is_null()); | 767 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 754 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 768 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 755 } | 769 } |
| 756 | 770 |
| 757 // Test that staleness is detected on a running worker. | 771 // Test that staleness is detected on a running worker. |
| 758 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { | 772 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { |
| 759 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | |
| 760 | |
| 761 // Start a fresh worker. | 773 // Start a fresh worker. |
| 762 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 774 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 763 registration_->SetActiveVersion(version_); | 775 registration_->SetActiveVersion(version_); |
| 764 registration_->set_last_update_check(base::Time::Now()); | 776 registration_->set_last_update_check(base::Time::Now()); |
| 765 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), | 777 SimulateDispatchEvent(); |
| 766 std::string()); | |
| 767 base::RunLoop().RunUntilIdle(); | |
| 768 EXPECT_EQ(SERVICE_WORKER_OK, status); | |
| 769 EXPECT_TRUE(version_->stale_time_.is_null()); | 778 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 770 | 779 |
| 771 // Simulate it running for a day. It will be marked stale. | 780 // Simulate it running for a day. It will be marked stale. |
| 772 registration_->set_last_update_check(GetYesterday()); | 781 registration_->set_last_update_check(GetYesterday()); |
| 773 version_->OnTimeoutTimer(); | 782 version_->OnTimeoutTimer(); |
| 774 EXPECT_FALSE(version_->stale_time_.is_null()); | 783 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 775 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 784 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 776 | 785 |
| 777 // Simulate it running for past the wait threshold. The update will be | 786 // Simulate it running for past the wait threshold. The update will be |
| 778 // scheduled. | 787 // scheduled. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 790 // Make a stale worker. | 799 // Make a stale worker. |
| 791 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 800 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 792 registration_->SetActiveVersion(version_); | 801 registration_->SetActiveVersion(version_); |
| 793 registration_->set_last_update_check(GetYesterday()); | 802 registration_->set_last_update_check(GetYesterday()); |
| 794 base::TimeTicks stale_time = | 803 base::TimeTicks stale_time = |
| 795 base::TimeTicks::Now() - | 804 base::TimeTicks::Now() - |
| 796 base::TimeDelta::FromMinutes( | 805 base::TimeDelta::FromMinutes( |
| 797 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); | 806 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); |
| 798 version_->stale_time_ = stale_time; | 807 version_->stale_time_ = stale_time; |
| 799 | 808 |
| 809 // Make sure worker is running. |
| 810 version_->StartWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 811 base::RunLoop().RunUntilIdle(); |
| 812 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 813 |
| 800 // Stale time is not deferred. | 814 // Stale time is not deferred. |
| 801 version_->DispatchPushEvent( | 815 version_->StartRequest(ServiceWorkerMetrics::EventType::PUSH, |
| 802 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 816 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 803 version_->DispatchPushEvent( | 817 version_->StartRequest(ServiceWorkerMetrics::EventType::PUSH, |
| 804 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 818 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 805 EXPECT_EQ(stale_time, version_->stale_time_); | 819 EXPECT_EQ(stale_time, version_->stale_time_); |
| 806 | 820 |
| 807 // Timeout triggers the update. | 821 // Timeout triggers the update. |
| 808 version_->OnTimeoutTimer(); | 822 version_->OnTimeoutTimer(); |
| 809 EXPECT_TRUE(version_->stale_time_.is_null()); | 823 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 810 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 824 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 811 | 825 |
| 812 // Update timer is not deferred. | 826 // Update timer is not deferred. |
| 813 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); | 827 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); |
| 814 version_->DispatchPushEvent( | 828 int request_id1 = version_->StartRequest( |
| 815 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 829 ServiceWorkerMetrics::EventType::PUSH, |
| 816 version_->DispatchPushEvent( | 830 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 817 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 831 int request_id2 = version_->StartRequest( |
| 818 version_->DispatchPushEvent( | 832 ServiceWorkerMetrics::EventType::PUSH, |
| 819 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); | 833 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 834 int request_id3 = version_->StartRequest( |
| 835 ServiceWorkerMetrics::EventType::PUSH, |
| 836 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 837 EXPECT_TRUE(version_->FinishRequest(request_id1)); |
| 838 EXPECT_TRUE(version_->FinishRequest(request_id2)); |
| 839 EXPECT_TRUE(version_->FinishRequest(request_id3)); |
| 820 base::RunLoop().RunUntilIdle(); | 840 base::RunLoop().RunUntilIdle(); |
| 821 EXPECT_TRUE(version_->stale_time_.is_null()); | 841 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 822 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); | 842 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); |
| 823 } | 843 } |
| 824 | 844 |
| 825 TEST_F(ServiceWorkerWaitForeverInFetchTest, RequestTimeout) { | 845 TEST_F(ServiceWorkerWaitForeverInFetchTest, RequestTimeout) { |
| 826 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 846 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 827 | 847 |
| 828 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 848 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 829 version_->DispatchFetchEvent(ServiceWorkerFetchRequest(), | 849 version_->DispatchFetchEvent(ServiceWorkerFetchRequest(), |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 | 1358 |
| 1339 // Verify correct response was received. | 1359 // Verify correct response was received. |
| 1340 EXPECT_EQ(request_id1, received_request_id1); | 1360 EXPECT_EQ(request_id1, received_request_id1); |
| 1341 EXPECT_EQ(request_id2, received_request_id2); | 1361 EXPECT_EQ(request_id2, received_request_id2); |
| 1342 EXPECT_EQ(reply1, received_data1); | 1362 EXPECT_EQ(reply1, received_data1); |
| 1343 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1363 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1344 EXPECT_TRUE(version_->FinishRequest(request_id1)); | 1364 EXPECT_TRUE(version_->FinishRequest(request_id1)); |
| 1345 } | 1365 } |
| 1346 | 1366 |
| 1347 } // namespace content | 1367 } // namespace content |
| OLD | NEW |