Index: content/browser/site_instance_impl_unittest.cc |
diff --git a/content/browser/site_instance_impl_unittest.cc b/content/browser/site_instance_impl_unittest.cc |
index 39246c9be642c82ea95c42d0daf7916b391cc30d..cb87a35a404ea3e6ffb883daba3a9af7b734d6f4 100644 |
--- a/content/browser/site_instance_impl_unittest.cc |
+++ b/content/browser/site_instance_impl_unittest.cc |
@@ -905,8 +905,6 @@ TEST_F(SiteInstanceTest, IsolatedOrigins) { |
policy->IsIsolatedOrigin(url::Origin(GURL("https://isolated.foo.com")))); |
EXPECT_FALSE(policy->IsIsolatedOrigin( |
url::Origin(GURL("http://isolated.foo.com:12345")))); |
- EXPECT_FALSE(policy->IsIsolatedOrigin( |
- url::Origin(GURL("http://bar.isolated.foo.com")))); |
policy->AddIsolatedOrigin(url::Origin(isolated_bar_url)); |
EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_bar_url))); |
@@ -949,6 +947,146 @@ TEST_F(SiteInstanceTest, IsolatedOrigins) { |
nullptr, isolated_blob_foo_url)); |
EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
nullptr, isolated_filesystem_foo_url)); |
+ |
+ // Cleanup. |
+ policy->RemoveIsolatedOrigin(url::Origin(isolated_foo_url)); |
+ policy->RemoveIsolatedOrigin(url::Origin(isolated_bar_url)); |
+} |
+ |
+TEST_F(SiteInstanceTest, SubdomainOnIsolatedSite) { |
+ GURL isolated_url("http://isolated.com"); |
+ GURL foo_isolated_url("http://foo.isolated.com"); |
+ |
+ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); |
+ policy->AddIsolatedOrigin(url::Origin(isolated_url)); |
+ |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(foo_isolated_url))); |
+ EXPECT_FALSE( |
+ policy->IsIsolatedOrigin(url::Origin(GURL("http://unisolated.com")))); |
+ EXPECT_FALSE( |
+ policy->IsIsolatedOrigin(url::Origin(GURL("http://isolated.foo.com")))); |
+ // Wrong scheme. |
+ EXPECT_FALSE( |
+ policy->IsIsolatedOrigin(url::Origin(GURL("https://foo.isolated.com")))); |
+ |
+ // A new SiteInstance created for a subdomain on an isolated origin |
+ // should use the isolated origin's host and not its own host as the site |
+ // URL. |
+ EXPECT_EQ(isolated_url, |
+ SiteInstance::GetSiteForURL(nullptr, foo_isolated_url)); |
+ |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, foo_isolated_url)); |
+ |
+ EXPECT_TRUE( |
+ SiteInstance::IsSameWebSite(nullptr, isolated_url, foo_isolated_url)); |
+ EXPECT_TRUE( |
+ SiteInstance::IsSameWebSite(nullptr, foo_isolated_url, isolated_url)); |
+ |
+ // Cleanup. |
+ policy->RemoveIsolatedOrigin(url::Origin(isolated_url)); |
+} |
+ |
+TEST_F(SiteInstanceTest, SubdomainOnIsolatedOrigin) { |
+ GURL foo_url("http://foo.com"); |
+ GURL isolated_foo_url("http://isolated.foo.com"); |
+ GURL bar_isolated_foo_url("http://bar.isolated.foo.com"); |
+ GURL baz_isolated_foo_url("http://baz.isolated.foo.com"); |
+ |
+ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); |
+ policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); |
+ |
+ EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(bar_isolated_foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(baz_isolated_foo_url))); |
+ |
+ EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, foo_url)); |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, isolated_foo_url)); |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, bar_isolated_foo_url)); |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, baz_isolated_foo_url)); |
+ |
+ if (!AreAllSitesIsolatedForTesting()) { |
+ EXPECT_FALSE( |
+ SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, foo_url)); |
+ } |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, bar_isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, baz_isolated_foo_url)); |
+ |
+ EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); |
+ EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, foo_url)); |
+ EXPECT_FALSE( |
+ SiteInstance::IsSameWebSite(nullptr, foo_url, bar_isolated_foo_url)); |
+ EXPECT_FALSE( |
+ SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, foo_url)); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, |
+ isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, |
+ bar_isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, |
+ baz_isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, baz_isolated_foo_url, |
+ bar_isolated_foo_url)); |
+ |
+ // Cleanup. |
+ policy->RemoveIsolatedOrigin(url::Origin(isolated_foo_url)); |
+} |
+ |
+TEST_F(SiteInstanceTest, MultipleIsolatedOriginsWithCommonSite) { |
+ GURL foo_url("http://foo.com"); |
+ GURL bar_foo_url("http://bar.foo.com"); |
+ GURL baz_bar_foo_url("http://baz.bar.foo.com"); |
+ GURL qux_baz_bar_foo_url("http://qux.baz.bar.foo.com"); |
+ |
+ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); |
+ policy->AddIsolatedOrigin(url::Origin(foo_url)); |
+ policy->AddIsolatedOrigin(url::Origin(baz_bar_foo_url)); |
+ |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(bar_foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(baz_bar_foo_url))); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(qux_baz_bar_foo_url))); |
+ |
+ EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, foo_url)); |
+ EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, bar_foo_url)); |
+ EXPECT_EQ(baz_bar_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, baz_bar_foo_url)); |
+ EXPECT_EQ(baz_bar_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, qux_baz_bar_foo_url)); |
+ |
+ EXPECT_TRUE( |
+ SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, foo_url)); |
+ EXPECT_TRUE( |
+ SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, bar_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, baz_bar_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, qux_baz_bar_foo_url)); |
+ |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, foo_url, bar_foo_url)); |
+ EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, baz_bar_foo_url)); |
+ EXPECT_FALSE( |
+ SiteInstance::IsSameWebSite(nullptr, foo_url, qux_baz_bar_foo_url)); |
+ |
+ EXPECT_FALSE( |
+ SiteInstance::IsSameWebSite(nullptr, bar_foo_url, baz_bar_foo_url)); |
+ EXPECT_FALSE( |
+ SiteInstance::IsSameWebSite(nullptr, bar_foo_url, qux_baz_bar_foo_url)); |
+ |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, baz_bar_foo_url, |
+ qux_baz_bar_foo_url)); |
+ |
+ // Cleanup. |
+ policy->RemoveIsolatedOrigin(url::Origin(foo_url)); |
+ policy->RemoveIsolatedOrigin(url::Origin(baz_bar_foo_url)); |
} |
} // namespace content |