OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/site_instance_impl.h" | 5 #include "content/browser/site_instance_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <vector> | 10 #include <vector> |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 main_instance = nullptr; | 836 main_instance = nullptr; |
837 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); | 837 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); |
838 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); | 838 EXPECT_EQ(0, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); |
839 | 839 |
840 // Free the subframe instance, which should free the browsing instance. | 840 // Free the subframe instance, which should free the browsing instance. |
841 subframe_instance = nullptr; | 841 subframe_instance = nullptr; |
842 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); | 842 EXPECT_EQ(1, browser_client()->GetAndClearSiteInstanceDeleteCount()); |
843 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); | 843 EXPECT_EQ(1, browser_client()->GetAndClearBrowsingInstanceDeleteCount()); |
844 } | 844 } |
845 | 845 |
| 846 TEST_F(SiteInstanceTest, IsolatedOrigins) { |
| 847 GURL foo_url("http://www.foo.com"); |
| 848 GURL isolated_foo_url("http://isolated.foo.com"); |
| 849 GURL isolated_bar_url("http://isolated.bar.com"); |
| 850 |
| 851 auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); |
| 852 |
| 853 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
| 854 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); |
| 855 |
| 856 policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); |
| 857 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
| 858 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); |
| 859 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(GURL("http://foo.com")))); |
| 860 EXPECT_FALSE( |
| 861 policy->IsIsolatedOrigin(url::Origin(GURL("http://www.bar.com")))); |
| 862 EXPECT_FALSE( |
| 863 policy->IsIsolatedOrigin(url::Origin(GURL("https://isolated.foo.com")))); |
| 864 EXPECT_FALSE(policy->IsIsolatedOrigin( |
| 865 url::Origin(GURL("http://isolated.foo.com:12345")))); |
| 866 EXPECT_FALSE(policy->IsIsolatedOrigin( |
| 867 url::Origin(GURL("http://bar.isolated.foo.com")))); |
| 868 |
| 869 policy->AddIsolatedOrigin(url::Origin(isolated_bar_url)); |
| 870 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_bar_url))); |
| 871 |
| 872 // IsSameWebSite should compare origins rather than sites if either URL is an |
| 873 // isolated origin. |
| 874 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); |
| 875 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, foo_url)); |
| 876 EXPECT_FALSE( |
| 877 SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, isolated_bar_url)); |
| 878 EXPECT_TRUE( |
| 879 SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, isolated_foo_url)); |
| 880 |
| 881 // Ensure blob and filesystem URLs with isolated origins are compared |
| 882 // correctly. |
| 883 GURL isolated_blob_foo_url("blob:http://isolated.foo.com/uuid"); |
| 884 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, |
| 885 isolated_blob_foo_url)); |
| 886 GURL isolated_filesystem_foo_url("filesystem:http://isolated.foo.com/bar/"); |
| 887 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, |
| 888 isolated_filesystem_foo_url)); |
| 889 |
| 890 // The site URL for an isolated origin should be the full origin rather than |
| 891 // eTLD+1. |
| 892 EXPECT_EQ(isolated_foo_url, |
| 893 SiteInstance::GetSiteForURL(nullptr, isolated_foo_url)); |
| 894 EXPECT_EQ(isolated_bar_url, |
| 895 SiteInstance::GetSiteForURL(nullptr, isolated_bar_url)); |
| 896 EXPECT_EQ(isolated_foo_url, |
| 897 SiteInstance::GetSiteForURL(nullptr, isolated_blob_foo_url)); |
| 898 EXPECT_EQ(isolated_foo_url, |
| 899 SiteInstance::GetSiteForURL(nullptr, isolated_filesystem_foo_url)); |
| 900 |
| 901 // Isolated origins always require a dedicated process. |
| 902 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
| 903 nullptr, isolated_foo_url)); |
| 904 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
| 905 nullptr, isolated_bar_url)); |
| 906 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
| 907 nullptr, isolated_blob_foo_url)); |
| 908 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
| 909 nullptr, isolated_filesystem_foo_url)); |
| 910 } |
| 911 |
846 } // namespace content | 912 } // namespace content |
OLD | NEW |