Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(864)

Side by Side Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 1579413004: Move push event dispatching out of ServiceWorkerVersion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Have a simplified combined StartRequest/DispatchEvent/FinishRequest method Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698