Chromium Code Reviews| 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 |