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 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
898 policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); | 898 policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); |
899 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); | 899 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); |
900 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); | 900 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); |
901 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(GURL("http://foo.com")))); | 901 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(GURL("http://foo.com")))); |
902 EXPECT_FALSE( | 902 EXPECT_FALSE( |
903 policy->IsIsolatedOrigin(url::Origin(GURL("http://www.bar.com")))); | 903 policy->IsIsolatedOrigin(url::Origin(GURL("http://www.bar.com")))); |
904 EXPECT_FALSE( | 904 EXPECT_FALSE( |
905 policy->IsIsolatedOrigin(url::Origin(GURL("https://isolated.foo.com")))); | 905 policy->IsIsolatedOrigin(url::Origin(GURL("https://isolated.foo.com")))); |
906 EXPECT_FALSE(policy->IsIsolatedOrigin( | 906 EXPECT_FALSE(policy->IsIsolatedOrigin( |
907 url::Origin(GURL("http://isolated.foo.com:12345")))); | 907 url::Origin(GURL("http://isolated.foo.com:12345")))); |
908 EXPECT_FALSE(policy->IsIsolatedOrigin( | |
909 url::Origin(GURL("http://bar.isolated.foo.com")))); | |
910 | 908 |
911 policy->AddIsolatedOrigin(url::Origin(isolated_bar_url)); | 909 policy->AddIsolatedOrigin(url::Origin(isolated_bar_url)); |
912 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_bar_url))); | 910 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_bar_url))); |
913 | 911 |
914 // IsSameWebSite should compare origins rather than sites if either URL is an | 912 // IsSameWebSite should compare origins rather than sites if either URL is an |
915 // isolated origin. | 913 // isolated origin. |
916 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); | 914 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); |
917 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, foo_url)); | 915 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, foo_url)); |
918 EXPECT_FALSE( | 916 EXPECT_FALSE( |
919 SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, isolated_bar_url)); | 917 SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, isolated_bar_url)); |
(...skipping 22 matching lines...) Expand all Loading... | |
942 | 940 |
943 // Isolated origins always require a dedicated process. | 941 // Isolated origins always require a dedicated process. |
944 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | 942 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
945 nullptr, isolated_foo_url)); | 943 nullptr, isolated_foo_url)); |
946 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | 944 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
947 nullptr, isolated_bar_url)); | 945 nullptr, isolated_bar_url)); |
948 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | 946 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
949 nullptr, isolated_blob_foo_url)); | 947 nullptr, isolated_blob_foo_url)); |
950 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | 948 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( |
951 nullptr, isolated_filesystem_foo_url)); | 949 nullptr, isolated_filesystem_foo_url)); |
950 | |
951 // Cleanup. | |
952 policy->RemoveIsolatedOriginForTesting(url::Origin(isolated_foo_url)); | |
953 policy->RemoveIsolatedOriginForTesting(url::Origin(isolated_bar_url)); | |
954 } | |
955 | |
956 TEST_F(SiteInstanceTest, SubdomainOnIsolatedSite) { | |
957 GURL isolated_url("http://isolated.com"); | |
958 GURL foo_isolated_url("http://foo.isolated.com"); | |
959 | |
960 auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); | |
961 policy->AddIsolatedOrigin(url::Origin(isolated_url)); | |
962 | |
963 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_url))); | |
964 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(foo_isolated_url))); | |
965 EXPECT_FALSE( | |
966 policy->IsIsolatedOrigin(url::Origin(GURL("http://unisolated.com")))); | |
967 EXPECT_FALSE( | |
968 policy->IsIsolatedOrigin(url::Origin(GURL("http://isolated.foo.com")))); | |
969 // Wrong scheme. | |
970 EXPECT_FALSE( | |
971 policy->IsIsolatedOrigin(url::Origin(GURL("https://foo.isolated.com")))); | |
972 | |
973 // A new SiteInstance created for a subdomain on an isolated origin | |
974 // should use the isolated origin's host and not its own host as the site | |
975 // URL. | |
976 EXPECT_EQ(isolated_url, | |
977 SiteInstance::GetSiteForURL(nullptr, foo_isolated_url)); | |
978 | |
979 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
980 nullptr, foo_isolated_url)); | |
981 | |
982 EXPECT_TRUE( | |
983 SiteInstance::IsSameWebSite(nullptr, isolated_url, foo_isolated_url)); | |
984 EXPECT_TRUE( | |
985 SiteInstance::IsSameWebSite(nullptr, foo_isolated_url, isolated_url)); | |
986 | |
987 // Cleanup. | |
988 policy->RemoveIsolatedOriginForTesting(url::Origin(isolated_url)); | |
989 } | |
990 | |
991 TEST_F(SiteInstanceTest, SubdomainOnIsolatedOrigin) { | |
992 GURL foo_url("http://foo.com"); | |
993 GURL isolated_foo_url("http://isolated.foo.com"); | |
994 GURL bar_isolated_foo_url("http://bar.isolated.foo.com"); | |
995 GURL baz_isolated_foo_url("http://baz.isolated.foo.com"); | |
ncarter (slow)
2017/06/28 20:59:19
You might want to toss in a test somewhere that do
alexmos
2017/06/29 21:54:02
This is really interesting. I played around with
| |
996 | |
997 auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); | |
998 policy->AddIsolatedOrigin(url::Origin(isolated_foo_url)); | |
999 | |
1000 EXPECT_FALSE(policy->IsIsolatedOrigin(url::Origin(foo_url))); | |
1001 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(isolated_foo_url))); | |
1002 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(bar_isolated_foo_url))); | |
1003 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(baz_isolated_foo_url))); | |
1004 | |
1005 EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, foo_url)); | |
1006 EXPECT_EQ(isolated_foo_url, | |
1007 SiteInstance::GetSiteForURL(nullptr, isolated_foo_url)); | |
1008 EXPECT_EQ(isolated_foo_url, | |
1009 SiteInstance::GetSiteForURL(nullptr, bar_isolated_foo_url)); | |
1010 EXPECT_EQ(isolated_foo_url, | |
1011 SiteInstance::GetSiteForURL(nullptr, baz_isolated_foo_url)); | |
1012 | |
1013 if (!AreAllSitesIsolatedForTesting()) { | |
1014 EXPECT_FALSE( | |
1015 SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, foo_url)); | |
1016 } | |
1017 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
1018 nullptr, isolated_foo_url)); | |
1019 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
1020 nullptr, bar_isolated_foo_url)); | |
1021 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
1022 nullptr, baz_isolated_foo_url)); | |
1023 | |
1024 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, isolated_foo_url)); | |
1025 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, foo_url)); | |
1026 EXPECT_FALSE( | |
1027 SiteInstance::IsSameWebSite(nullptr, foo_url, bar_isolated_foo_url)); | |
1028 EXPECT_FALSE( | |
1029 SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, foo_url)); | |
1030 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, | |
1031 isolated_foo_url)); | |
1032 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, isolated_foo_url, | |
1033 bar_isolated_foo_url)); | |
1034 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, bar_isolated_foo_url, | |
1035 baz_isolated_foo_url)); | |
1036 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, baz_isolated_foo_url, | |
1037 bar_isolated_foo_url)); | |
1038 | |
1039 // Cleanup. | |
1040 policy->RemoveIsolatedOriginForTesting(url::Origin(isolated_foo_url)); | |
1041 } | |
1042 | |
1043 TEST_F(SiteInstanceTest, MultipleIsolatedOriginsWithCommonSite) { | |
1044 GURL foo_url("http://foo.com"); | |
1045 GURL bar_foo_url("http://bar.foo.com"); | |
1046 GURL baz_bar_foo_url("http://baz.bar.foo.com"); | |
1047 GURL qux_baz_bar_foo_url("http://qux.baz.bar.foo.com"); | |
1048 | |
1049 auto* policy = ChildProcessSecurityPolicyImpl::GetInstance(); | |
1050 policy->AddIsolatedOrigin(url::Origin(foo_url)); | |
1051 policy->AddIsolatedOrigin(url::Origin(baz_bar_foo_url)); | |
1052 | |
1053 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(foo_url))); | |
1054 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(bar_foo_url))); | |
1055 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(baz_bar_foo_url))); | |
1056 EXPECT_TRUE(policy->IsIsolatedOrigin(url::Origin(qux_baz_bar_foo_url))); | |
1057 | |
1058 EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, foo_url)); | |
1059 EXPECT_EQ(foo_url, SiteInstance::GetSiteForURL(nullptr, bar_foo_url)); | |
1060 EXPECT_EQ(baz_bar_foo_url, | |
1061 SiteInstance::GetSiteForURL(nullptr, baz_bar_foo_url)); | |
1062 EXPECT_EQ(baz_bar_foo_url, | |
1063 SiteInstance::GetSiteForURL(nullptr, qux_baz_bar_foo_url)); | |
1064 | |
1065 EXPECT_TRUE( | |
1066 SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, foo_url)); | |
1067 EXPECT_TRUE( | |
1068 SiteInstanceImpl::DoesSiteRequireDedicatedProcess(nullptr, bar_foo_url)); | |
1069 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
1070 nullptr, baz_bar_foo_url)); | |
1071 EXPECT_TRUE(SiteInstanceImpl::DoesSiteRequireDedicatedProcess( | |
1072 nullptr, qux_baz_bar_foo_url)); | |
1073 | |
1074 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, foo_url, bar_foo_url)); | |
1075 EXPECT_FALSE(SiteInstance::IsSameWebSite(nullptr, foo_url, baz_bar_foo_url)); | |
1076 EXPECT_FALSE( | |
1077 SiteInstance::IsSameWebSite(nullptr, foo_url, qux_baz_bar_foo_url)); | |
1078 | |
1079 EXPECT_FALSE( | |
1080 SiteInstance::IsSameWebSite(nullptr, bar_foo_url, baz_bar_foo_url)); | |
1081 EXPECT_FALSE( | |
1082 SiteInstance::IsSameWebSite(nullptr, bar_foo_url, qux_baz_bar_foo_url)); | |
1083 | |
1084 EXPECT_TRUE(SiteInstance::IsSameWebSite(nullptr, baz_bar_foo_url, | |
1085 qux_baz_bar_foo_url)); | |
1086 | |
1087 // Cleanup. | |
1088 policy->RemoveIsolatedOriginForTesting(url::Origin(foo_url)); | |
1089 policy->RemoveIsolatedOriginForTesting(url::Origin(baz_bar_foo_url)); | |
952 } | 1090 } |
953 | 1091 |
954 } // namespace content | 1092 } // namespace content |
OLD | NEW |