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

Unified Diff: content/browser/site_instance_impl_unittest.cc

Issue 2831683002: Introduce support for origins that require process isolation. (Closed)
Patch Set: Rebase 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 side-by-side diff with in-line comments
Download patch
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 b79379debe987e5543587dec9734d8e7c59d1945..fda1d941ca9f0e00648b2c5b9b02e6f57d9fda97 100644
--- a/content/browser/site_instance_impl_unittest.cc
+++ b/content/browser/site_instance_impl_unittest.cc
@@ -841,4 +841,98 @@ 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");
Charlie Reis 2017/05/05 23:18:51 Let's add tests for bar.isolated.foo.com, too.
alexmos 2017/05/16 17:26:38 I've built support for keeping those in isolated.f
Charlie Reis 2017/05/19 00:10:18 Sounds good!
+
+ EXPECT_FALSE(
+ SiteInstanceImpl::IsIsolatedOrigin(url::Origin(isolated_foo_url)));
Charlie Reis 2017/05/05 23:18:51 Maybe check that IsSameWebsite for foo_url and iso
alexmos 2017/05/16 17:26:38 Done.
+
+ SiteInstanceImpl::AddIsolatedOrigin(url::Origin(isolated_foo_url));
+ EXPECT_TRUE(
+ SiteInstanceImpl::IsIsolatedOrigin(url::Origin(isolated_foo_url)));
+ EXPECT_FALSE(SiteInstanceImpl::IsIsolatedOrigin(url::Origin(foo_url)));
+ EXPECT_FALSE(
+ SiteInstanceImpl::IsIsolatedOrigin(url::Origin(GURL("http://foo.com"))));
+ EXPECT_FALSE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("http://www.bar.com"))));
+ EXPECT_FALSE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("https://isolated.foo.com"))));
+ EXPECT_FALSE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("http://isolated.foo.com:12345"))));
+ EXPECT_FALSE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("http://bar.isolated.foo.com"))));
+
+ SiteInstanceImpl::AddIsolatedOrigin(url::Origin(isolated_bar_url));
+ EXPECT_TRUE(
+ SiteInstanceImpl::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));
+}
+
+// Verifies parsing logic that extracts origins from --isolate-origins.
+TEST_F(SiteInstanceTest, IsolateOriginsFromCommandLine) {
+ // Invalid and unique origins are not permitted.
+ SiteInstanceImpl::AddIsolatedOriginsFromCommandLine("foo");
+ SiteInstanceImpl::AddIsolatedOriginsFromCommandLine("");
+ SiteInstanceImpl::AddIsolatedOriginsFromCommandLine("about:blank");
+ EXPECT_EQ(0U, SiteInstanceImpl::GetIsolatedOrigins()->size());
+
+ SiteInstanceImpl::AddIsolatedOriginsFromCommandLine(
+ "http://isolated.foo.com");
+ EXPECT_EQ(1U, SiteInstanceImpl::GetIsolatedOrigins()->size());
+ EXPECT_TRUE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("http://isolated.foo.com"))));
+
+ SiteInstanceImpl::AddIsolatedOriginsFromCommandLine(
+ "http://a.com,https://b.com,,https://c.com:8000");
+ EXPECT_EQ(4U, SiteInstanceImpl::GetIsolatedOrigins()->size());
+ EXPECT_TRUE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("http://isolated.foo.com"))));
+ EXPECT_TRUE(
+ SiteInstanceImpl::IsIsolatedOrigin(url::Origin(GURL("http://a.com"))));
+ EXPECT_TRUE(
+ SiteInstanceImpl::IsIsolatedOrigin(url::Origin(GURL("https://b.com"))));
+ EXPECT_TRUE(SiteInstanceImpl::IsIsolatedOrigin(
+ url::Origin(GURL("https://c.com:8000"))));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698