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

Unified Diff: content/browser/service_worker/service_worker_provider_host_unittest.cc

Issue 2638313002: Manage ServiceWorkerDispatcherHost in ServiceWorkerContextCore (Closed)
Patch Set: Remove a break line Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_provider_host_unittest.cc
diff --git a/content/browser/service_worker/service_worker_provider_host_unittest.cc b/content/browser/service_worker/service_worker_provider_host_unittest.cc
index 36381affadde29b0d594146725220f44fa1125e6..a07fe0a873dce3a20a90026b9cd3e8b40e5fdd90 100644
--- a/content/browser/service_worker/service_worker_provider_host_unittest.cc
+++ b/content/browser/service_worker/service_worker_provider_host_unittest.cc
@@ -55,26 +55,6 @@ class ServiceWorkerProviderHostTest : public testing::Test {
GURL("https://www.example.com/example"), 2L, context_->AsWeakPtr());
registration3_ = new ServiceWorkerRegistration(
GURL("https://other.example.com/"), 3L, context_->AsWeakPtr());
-
- // Prepare provider hosts (for the same process).
- std::unique_ptr<ServiceWorkerProviderHost> host1(
- new ServiceWorkerProviderHost(
- helper_->mock_render_process_id(), MSG_ROUTING_NONE,
- 1 /* provider_id */, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
- ServiceWorkerProviderHost::FrameSecurityLevel::SECURE,
- context_->AsWeakPtr(), NULL));
- host1->SetDocumentUrl(GURL("https://www.example.com/example1.html"));
- std::unique_ptr<ServiceWorkerProviderHost> host2(
- new ServiceWorkerProviderHost(
- helper_->mock_render_process_id(), MSG_ROUTING_NONE,
- 2 /* provider_id */, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
- ServiceWorkerProviderHost::FrameSecurityLevel::SECURE,
- context_->AsWeakPtr(), NULL));
- host2->SetDocumentUrl(GURL("https://www.example.com/example2.html"));
- provider_host1_ = host1->AsWeakPtr();
- provider_host2_ = host2->AsWeakPtr();
- context_->AddProviderHost(base::WrapUnique(host1.release()));
- context_->AddProviderHost(base::WrapUnique(host2.release()));
}
void TearDown() override {
@@ -90,14 +70,26 @@ class ServiceWorkerProviderHostTest : public testing::Test {
return context_->process_manager()->PatternHasProcessToRun(pattern);
}
+ ServiceWorkerProviderHost* CreateProviderHost(
+ const GURL& document_url,
+ bool is_parent_frame_secure = true) {
falken 2017/02/08 06:53:51 Let's avoid the default param and add a CreateProv
shimazu 2017/02/13 03:25:56 Done.
+ static int provider_id = 1;
+ std::unique_ptr<ServiceWorkerProviderHost> host =
+ CreateProviderHostForWindow(helper_->mock_render_process_id(),
+ provider_id++, is_parent_frame_secure,
+ helper_->context()->AsWeakPtr());
+ ServiceWorkerProviderHost* host_raw = host.get();
+ host->SetDocumentUrl(document_url);
+ context_->AddProviderHost(std::move(host));
+ return host_raw;
+ }
+
TestBrowserThreadBundle thread_bundle_;
std::unique_ptr<EmbeddedWorkerTestHelper> helper_;
ServiceWorkerContextCore* context_;
scoped_refptr<ServiceWorkerRegistration> registration1_;
scoped_refptr<ServiceWorkerRegistration> registration2_;
scoped_refptr<ServiceWorkerRegistration> registration3_;
- base::WeakPtr<ServiceWorkerProviderHost> provider_host1_;
- base::WeakPtr<ServiceWorkerProviderHost> provider_host2_;
GURL script_url_;
ServiceWorkerTestContentClient test_content_client_;
TestContentBrowserClient test_content_browser_client_;
@@ -108,6 +100,11 @@ class ServiceWorkerProviderHostTest : public testing::Test {
};
TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) {
+ ServiceWorkerProviderHost* provider_host1 =
+ CreateProviderHost(GURL("https://www.example.com/example1.html"));
+ ServiceWorkerProviderHost* provider_host2 =
+ CreateProviderHost(GURL("https://www.example.com/example2.html"));
+
// Matching registrations have already been set by SetDocumentUrl.
ASSERT_TRUE(PatternHasProcessToRun(registration1_->pattern()));
@@ -115,93 +112,100 @@ TEST_F(ServiceWorkerProviderHostTest, PotentialRegistration_ProcessStatus) {
ASSERT_TRUE(PatternHasProcessToRun(registration2_->pattern()));
// Adding the same registration twice has no effect.
- provider_host1_->AddMatchingRegistration(registration1_.get());
+ provider_host1->AddMatchingRegistration(registration1_.get());
ASSERT_TRUE(PatternHasProcessToRun(registration1_->pattern()));
// Removing a matching registration will decrease the process refs for its
// pattern.
- provider_host1_->RemoveMatchingRegistration(registration1_.get());
+ provider_host1->RemoveMatchingRegistration(registration1_.get());
ASSERT_TRUE(PatternHasProcessToRun(registration1_->pattern()));
- provider_host2_->RemoveMatchingRegistration(registration1_.get());
+ provider_host2->RemoveMatchingRegistration(registration1_.get());
ASSERT_FALSE(PatternHasProcessToRun(registration1_->pattern()));
// Matching registration will be removed when moving out of scope
ASSERT_TRUE(PatternHasProcessToRun(registration2_->pattern())); // host1,2
ASSERT_FALSE(PatternHasProcessToRun(registration3_->pattern())); // no host
- provider_host1_->SetDocumentUrl(GURL("https://other.example.com/"));
+ provider_host1->SetDocumentUrl(GURL("https://other.example.com/"));
ASSERT_TRUE(PatternHasProcessToRun(registration2_->pattern())); // host2
ASSERT_TRUE(PatternHasProcessToRun(registration3_->pattern())); // host1
- provider_host2_->SetDocumentUrl(GURL("https://other.example.com/"));
+ provider_host2->SetDocumentUrl(GURL("https://other.example.com/"));
ASSERT_FALSE(PatternHasProcessToRun(registration2_->pattern())); // no host
ASSERT_TRUE(PatternHasProcessToRun(registration3_->pattern())); // host1,2
}
TEST_F(ServiceWorkerProviderHostTest, AssociatedRegistration_ProcessStatus) {
+ ServiceWorkerProviderHost* provider_host1 =
+ CreateProviderHost(GURL("https://www.example.com/example1.html"));
+
// Associating the registration will also increase the process refs for
// the registration's pattern.
- provider_host1_->AssociateRegistration(registration1_.get(),
- false /* notify_controllerchange */);
+ provider_host1->AssociateRegistration(registration1_.get(),
+ false /* notify_controllerchange */);
ASSERT_TRUE(PatternHasProcessToRun(registration1_->pattern()));
// Disassociating the registration shouldn't affect the process refs for
// the registration's pattern.
- provider_host1_->DisassociateRegistration();
+ provider_host1->DisassociateRegistration();
ASSERT_TRUE(PatternHasProcessToRun(registration1_->pattern()));
}
TEST_F(ServiceWorkerProviderHostTest, MatchRegistration) {
+ ServiceWorkerProviderHost* provider_host1 =
+ CreateProviderHost(GURL("https://www.example.com/example1.html"));
+
// Match registration should return the longest matching one.
- ASSERT_EQ(registration2_, provider_host1_->MatchRegistration());
- provider_host1_->RemoveMatchingRegistration(registration2_.get());
- ASSERT_EQ(registration1_, provider_host1_->MatchRegistration());
+ ASSERT_EQ(registration2_, provider_host1->MatchRegistration());
+ provider_host1->RemoveMatchingRegistration(registration2_.get());
+ ASSERT_EQ(registration1_, provider_host1->MatchRegistration());
// Should return nullptr after removing all matching registrations.
- provider_host1_->RemoveMatchingRegistration(registration1_.get());
- ASSERT_EQ(nullptr, provider_host1_->MatchRegistration());
+ provider_host1->RemoveMatchingRegistration(registration1_.get());
+ ASSERT_EQ(nullptr, provider_host1->MatchRegistration());
// SetDocumentUrl sets all of matching registrations
- provider_host1_->SetDocumentUrl(GURL("https://www.example.com/example1"));
- ASSERT_EQ(registration2_, provider_host1_->MatchRegistration());
- provider_host1_->RemoveMatchingRegistration(registration2_.get());
- ASSERT_EQ(registration1_, provider_host1_->MatchRegistration());
+ provider_host1->SetDocumentUrl(GURL("https://www.example.com/example1"));
+ ASSERT_EQ(registration2_, provider_host1->MatchRegistration());
+ provider_host1->RemoveMatchingRegistration(registration2_.get());
+ ASSERT_EQ(registration1_, provider_host1->MatchRegistration());
// SetDocumentUrl with another origin also updates matching registrations
- provider_host1_->SetDocumentUrl(GURL("https://other.example.com/example"));
- ASSERT_EQ(registration3_, provider_host1_->MatchRegistration());
- provider_host1_->RemoveMatchingRegistration(registration3_.get());
- ASSERT_EQ(nullptr, provider_host1_->MatchRegistration());
+ provider_host1->SetDocumentUrl(GURL("https://other.example.com/example"));
+ ASSERT_EQ(registration3_, provider_host1->MatchRegistration());
+ provider_host1->RemoveMatchingRegistration(registration3_.get());
+ ASSERT_EQ(nullptr, provider_host1->MatchRegistration());
}
TEST_F(ServiceWorkerProviderHostTest, ContextSecurity) {
- using FrameSecurityLevel = ServiceWorkerProviderHost::FrameSecurityLevel;
+ ServiceWorkerProviderHost* provider_host_secure_parent =
+ CreateProviderHost(GURL("https://www.example.com/example1.html"), true);
+ ServiceWorkerProviderHost* provider_host_insecure_parent =
+ CreateProviderHost(GURL("https://www.example.com/example1.html"), false);
// Insecure document URL.
- provider_host1_->SetDocumentUrl(GURL("http://host"));
- provider_host1_->parent_frame_security_level_ = FrameSecurityLevel::SECURE;
- EXPECT_FALSE(provider_host1_->IsContextSecureForServiceWorker());
+ provider_host_secure_parent->SetDocumentUrl(GURL("http://host"));
+ EXPECT_FALSE(provider_host_secure_parent->IsContextSecureForServiceWorker());
// Insecure parent frame.
- provider_host1_->SetDocumentUrl(GURL("https://host"));
- provider_host1_->parent_frame_security_level_ = FrameSecurityLevel::INSECURE;
- EXPECT_FALSE(provider_host1_->IsContextSecureForServiceWorker());
+ provider_host_insecure_parent->SetDocumentUrl(GURL("https://host"));
+ EXPECT_FALSE(
+ provider_host_insecure_parent->IsContextSecureForServiceWorker());
// Secure URL and parent frame.
- provider_host1_->SetDocumentUrl(GURL("https://host"));
- provider_host1_->parent_frame_security_level_ = FrameSecurityLevel::SECURE;
- EXPECT_TRUE(provider_host1_->IsContextSecureForServiceWorker());
+ provider_host_secure_parent->SetDocumentUrl(GURL("https://host"));
+ EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker());
// Exceptional service worker scheme.
GURL url(std::string(kServiceWorkerScheme) + "://host");
EXPECT_TRUE(url.is_valid());
- provider_host1_->SetDocumentUrl(url);
- provider_host1_->parent_frame_security_level_ = FrameSecurityLevel::SECURE;
EXPECT_FALSE(IsOriginSecure(url));
EXPECT_TRUE(OriginCanAccessServiceWorkers(url));
- EXPECT_TRUE(provider_host1_->IsContextSecureForServiceWorker());
+ provider_host_secure_parent->SetDocumentUrl(url);
+ EXPECT_TRUE(provider_host_secure_parent->IsContextSecureForServiceWorker());
// Exceptional service worker scheme with insecure parent frame.
- provider_host1_->parent_frame_security_level_ = FrameSecurityLevel::INSECURE;
- EXPECT_FALSE(provider_host1_->IsContextSecureForServiceWorker());
+ provider_host_insecure_parent->SetDocumentUrl(url);
+ EXPECT_FALSE(
+ provider_host_insecure_parent->IsContextSecureForServiceWorker());
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698