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

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

Powered by Google App Engine
This is Rietveld 408576698