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