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

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: 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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698