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 6c8455ed5ca8c06ed9ac4128d1f1de3c3d0f0fc8..845c274b86e51f55078d2fa4c5d0bba7220a02ed 100644 |
--- a/content/browser/site_instance_impl_unittest.cc |
+++ b/content/browser/site_instance_impl_unittest.cc |
@@ -843,4 +843,70 @@ TEST_F(SiteInstanceTest, DefaultSubframeSiteInstance) { |
EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); |
} |
+TEST_F(SiteInstanceTest, IsolatedOrigins) { |
+ GURL foo_url("http://www.foo.com"); |
+ GURL isolated_foo_url("http://isolated.foo.com"); |
+ GURL isolated_bar_url("http://isolated.bar.com"); |
+ |
+ auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); |
+ |
+ EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); |
+ |
+ policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); |
+ EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
+ EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); |
+ EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(GURL("http://foo.com")))); |
+ EXPECT_FALSE( |
+ policy->IsIsolatedOrigin(url::Origin(GURL("http://www.bar.com")))); |
+ EXPECT_FALSE( |
+ 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))); |
+ |
+ // IsSameWebSite should compare origins rather than sites if either URL is an |
+ // isolated origin. |
+ 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, isolated_foo_url, isolated_bar_url)); |
+ EXPECT_TRUE( |
+ SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, isolated_foo_url)); |
+ |
+ // Ensure blob and filesystem URLs with isolated origins are compared |
+ // correctly. |
+ GURL isolated_blob_foo_url("blob:http://isolated.foo.com/uuid"); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, |
+ isolated_blob_foo_url)); |
+ GURL isolated_filesystem_foo_url("filesystem:http://isolated.foo.com/bar/"); |
+ EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, |
+ isolated_filesystem_foo_url)); |
+ |
+ // The site URL for an isolated origin should be the full origin rather than |
+ // eTLD+1. |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, isolated_foo_url)); |
+ EXPECT_EQ(isolated_bar_url, |
+ SiteInstance::GetSiteForURL(nullptr, isolated_bar_url)); |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, isolated_blob_foo_url)); |
+ EXPECT_EQ(isolated_foo_url, |
+ SiteInstance::GetSiteForURL(nullptr, isolated_filesystem_foo_url)); |
+ |
+ // Isolated origins always require a dedicated process. |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, isolated_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, isolated_bar_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, isolated_blob_foo_url)); |
+ EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
+ nullptr, isolated_filesystem_foo_url)); |
+} |
+ |
} // namespace content |