OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chrome/browser/site_details.h" | 5 #include "chrome/browser/site_details.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 testing::Matcher<Bucket> matcherCast = matcher; | 158 testing::Matcher<Bucket> matcherCast = matcher; |
159 matcherCast.DescribeTo(os); | 159 matcherCast.DescribeTo(os); |
160 } | 160 } |
161 | 161 |
162 // Matches a container of histogram samples, for the common case where the | 162 // Matches a container of histogram samples, for the common case where the |
163 // histogram received just one sample. | 163 // histogram received just one sample. |
164 #define HasOneSample(x) ElementsAre(Sample(x, 1)) | 164 #define HasOneSample(x) ElementsAre(Sample(x, 1)) |
165 | 165 |
166 } // namespace | 166 } // namespace |
167 | 167 |
168 class SiteDetailsBrowserTest : public ExtensionBrowserTest, | 168 class SiteDetailsBrowserTest : public ExtensionBrowserTest { |
169 public testing::WithParamInterface<const char*> { | |
170 public: | 169 public: |
171 SiteDetailsBrowserTest() {} | 170 SiteDetailsBrowserTest() {} |
172 ~SiteDetailsBrowserTest() override {} | 171 ~SiteDetailsBrowserTest() override {} |
173 | 172 |
174 void SetUpCommandLine(base::CommandLine* command_line) override { | |
175 ExtensionBrowserTest::SetUpCommandLine(command_line); | |
176 std::string switch_name = GetParam(); | |
177 if (!switch_name.empty()) { | |
178 command_line->AppendSwitch(switch_name); | |
179 } | |
180 } | |
181 | |
182 void SetUpOnMainThread() override { | 173 void SetUpOnMainThread() override { |
183 host_resolver()->AddRule("*", "127.0.0.1"); | 174 host_resolver()->AddRule("*", "127.0.0.1"); |
184 | 175 |
185 // Add content/test/data so we can use cross_site_iframe_factory.html | 176 // Add content/test/data so we can use cross_site_iframe_factory.html |
186 base::FilePath test_data_dir; | 177 base::FilePath test_data_dir; |
187 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); | 178 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); |
188 embedded_test_server()->ServeFilesFromDirectory( | 179 embedded_test_server()->ServeFilesFromDirectory( |
189 test_data_dir.AppendASCII("content/test/data/")); | 180 test_data_dir.AppendASCII("content/test/data/")); |
190 ASSERT_TRUE(embedded_test_server()->Start()); | 181 ASSERT_TRUE(embedded_test_server()->Start()); |
191 } | 182 } |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 | 308 |
318 private: | 309 private: |
319 ScopedVector<TestExtensionDir> temp_dirs_; | 310 ScopedVector<TestExtensionDir> temp_dirs_; |
320 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest); | 311 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest); |
321 }; | 312 }; |
322 | 313 |
323 | 314 |
324 // Test the accuracy of SiteDetails process estimation, in the presence of | 315 // Test the accuracy of SiteDetails process estimation, in the presence of |
325 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs | 316 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs |
326 // in the same BrowsingInstance. | 317 // in the same BrowsingInstance. |
327 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ManyIframes) { | 318 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) { |
328 // Page with 14 nested oopifs across 9 sites (a.com through i.com). | 319 // Page with 14 nested oopifs across 9 sites (a.com through i.com). |
329 // None of these are https. | 320 // None of these are https. |
330 GURL abcdefghi_url = embedded_test_server()->GetURL( | 321 GURL abcdefghi_url = embedded_test_server()->GetURL( |
331 "a.com", | 322 "a.com", |
332 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); | 323 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); |
333 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); | 324 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); |
334 | 325 |
335 // Get the metrics. | 326 // Get the metrics. |
336 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 327 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
337 details->StartFetchAndWait(); | 328 details->StartFetchAndWait(); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 "SiteIsolation.ProxyCountPerBrowsingInstance"), | 603 "SiteIsolation.ProxyCountPerBrowsingInstance"), |
613 DependingOnPolicy( | 604 DependingOnPolicy( |
614 ElementsAre(Bucket(0, 3)), ElementsAre(Bucket(0, 3)), | 605 ElementsAre(Bucket(0, 3)), ElementsAre(Bucket(0, 3)), |
615 ElementsAre(Bucket(12, 1), Bucket(29, 1), Bucket(68, 1)))); | 606 ElementsAre(Bucket(12, 1), Bucket(29, 1), Bucket(68, 1)))); |
616 | 607 |
617 // This test doesn't navigate to any extensions URLs, so it should not be | 608 // This test doesn't navigate to any extensions URLs, so it should not be |
618 // in any of the field trial groups. | 609 // in any of the field trial groups. |
619 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); | 610 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); |
620 } | 611 } |
621 | 612 |
622 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensions) { | 613 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) { |
623 // We start on "about:blank", which should be credited with a process in this | 614 // We start on "about:blank", which should be credited with a process in this |
624 // case. | 615 // case. |
625 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 616 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
626 details->StartFetchAndWait(); | 617 details->StartFetchAndWait(); |
627 EXPECT_THAT(details->uma()->GetAllSamples( | 618 EXPECT_THAT(details->uma()->GetAllSamples( |
628 "SiteIsolation.CurrentRendererProcessCount"), | 619 "SiteIsolation.CurrentRendererProcessCount"), |
629 HasOneSample(GetRenderProcessCount())); | 620 HasOneSample(GetRenderProcessCount())); |
630 EXPECT_THAT(details->uma()->GetAllSamples( | 621 EXPECT_THAT(details->uma()->GetAllSamples( |
631 "SiteIsolation.IsolateNothingProcessCountEstimate"), | 622 "SiteIsolation.IsolateNothingProcessCountEstimate"), |
632 HasOneSample(1)); | 623 HasOneSample(1)); |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 HasOneSample(4)); | 883 HasOneSample(4)); |
893 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 4, 4)); | 884 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 4, 4)); |
894 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 885 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
895 DependingOnPolicy(0, 2, 2)); | 886 DependingOnPolicy(0, 2, 2)); |
896 | 887 |
897 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); | 888 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); |
898 } | 889 } |
899 | 890 |
900 // Exercises accounting in the case where an extension has two different-site | 891 // Exercises accounting in the case where an extension has two different-site |
901 // web iframes. | 892 // web iframes. |
902 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) { | 893 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) { |
903 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 894 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
904 details->StartFetchAndWait(); | 895 details->StartFetchAndWait(); |
905 | 896 |
906 // Install one script-injecting extension with background page, and an | 897 // Install one script-injecting extension with background page, and an |
907 // extension with web accessible resources. | 898 // extension with web accessible resources. |
908 const Extension* extension = CreateExtension("Test Extension", false); | 899 const Extension* extension = CreateExtension("Test Extension", false); |
909 | 900 |
910 ui_test_utils::NavigateToURL( | 901 ui_test_utils::NavigateToURL( |
911 browser(), extension->GetResourceURL("/two_http_iframes.html")); | 902 browser(), extension->GetResourceURL("/two_http_iframes.html")); |
912 | 903 |
(...skipping 17 matching lines...) Expand all Loading... |
930 // TODO(nick): https://crbug.com/512560 Make the number below agree with the | 921 // TODO(nick): https://crbug.com/512560 Make the number below agree with the |
931 // estimates above, which assume consolidation of subframe processes. | 922 // estimates above, which assume consolidation of subframe processes. |
932 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 3, 3)); | 923 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 3, 3)); |
933 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 924 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
934 DependingOnPolicy(0, 2, 2)); | 925 DependingOnPolicy(0, 2, 2)); |
935 | 926 |
936 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); | 927 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); |
937 } | 928 } |
938 | 929 |
939 // Verifies that --isolate-extensions doesn't isolate hosted apps. | 930 // Verifies that --isolate-extensions doesn't isolate hosted apps. |
940 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { | 931 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { |
941 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( | 932 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( |
942 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); | 933 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); |
943 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( | 934 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( |
944 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); | 935 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); |
945 | 936 |
946 // No hosted app is installed: app.org just behaves like a normal domain. | 937 // No hosted app is installed: app.org just behaves like a normal domain. |
947 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); | 938 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); |
948 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 939 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
949 details->StartFetchAndWait(); | 940 details->StartFetchAndWait(); |
950 EXPECT_THAT(details->uma()->GetAllSamples( | 941 EXPECT_THAT(details->uma()->GetAllSamples( |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); | 1067 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); |
1077 EXPECT_THAT(details->GetOutOfProcessIframeCount(), | 1068 EXPECT_THAT(details->GetOutOfProcessIframeCount(), |
1078 DependingOnPolicy(0, 0, 1)); | 1069 DependingOnPolicy(0, 0, 1)); |
1079 | 1070 |
1080 // Since hosted apps are excluded from isolation, this test should not be | 1071 // Since hosted apps are excluded from isolation, this test should not be |
1081 // in any of the field trial groups. | 1072 // in any of the field trial groups. |
1082 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); | 1073 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); |
1083 } | 1074 } |
1084 | 1075 |
1085 // Verifies that the client is put in the appropriate field trial group. | 1076 // Verifies that the client is put in the appropriate field trial group. |
1086 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, VerifyFieldTrialGroup) { | 1077 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, VerifyFieldTrialGroup) { |
1087 const Extension* extension = CreateExtension("Extension", false); | 1078 const Extension* extension = CreateExtension("Extension", false); |
1088 GURL tab1_url = embedded_test_server()->GetURL( | 1079 GURL tab1_url = embedded_test_server()->GetURL( |
1089 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); | 1080 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); |
1090 ui_test_utils::NavigateToURL(browser(), tab1_url); | 1081 ui_test_utils::NavigateToURL(browser(), tab1_url); |
1091 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); | 1082 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); |
1092 | 1083 |
1093 // Tab navigates its second iframe to a page of the extension. | 1084 // Tab navigates its second iframe to a page of the extension. |
1094 content::NavigateIframeToURL(tab, "child-1", | 1085 content::NavigateIframeToURL(tab, "child-1", |
1095 extension->GetResourceURL("/blank_iframe.html")); | 1086 extension->GetResourceURL("/blank_iframe.html")); |
1096 | 1087 |
(...skipping 10 matching lines...) Expand all Loading... |
1107 } | 1098 } |
1108 } else { | 1099 } else { |
1109 group = "Default"; | 1100 group = "Default"; |
1110 } | 1101 } |
1111 | 1102 |
1112 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group)); | 1103 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group)); |
1113 } | 1104 } |
1114 | 1105 |
1115 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is | 1106 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is |
1116 // correct when using tabs with web pages. | 1107 // correct when using tabs with web pages. |
1117 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, | 1108 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, |
1118 VerifySiteInstanceCountInBrowsingInstance) { | 1109 VerifySiteInstanceCountInBrowsingInstance) { |
1119 // Page with 14 nested oopifs across 9 sites (a.com through i.com). | 1110 // Page with 14 nested oopifs across 9 sites (a.com through i.com). |
1120 GURL abcdefghi_url = embedded_test_server()->GetURL( | 1111 GURL abcdefghi_url = embedded_test_server()->GetURL( |
1121 "a.com", | 1112 "a.com", |
1122 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); | 1113 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); |
1123 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); | 1114 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); |
1124 | 1115 |
1125 // Get the metrics. | 1116 // Get the metrics. |
1126 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 1117 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
1127 details->StartFetchAndWait(); | 1118 details->StartFetchAndWait(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1177 HasOneSample(DependingOnPolicy(0, 0, 160))); | 1168 HasOneSample(DependingOnPolicy(0, 0, 160))); |
1178 EXPECT_THAT( | 1169 EXPECT_THAT( |
1179 details->uma()->GetAllSamples( | 1170 details->uma()->GetAllSamples( |
1180 "SiteIsolation.ProxyCountPerBrowsingInstance"), | 1171 "SiteIsolation.ProxyCountPerBrowsingInstance"), |
1181 DependingOnPolicy(ElementsAre(Sample(0, 2)), ElementsAre(Sample(0, 2)), | 1172 DependingOnPolicy(ElementsAre(Sample(0, 2)), ElementsAre(Sample(0, 2)), |
1182 ElementsAre(Sample(12, 1), Sample(160, 1)))); | 1173 ElementsAre(Sample(12, 1), Sample(160, 1)))); |
1183 } | 1174 } |
1184 | 1175 |
1185 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is | 1176 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is |
1186 // correct when extensions and web pages are mixed together. | 1177 // correct when extensions and web pages are mixed together. |
1187 IN_PROC_BROWSER_TEST_P( | 1178 IN_PROC_BROWSER_TEST_F( |
1188 SiteDetailsBrowserTest, | 1179 SiteDetailsBrowserTest, |
1189 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { | 1180 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { |
1190 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode | 1181 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode |
1191 // should have no effect so far, since there are no frames straddling the | 1182 // should have no effect so far, since there are no frames straddling the |
1192 // extension/web boundary. | 1183 // extension/web boundary. |
1193 GURL tab_url = embedded_test_server()->GetURL( | 1184 GURL tab_url = embedded_test_server()->GetURL( |
1194 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); | 1185 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); |
1195 ui_test_utils::NavigateToURL(browser(), tab_url); | 1186 ui_test_utils::NavigateToURL(browser(), tab_url); |
1196 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); | 1187 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); |
1197 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); | 1188 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 content::NavigateIframeToURL( | 1225 content::NavigateIframeToURL( |
1235 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); | 1226 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); |
1236 details = new TestMemoryDetails(); | 1227 details = new TestMemoryDetails(); |
1237 details->StartFetchAndWait(); | 1228 details->StartFetchAndWait(); |
1238 EXPECT_THAT(details->uma()->GetAllSamples( | 1229 EXPECT_THAT(details->uma()->GetAllSamples( |
1239 "SiteIsolation.SiteInstancesPerBrowsingInstance"), | 1230 "SiteIsolation.SiteInstancesPerBrowsingInstance"), |
1240 DependingOnPolicy(ElementsAre(Bucket(1, 2)), | 1231 DependingOnPolicy(ElementsAre(Bucket(1, 2)), |
1241 ElementsAre(Bucket(1, 1), Bucket(3, 1)), | 1232 ElementsAre(Bucket(1, 1), Bucket(3, 1)), |
1242 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); | 1233 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); |
1243 } | 1234 } |
1244 | |
1245 INSTANTIATE_TEST_CASE_P( | |
1246 , | |
1247 SiteDetailsBrowserTest, | |
1248 testing::Values("", | |
1249 extensions::switches::kIsolateExtensions, | |
1250 switches::kSitePerProcess)); | |
OLD | NEW |