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

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

Issue 2787883003: [ServiceWorker] Add EmbeddedWorkerInstanceHost Interface. (Closed)
Patch Set: Fix test: ServiceWorkerContextTest.UnregisterMultiple Created 3 years, 8 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 #include <tuple> 6 #include <tuple>
7 7
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 switch (result) { 111 switch (result) {
112 case blink::WebServiceWorkerEventResultCompleted: 112 case blink::WebServiceWorkerEventResultCompleted:
113 return SERVICE_WORKER_OK; 113 return SERVICE_WORKER_OK;
114 case blink::WebServiceWorkerEventResultRejected: 114 case blink::WebServiceWorkerEventResultRejected:
115 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED; 115 return SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED;
116 } 116 }
117 NOTREACHED() << "Got invalid result: " << result; 117 NOTREACHED() << "Got invalid result: " << result;
118 return SERVICE_WORKER_ERROR_FAILED; 118 return SERVICE_WORKER_ERROR_FAILED;
119 } 119 }
120 120
121 void NestedLoopRunUntilIdle() {
122 base::MessageLoop::ScopedNestableTaskAllower nestable_allower(
123 base::MessageLoop::current());
124 base::RunLoop().RunUntilIdle();
125 }
126
121 } // namespace 127 } // namespace
122 128
123 class ServiceWorkerJobTest : public testing::Test { 129 class ServiceWorkerJobTest : public testing::Test {
124 public: 130 public:
125 ServiceWorkerJobTest() 131 ServiceWorkerJobTest()
126 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} 132 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {}
127 133
128 void SetUp() override { 134 void SetUp() override {
129 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); 135 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath()));
130 } 136 }
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 scoped_refptr<ServiceWorkerRegistration> new_registration_by_pattern = 378 scoped_refptr<ServiceWorkerRegistration> new_registration_by_pattern =
373 FindRegistrationForPattern(pattern); 379 FindRegistrationForPattern(pattern);
374 380
375 ASSERT_EQ(new_registration, old_registration); 381 ASSERT_EQ(new_registration, old_registration);
376 } 382 }
377 383
378 class FailToStartWorkerTestHelper : public EmbeddedWorkerTestHelper { 384 class FailToStartWorkerTestHelper : public EmbeddedWorkerTestHelper {
379 public: 385 public:
380 FailToStartWorkerTestHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} 386 FailToStartWorkerTestHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {}
381 387
382 void OnStartWorker( 388 void OnStartWorker(int embedded_worker_id,
383 int embedded_worker_id, 389 int64_t service_worker_version_id,
384 int64_t service_worker_version_id, 390 const GURL& scope,
385 const GURL& scope, 391 const GURL& script_url,
386 const GURL& script_url, 392 bool pause_after_download,
387 bool pause_after_download, 393 mojom::ServiceWorkerEventDispatcherRequest request,
388 mojom::ServiceWorkerEventDispatcherRequest request) override { 394 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo
389 EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); 395 instance_host) override {
390 registry()->OnWorkerStopped(worker->process_id(), embedded_worker_id); 396 mojom::EmbeddedWorkerInstanceHostAssociatedPtr instance_host_ptr;
397 instance_host_ptr.Bind(std::move(instance_host));
398 instance_host_ptr->OnStopped();
399 NestedLoopRunUntilIdle();
391 } 400 }
392 }; 401 };
393 402
394 TEST_F(ServiceWorkerJobTest, Register_FailToStartWorker) { 403 TEST_F(ServiceWorkerJobTest, Register_FailToStartWorker) {
395 helper_.reset(new FailToStartWorkerTestHelper); 404 helper_.reset(new FailToStartWorkerTestHelper);
396 405
397 scoped_refptr<ServiceWorkerRegistration> registration = 406 scoped_refptr<ServiceWorkerRegistration> registration =
398 RunRegisterJob(GURL("http://www.example.com/"), 407 RunRegisterJob(GURL("http://www.example.com/"),
399 GURL("http://www.example.com/service_worker.js"), 408 GURL("http://www.example.com/service_worker.js"),
400 SERVICE_WORKER_ERROR_START_WORKER_FAILED); 409 SERVICE_WORKER_ERROR_START_WORKER_FAILED);
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
833 EXPECT_TRUE(called); 842 EXPECT_TRUE(called);
834 EXPECT_TRUE(registration.get()); 843 EXPECT_TRUE(registration.get());
835 EXPECT_TRUE(registration->active_version()); 844 EXPECT_TRUE(registration->active_version());
836 EXPECT_FALSE(registration->installing_version()); 845 EXPECT_FALSE(registration->installing_version());
837 EXPECT_FALSE(registration->waiting_version()); 846 EXPECT_FALSE(registration->waiting_version());
838 registration_ = registration; 847 registration_ = registration;
839 return registration; 848 return registration;
840 } 849 }
841 850
842 // EmbeddedWorkerTestHelper overrides 851 // EmbeddedWorkerTestHelper overrides
843 void OnStartWorker( 852 void OnStartWorker(int embedded_worker_id,
844 int embedded_worker_id, 853 int64_t version_id,
845 int64_t version_id, 854 const GURL& scope,
846 const GURL& scope, 855 const GURL& script,
847 const GURL& script, 856 bool pause_after_download,
848 bool pause_after_download, 857 mojom::ServiceWorkerEventDispatcherRequest request,
849 mojom::ServiceWorkerEventDispatcherRequest request) override { 858 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo
859 instance_host) override {
850 const std::string kMockScriptBody = "mock_script"; 860 const std::string kMockScriptBody = "mock_script";
851 const uint64_t kMockScriptSize = 19284; 861 const uint64_t kMockScriptSize = 19284;
852 ServiceWorkerVersion* version = context()->GetLiveVersion(version_id); 862 ServiceWorkerVersion* version = context()->GetLiveVersion(version_id);
853 ServiceWorkerRegistration* registration = 863 ServiceWorkerRegistration* registration =
854 context()->GetLiveRegistration(version->registration_id()); 864 context()->GetLiveRegistration(version->registration_id());
855 bool is_update = registration->active_version() && 865 bool is_update = registration->active_version() &&
856 version != registration->active_version(); 866 version != registration->active_version();
857 867
858 ASSERT_TRUE(version); 868 ASSERT_TRUE(version);
859 version->AddListener(this); 869 version->AddListener(this);
(...skipping 17 matching lines...) Expand all
877 version->SetMainScriptHttpResponseInfo( 887 version->SetMainScriptHttpResponseInfo(
878 EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); 888 EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
879 } else { 889 } else {
880 if (script.GetOrigin() == kNoChangeOrigin) { 890 if (script.GetOrigin() == kNoChangeOrigin) {
881 // Simulate fetching the updated script and finding it's identical to 891 // Simulate fetching the updated script and finding it's identical to
882 // the incumbent. 892 // the incumbent.
883 version->script_cache_map()->NotifyFinishedCaching( 893 version->script_cache_map()->NotifyFinishedCaching(
884 script, kMockScriptSize, net::ERR_FILE_EXISTS, std::string()); 894 script, kMockScriptSize, net::ERR_FILE_EXISTS, std::string());
885 version->SetMainScriptHttpResponseInfo( 895 version->SetMainScriptHttpResponseInfo(
886 EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); 896 EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
887 SimulateWorkerScriptLoaded(embedded_worker_id); 897
898 mojom::EmbeddedWorkerInstanceHostAssociatedPtr instance_host_ptr;
899 instance_host_ptr.Bind(std::move(instance_host));
900 instance_host_ptr->OnScriptLoaded();
901 NestedLoopRunUntilIdle();
888 return; 902 return;
889 } 903 }
890 904
891 // Spoof caching the script for the new version. 905 // Spoof caching the script for the new version.
892 WriteStringResponse(storage(), resource_id, "mock_different_script"); 906 WriteStringResponse(storage(), resource_id, "mock_different_script");
893 version->script_cache_map()->NotifyFinishedCaching( 907 version->script_cache_map()->NotifyFinishedCaching(
894 script, kMockScriptSize, net::OK, std::string()); 908 script, kMockScriptSize, net::OK, std::string());
895 version->SetMainScriptHttpResponseInfo( 909 version->SetMainScriptHttpResponseInfo(
896 EmbeddedWorkerTestHelper::CreateHttpResponseInfo()); 910 EmbeddedWorkerTestHelper::CreateHttpResponseInfo());
897 } 911 }
898 912
899 EmbeddedWorkerTestHelper::OnStartWorker(embedded_worker_id, version_id, 913 EmbeddedWorkerTestHelper::OnStartWorker(
900 scope, script, pause_after_download, 914 embedded_worker_id, version_id, scope, script, pause_after_download,
901 std::move(request)); 915 std::move(request), std::move(instance_host));
902 } 916 }
903 917
904 void OnResumeAfterDownload(int embedded_worker_id) override { 918 void OnResumeAfterDownload(int embedded_worker_id) override {
905 if (!force_start_worker_failure_) { 919 if (!force_start_worker_failure_) {
906 EmbeddedWorkerTestHelper::OnResumeAfterDownload(embedded_worker_id); 920 EmbeddedWorkerTestHelper::OnResumeAfterDownload(embedded_worker_id);
907 } else { 921 } else {
908 SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id); 922 SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id,
923 GetNextProviderId());
909 SimulateWorkerScriptEvaluated(embedded_worker_id, false); 924 SimulateWorkerScriptEvaluated(embedded_worker_id, false);
910 } 925 }
911 } 926 }
912 927
913 // ServiceWorkerRegistration::Listener overrides 928 // ServiceWorkerRegistration::Listener overrides
914 void OnVersionAttributesChanged( 929 void OnVersionAttributesChanged(
915 ServiceWorkerRegistration* registration, 930 ServiceWorkerRegistration* registration,
916 ChangedVersionAttributesMask changed_mask, 931 ChangedVersionAttributesMask changed_mask,
917 const ServiceWorkerRegistrationInfo& info) override { 932 const ServiceWorkerRegistrationInfo& info) override {
918 AttributeChangeLogEntry entry; 933 AttributeChangeLogEntry entry;
(...skipping 27 matching lines...) Expand all
946 bool force_start_worker_failure_ = false; 961 bool force_start_worker_failure_ = false;
947 }; 962 };
948 963
949 // Helper class for update tests that evicts the active version when the update 964 // Helper class for update tests that evicts the active version when the update
950 // worker is about to be started. 965 // worker is about to be started.
951 class EvictIncumbentVersionHelper : public UpdateJobTestHelper { 966 class EvictIncumbentVersionHelper : public UpdateJobTestHelper {
952 public: 967 public:
953 EvictIncumbentVersionHelper() {} 968 EvictIncumbentVersionHelper() {}
954 ~EvictIncumbentVersionHelper() override {} 969 ~EvictIncumbentVersionHelper() override {}
955 970
956 void OnStartWorker( 971 void OnStartWorker(int embedded_worker_id,
957 int embedded_worker_id, 972 int64_t version_id,
958 int64_t version_id, 973 const GURL& scope,
959 const GURL& scope, 974 const GURL& script,
960 const GURL& script, 975 bool pause_after_download,
961 bool pause_after_download, 976 mojom::ServiceWorkerEventDispatcherRequest request,
962 mojom::ServiceWorkerEventDispatcherRequest request) override { 977 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo
978 instance_host) override {
963 ServiceWorkerVersion* version = context()->GetLiveVersion(version_id); 979 ServiceWorkerVersion* version = context()->GetLiveVersion(version_id);
964 ServiceWorkerRegistration* registration = 980 ServiceWorkerRegistration* registration =
965 context()->GetLiveRegistration(version->registration_id()); 981 context()->GetLiveRegistration(version->registration_id());
966 bool is_update = registration->active_version() && 982 bool is_update = registration->active_version() &&
967 version != registration->active_version(); 983 version != registration->active_version();
968 if (is_update) { 984 if (is_update) {
969 // Evict the incumbent worker. 985 // Evict the incumbent worker.
970 ASSERT_FALSE(registration->waiting_version()); 986 ASSERT_FALSE(registration->waiting_version());
971 registration->DeleteVersion( 987 registration->DeleteVersion(
972 make_scoped_refptr(registration->active_version())); 988 make_scoped_refptr(registration->active_version()));
973 } 989 }
974 UpdateJobTestHelper::OnStartWorker(embedded_worker_id, version_id, scope, 990 UpdateJobTestHelper::OnStartWorker(
975 script, pause_after_download, 991 embedded_worker_id, version_id, scope, script, pause_after_download,
976 std::move(request)); 992 std::move(request), std::move(instance_host));
977 } 993 }
978 994
979 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override { 995 void OnRegistrationFailed(ServiceWorkerRegistration* registration) override {
980 registration_failed_ = true; 996 registration_failed_ = true;
981 } 997 }
982 998
983 bool registration_failed_ = false; 999 bool registration_failed_ = false;
984 }; 1000 };
985 1001
986 } // namespace 1002 } // namespace
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1637 public: 1653 public:
1638 explicit CheckPauseAfterDownloadEmbeddedWorkerInstanceClient( 1654 explicit CheckPauseAfterDownloadEmbeddedWorkerInstanceClient(
1639 base::WeakPtr<EmbeddedWorkerTestHelper> helper) 1655 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
1640 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {} 1656 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {}
1641 int num_of_startworker() const { return num_of_startworker_; } 1657 int num_of_startworker() const { return num_of_startworker_; }
1642 void set_next_pause_after_download(bool expectation) { 1658 void set_next_pause_after_download(bool expectation) {
1643 next_pause_after_download_ = expectation; 1659 next_pause_after_download_ = expectation;
1644 } 1660 }
1645 1661
1646 protected: 1662 protected:
1647 void StartWorker( 1663 void StartWorker(const EmbeddedWorkerStartParams& params,
1648 const EmbeddedWorkerStartParams& params, 1664 mojom::ServiceWorkerEventDispatcherRequest request,
1649 mojom::ServiceWorkerEventDispatcherRequest request) override { 1665 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo
1666 instance_host) override {
1650 ASSERT_TRUE(next_pause_after_download_.has_value()); 1667 ASSERT_TRUE(next_pause_after_download_.has_value());
1651 EXPECT_EQ(next_pause_after_download_.value(), params.pause_after_download); 1668 EXPECT_EQ(next_pause_after_download_.value(), params.pause_after_download);
1652 num_of_startworker_++; 1669 num_of_startworker_++;
1653 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker( 1670 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker(
1654 params, std::move(request)); 1671 params, std::move(request), std::move(instance_host));
1655 } 1672 }
1656 1673
1657 private: 1674 private:
1658 base::Optional<bool> next_pause_after_download_; 1675 base::Optional<bool> next_pause_after_download_;
1659 int num_of_startworker_ = 0; 1676 int num_of_startworker_ = 0;
1660 DISALLOW_COPY_AND_ASSIGN(CheckPauseAfterDownloadEmbeddedWorkerInstanceClient); 1677 DISALLOW_COPY_AND_ASSIGN(CheckPauseAfterDownloadEmbeddedWorkerInstanceClient);
1661 }; 1678 };
1662 1679
1663 TEST_F(ServiceWorkerJobTest, Update_PauseAfterDownload) { 1680 TEST_F(ServiceWorkerJobTest, Update_PauseAfterDownload) {
1664 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper; 1681 UpdateJobTestHelper* update_helper = new UpdateJobTestHelper;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 // should not be promoted to ACTIVATED because failure occur 1754 // should not be promoted to ACTIVATED because failure occur
1738 // during shutdown. 1755 // during shutdown.
1739 runner->RunUntilIdle(); 1756 runner->RunUntilIdle();
1740 base::RunLoop().RunUntilIdle(); 1757 base::RunLoop().RunUntilIdle();
1741 EXPECT_EQ(new_version.get(), registration->active_version()); 1758 EXPECT_EQ(new_version.get(), registration->active_version());
1742 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status()); 1759 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, new_version->status());
1743 registration->RemoveListener(update_helper); 1760 registration->RemoveListener(update_helper);
1744 } 1761 }
1745 1762
1746 } // namespace content 1763 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698