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

Side by Side Diff: chrome/browser/site_details_browsertest.cc

Issue 1674873002: SiteDetailsBrowserTest: prepare to add proxy information (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uma
Patch Set: thestig's fixes Created 4 years, 10 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/site_details.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 28 matching lines...) Expand all
39 #include "net/test/embedded_test_server/embedded_test_server.h" 39 #include "net/test/embedded_test_server/embedded_test_server.h"
40 #include "testing/gmock/include/gmock/gmock.h" 40 #include "testing/gmock/include/gmock/gmock.h"
41 #include "testing/gtest/include/gtest/gtest.h" 41 #include "testing/gtest/include/gtest/gtest.h"
42 42
43 using base::Bucket; 43 using base::Bucket;
44 using content::WebContents; 44 using content::WebContents;
45 using extensions::DictionaryBuilder; 45 using extensions::DictionaryBuilder;
46 using extensions::Extension; 46 using extensions::Extension;
47 using extensions::ListBuilder; 47 using extensions::ListBuilder;
48 using extensions::TestExtensionDir; 48 using extensions::TestExtensionDir;
49 using testing::ContainerEq;
50 using testing::ElementsAre; 49 using testing::ElementsAre;
50 using testing::PrintToString;
51 51
52 namespace { 52 namespace {
53 53
54 class TestMemoryDetails : public MetricsMemoryDetails { 54 class TestMemoryDetails : public MetricsMemoryDetails {
55 public: 55 public:
56 TestMemoryDetails() 56 TestMemoryDetails()
57 : MetricsMemoryDetails(base::Bind(&base::DoNothing), nullptr) {} 57 : MetricsMemoryDetails(base::Bind(&base::DoNothing), nullptr) {}
58 58
59 void StartFetchAndWait() { 59 void StartFetchAndWait() {
60 uma_.reset(new base::HistogramTester()); 60 uma_.reset(new base::HistogramTester());
(...skipping 29 matching lines...) Expand all
90 MetricsMemoryDetails::OnDetailsAvailable(); 90 MetricsMemoryDetails::OnDetailsAvailable();
91 // Exit the loop initiated by StartFetchAndWait(). 91 // Exit the loop initiated by StartFetchAndWait().
92 base::MessageLoop::current()->QuitWhenIdle(); 92 base::MessageLoop::current()->QuitWhenIdle();
93 } 93 }
94 94
95 scoped_ptr<base::HistogramTester> uma_; 95 scoped_ptr<base::HistogramTester> uma_;
96 96
97 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails); 97 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails);
98 }; 98 };
99 99
100 IsolationScenarioType GetCurrentPolicy() {
101 if (content::AreAllSitesIsolatedForTesting())
102 return ISOLATE_ALL_SITES;
103 if (extensions::IsIsolateExtensionsEnabled())
104 return ISOLATE_EXTENSIONS;
105 return ISOLATE_NOTHING;
106 }
107
108 // This matcher takes three other matchers as arguments, and applies one of them
109 // depending on the current site isolation mode. The first applies if no site
110 // isolation mode is active; the second applies under --isolate-extensions mode;
111 // and the third applies under --site-per-process mode.
112 MATCHER_P3(DependingOnPolicy,
113 isolate_nothing,
114 isolate_extensions,
115 isolate_all_sites,
116 GetCurrentPolicy() == ISOLATE_NOTHING
117 ? std::string("(with oopifs disabled) ") +
118 PrintToString(isolate_nothing)
119 : GetCurrentPolicy() == ISOLATE_EXTENSIONS
120 ? std::string("(under --isolate-extensions) ") +
121 PrintToString(isolate_extensions)
122 : std::string("(under --site-per-process) ") +
123 PrintToString(isolate_all_sites)) {
124 switch (GetCurrentPolicy()) {
125 case ISOLATE_NOTHING:
126 return ExplainMatchResult(isolate_nothing, arg, result_listener);
127 case ISOLATE_EXTENSIONS:
128 return ExplainMatchResult(isolate_extensions, arg, result_listener);
129 case ISOLATE_ALL_SITES:
130 return ExplainMatchResult(isolate_all_sites, arg, result_listener);
131 default:
132 return false;
133 }
134 }
135
136 // Matcher for base::Bucket objects that allows bucket_min to be a matcher.
137 MATCHER_P2(Sample,
138 bucket_min,
139 count,
140 std::string("is a Bucket whose count is ") + PrintToString(count) +
141 std::string(" and whose value is ") +
142 PrintToString(bucket_min)) {
143 return ExplainMatchResult(count, arg.count, result_listener) &&
144 ExplainMatchResult(bucket_min, arg.min, result_listener);
145 }
146
147 // Allow matchers to be pretty-printed when passed to PrintToString() for the
148 // cases we care about.
149 template <typename P1, typename P2, typename P3>
150 void PrintTo(const DependingOnPolicyMatcherP3<P1, P2, P3>& matcher,
151 std::ostream* os) {
152 testing::Matcher<int> matcherCast = matcher;
153 matcherCast.DescribeTo(os);
154 }
155
156 template <typename P1, typename P2>
157 void PrintTo(const SampleMatcherP2<P1, P2>& matcher, std::ostream* os) {
158 testing::Matcher<Bucket> matcherCast = matcher;
159 matcherCast.DescribeTo(os);
160 }
161
162 // Matches a container of histogram samples, for the common case where the
163 // histogram received just one sample.
164 #define HasOneSample(x) ElementsAre(Sample(x, 1))
165
100 } // namespace 166 } // namespace
101 167
102 class SiteDetailsBrowserTest : public ExtensionBrowserTest { 168 class SiteDetailsBrowserTest : public ExtensionBrowserTest,
169 public testing::WithParamInterface<const char*> {
103 public: 170 public:
104 SiteDetailsBrowserTest() {} 171 SiteDetailsBrowserTest() {}
105 ~SiteDetailsBrowserTest() override {} 172 ~SiteDetailsBrowserTest() override {}
106 173
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
107 void SetUpOnMainThread() override { 182 void SetUpOnMainThread() override {
108 host_resolver()->AddRule("*", "127.0.0.1"); 183 host_resolver()->AddRule("*", "127.0.0.1");
109 184
110 // Add content/test/data so we can use cross_site_iframe_factory.html 185 // Add content/test/data so we can use cross_site_iframe_factory.html
111 base::FilePath test_data_dir; 186 base::FilePath test_data_dir;
112 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir)); 187 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_data_dir));
113 embedded_test_server()->ServeFilesFromDirectory( 188 embedded_test_server()->ServeFilesFromDirectory(
114 test_data_dir.AppendASCII("content/test/data/")); 189 test_data_dir.AppendASCII("content/test/data/"));
115 ASSERT_TRUE(embedded_test_server()->Start()); 190 ASSERT_TRUE(embedded_test_server()->Start());
116 } 191 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 } 313 }
239 314
240 return false; 315 return false;
241 } 316 }
242 317
243 private: 318 private:
244 ScopedVector<TestExtensionDir> temp_dirs_; 319 ScopedVector<TestExtensionDir> temp_dirs_;
245 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest); 320 DISALLOW_COPY_AND_ASSIGN(SiteDetailsBrowserTest);
246 }; 321 };
247 322
248 MATCHER_P(EqualsIfExtensionsIsolated, expected, "") {
249 if (content::AreAllSitesIsolatedForTesting())
250 return arg >= expected;
251 if (extensions::IsIsolateExtensionsEnabled())
252 return arg == expected;
253 return true;
254 }
255
256 MATCHER_P(EqualsIfSitePerProcess, expected, "") {
257 return !content::AreAllSitesIsolatedForTesting() || expected == arg;
258 }
259 323
260 // Test the accuracy of SiteDetails process estimation, in the presence of 324 // Test the accuracy of SiteDetails process estimation, in the presence of
261 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs 325 // multiple iframes, navigation, multiple BrowsingInstances, and multiple tabs
262 // in the same BrowsingInstance. 326 // in the same BrowsingInstance.
263 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) { 327 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ManyIframes) {
264 // Page with 14 nested oopifs across 9 sites (a.com through i.com). 328 // Page with 14 nested oopifs across 9 sites (a.com through i.com).
265 // None of these are https. 329 // None of these are https.
266 GURL abcdefghi_url = embedded_test_server()->GetURL( 330 GURL abcdefghi_url = embedded_test_server()->GetURL(
267 "a.com", 331 "a.com",
268 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); 332 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))");
269 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); 333 ui_test_utils::NavigateToURL(browser(), abcdefghi_url);
270 334
271 // Get the metrics. 335 // Get the metrics.
272 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 336 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
273 details->StartFetchAndWait(); 337 details->StartFetchAndWait();
274 338
275 EXPECT_EQ(1U, details->CountPageTitles()); 339 EXPECT_EQ(1U, details->CountPageTitles());
276 EXPECT_THAT( 340 EXPECT_THAT(
277 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 341 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
278 ElementsAre(Bucket(1, 1))); 342 HasOneSample(1));
279 EXPECT_THAT(details->uma()->GetAllSamples( 343 EXPECT_THAT(details->uma()->GetAllSamples(
280 "SiteIsolation.CurrentRendererProcessCount"), 344 "SiteIsolation.CurrentRendererProcessCount"),
281 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 345 HasOneSample(GetRenderProcessCount()));
282 EXPECT_THAT(details->uma()->GetAllSamples( 346 EXPECT_THAT(details->uma()->GetAllSamples(
283 "SiteIsolation.IsolateNothingProcessCountEstimate"), 347 "SiteIsolation.IsolateNothingProcessCountEstimate"),
284 ElementsAre(Bucket(1, 1))); 348 HasOneSample(1));
285 EXPECT_THAT(details->uma()->GetAllSamples( 349 EXPECT_THAT(details->uma()->GetAllSamples(
286 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 350 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
287 ElementsAre(Bucket(9, 1))); 351 HasOneSample(9));
288 EXPECT_THAT(details->uma()->GetAllSamples( 352 EXPECT_THAT(details->uma()->GetAllSamples(
289 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 353 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
290 ElementsAre(Bucket(9, 1))); 354 HasOneSample(9));
291 EXPECT_THAT(details->uma()->GetAllSamples( 355 EXPECT_THAT(details->uma()->GetAllSamples(
292 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 356 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
293 ElementsAre(Bucket(9, 1))); 357 HasOneSample(9));
294 EXPECT_THAT(details->uma()->GetAllSamples( 358 EXPECT_THAT(details->uma()->GetAllSamples(
295 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 359 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
296 ElementsAre(Bucket(1, 1))); 360 HasOneSample(1));
297 EXPECT_THAT(details->uma()->GetAllSamples( 361 EXPECT_THAT(details->uma()->GetAllSamples(
298 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 362 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
299 ElementsAre(Bucket(1, 1))); 363 HasOneSample(1));
300 EXPECT_THAT(details->uma()->GetAllSamples( 364 EXPECT_THAT(details->uma()->GetAllSamples(
301 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 365 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
302 ElementsAre(Bucket(1, 1))); 366 HasOneSample(1));
303 EXPECT_THAT(details->uma()->GetAllSamples( 367 EXPECT_THAT(details->uma()->GetAllSamples(
304 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 368 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
305 ElementsAre(Bucket(1, 1))); 369 HasOneSample(1));
306 EXPECT_THAT(details->uma()->GetAllSamples( 370 EXPECT_THAT(details->uma()->GetAllSamples(
307 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 371 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
308 ElementsAre(Bucket(1, 1))); 372 HasOneSample(1));
309 EXPECT_THAT(details->uma()->GetAllSamples( 373 EXPECT_THAT(details->uma()->GetAllSamples(
310 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 374 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
311 ElementsAre(Bucket(1, 1))); 375 HasOneSample(1));
312 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 376 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 9));
313 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(9));
314 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 377 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
315 EqualsIfExtensionsIsolated(0)); 378 DependingOnPolicy(0, 0, 14));
316 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
317 EqualsIfSitePerProcess(14));
318 379
319 // Navigate to a different, disjoint set of 7 sites. 380 // Navigate to a different, disjoint set of 7 sites.
320 GURL pqrstuv_url = embedded_test_server()->GetURL( 381 GURL pqrstuv_url = embedded_test_server()->GetURL(
321 "p.com", 382 "p.com",
322 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))"); 383 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))");
323 ui_test_utils::NavigateToURL(browser(), pqrstuv_url); 384 ui_test_utils::NavigateToURL(browser(), pqrstuv_url);
324 385
325 details = new TestMemoryDetails(); 386 details = new TestMemoryDetails();
326 details->StartFetchAndWait(); 387 details->StartFetchAndWait();
327 388
328 EXPECT_EQ(1U, details->CountPageTitles()); 389 EXPECT_EQ(1U, details->CountPageTitles());
329 EXPECT_THAT( 390 EXPECT_THAT(
330 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 391 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
331 ElementsAre(Bucket(1, 1))); 392 HasOneSample(1));
332 EXPECT_THAT(details->uma()->GetAllSamples( 393 EXPECT_THAT(details->uma()->GetAllSamples(
333 "SiteIsolation.CurrentRendererProcessCount"), 394 "SiteIsolation.CurrentRendererProcessCount"),
334 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 395 HasOneSample(GetRenderProcessCount()));
335 EXPECT_THAT(details->uma()->GetAllSamples( 396 EXPECT_THAT(details->uma()->GetAllSamples(
336 "SiteIsolation.IsolateNothingProcessCountEstimate"), 397 "SiteIsolation.IsolateNothingProcessCountEstimate"),
337 ElementsAre(Bucket(1, 1))); 398 HasOneSample(1));
338 EXPECT_THAT(details->uma()->GetAllSamples( 399 EXPECT_THAT(details->uma()->GetAllSamples(
339 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 400 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
340 ElementsAre(Bucket(7, 1))); 401 HasOneSample(7));
341 EXPECT_THAT(details->uma()->GetAllSamples( 402 EXPECT_THAT(details->uma()->GetAllSamples(
342 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 403 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
343 ElementsAre(Bucket(7, 1))); 404 HasOneSample(7));
344 EXPECT_THAT(details->uma()->GetAllSamples( 405 EXPECT_THAT(details->uma()->GetAllSamples(
345 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 406 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
346 ElementsAre(Bucket(7, 1))); 407 HasOneSample(7));
347 EXPECT_THAT(details->uma()->GetAllSamples( 408 EXPECT_THAT(details->uma()->GetAllSamples(
348 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 409 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
349 ElementsAre(Bucket(1, 1))); 410 HasOneSample(1));
350 EXPECT_THAT(details->uma()->GetAllSamples( 411 EXPECT_THAT(details->uma()->GetAllSamples(
351 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 412 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
352 ElementsAre(Bucket(1, 1))); 413 HasOneSample(1));
353 EXPECT_THAT(details->uma()->GetAllSamples( 414 EXPECT_THAT(details->uma()->GetAllSamples(
354 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 415 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
355 ElementsAre(Bucket(1, 1))); 416 HasOneSample(1));
356 EXPECT_THAT(details->uma()->GetAllSamples( 417 EXPECT_THAT(details->uma()->GetAllSamples(
357 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 418 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
358 ElementsAre(Bucket(1, 1))); 419 HasOneSample(1));
359 EXPECT_THAT(details->uma()->GetAllSamples( 420 EXPECT_THAT(details->uma()->GetAllSamples(
360 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 421 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
361 ElementsAre(Bucket(1, 1))); 422 HasOneSample(1));
362 EXPECT_THAT(details->uma()->GetAllSamples( 423 EXPECT_THAT(details->uma()->GetAllSamples(
363 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 424 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
364 ElementsAre(Bucket(1, 1))); 425 HasOneSample(1));
365 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 426 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 7));
366 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(7));
367 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 427 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
368 EqualsIfExtensionsIsolated(0)); 428 DependingOnPolicy(0, 0, 11));
369 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
370 EqualsIfSitePerProcess(11));
371 429
372 // Open a second tab (different BrowsingInstance) with 4 sites (a through d). 430 // Open a second tab (different BrowsingInstance) with 4 sites (a through d).
373 GURL abcd_url = embedded_test_server()->GetURL( 431 GURL abcd_url = embedded_test_server()->GetURL(
374 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); 432 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))");
375 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); 433 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED);
376 434
377 details = new TestMemoryDetails(); 435 details = new TestMemoryDetails();
378 details->StartFetchAndWait(); 436 details->StartFetchAndWait();
379 437
380 EXPECT_EQ(2U, details->CountPageTitles()); 438 EXPECT_EQ(2U, details->CountPageTitles());
381 EXPECT_THAT( 439 EXPECT_THAT(
382 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 440 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
383 ElementsAre(Bucket(2, 1))); 441 HasOneSample(2));
384 EXPECT_THAT(details->uma()->GetAllSamples( 442 EXPECT_THAT(details->uma()->GetAllSamples(
385 "SiteIsolation.CurrentRendererProcessCount"), 443 "SiteIsolation.CurrentRendererProcessCount"),
386 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 444 HasOneSample(GetRenderProcessCount()));
387 EXPECT_THAT(details->uma()->GetAllSamples( 445 EXPECT_THAT(details->uma()->GetAllSamples(
388 "SiteIsolation.IsolateNothingProcessCountEstimate"), 446 "SiteIsolation.IsolateNothingProcessCountEstimate"),
389 ElementsAre(Bucket(2, 1))); 447 HasOneSample(2));
390 EXPECT_THAT(details->uma()->GetAllSamples( 448 EXPECT_THAT(details->uma()->GetAllSamples(
391 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 449 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
392 ElementsAre(Bucket(11, 1))); 450 HasOneSample(11));
393 EXPECT_THAT(details->uma()->GetAllSamples( 451 EXPECT_THAT(details->uma()->GetAllSamples(
394 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 452 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
395 ElementsAre(Bucket(11, 1))); 453 HasOneSample(11));
396 EXPECT_THAT(details->uma()->GetAllSamples( 454 EXPECT_THAT(details->uma()->GetAllSamples(
397 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 455 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
398 ElementsAre(Bucket(11, 1))); 456 HasOneSample(11));
399 EXPECT_THAT(details->uma()->GetAllSamples( 457 EXPECT_THAT(details->uma()->GetAllSamples(
400 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 458 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
401 ElementsAre(Bucket(2, 1))); 459 HasOneSample(2));
402 EXPECT_THAT(details->uma()->GetAllSamples( 460 EXPECT_THAT(details->uma()->GetAllSamples(
403 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 461 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
404 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 2. 462 HasOneSample(1)); // TODO(nick): This should be 2.
405 EXPECT_THAT(details->uma()->GetAllSamples( 463 EXPECT_THAT(details->uma()->GetAllSamples(
406 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 464 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
407 ElementsAre(Bucket(2, 1))); 465 HasOneSample(2));
408 EXPECT_THAT(details->uma()->GetAllSamples( 466 EXPECT_THAT(details->uma()->GetAllSamples(
409 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 467 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
410 ElementsAre(Bucket(2, 1))); 468 HasOneSample(2));
411 EXPECT_THAT(details->uma()->GetAllSamples( 469 EXPECT_THAT(details->uma()->GetAllSamples(
412 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 470 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
413 ElementsAre(Bucket(1, 1))); 471 HasOneSample(1));
414 EXPECT_THAT(details->uma()->GetAllSamples( 472 EXPECT_THAT(details->uma()->GetAllSamples(
415 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 473 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
416 ElementsAre(Bucket(2, 1))); 474 HasOneSample(2));
417 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(2)); 475 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 2, 11));
418 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(11));
419 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 476 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
420 EqualsIfExtensionsIsolated(0)); 477 DependingOnPolicy(0, 0, 14));
421 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
422 EqualsIfSitePerProcess(14));
423 478
424 // Open a third tab (different BrowsingInstance) with the same 4 sites. 479 // Open a third tab (different BrowsingInstance) with the same 4 sites.
425 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED); 480 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED);
426 481
427 details = new TestMemoryDetails(); 482 details = new TestMemoryDetails();
428 details->StartFetchAndWait(); 483 details->StartFetchAndWait();
429 484
430 EXPECT_THAT( 485 EXPECT_THAT(
431 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 486 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
432 ElementsAre(Bucket(3, 1))); 487 HasOneSample(3));
433 EXPECT_THAT(details->uma()->GetAllSamples( 488 EXPECT_THAT(details->uma()->GetAllSamples(
434 "SiteIsolation.CurrentRendererProcessCount"), 489 "SiteIsolation.CurrentRendererProcessCount"),
435 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 490 HasOneSample(GetRenderProcessCount()));
436 EXPECT_THAT(details->uma()->GetAllSamples( 491 EXPECT_THAT(details->uma()->GetAllSamples(
437 "SiteIsolation.IsolateNothingProcessCountEstimate"), 492 "SiteIsolation.IsolateNothingProcessCountEstimate"),
438 ElementsAre(Bucket(3, 1))); 493 HasOneSample(3));
439 // Could be 11 if subframe processes were reused across BrowsingInstances. 494 // Could be 11 if subframe processes were reused across BrowsingInstances.
440 EXPECT_THAT(details->uma()->GetAllSamples( 495 EXPECT_THAT(details->uma()->GetAllSamples(
441 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 496 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
442 ElementsAre(Bucket(15, 1))); 497 HasOneSample(15));
443 EXPECT_THAT(details->uma()->GetAllSamples( 498 EXPECT_THAT(details->uma()->GetAllSamples(
444 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 499 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
445 ElementsAre(Bucket(11, 1))); 500 HasOneSample(11));
446 EXPECT_THAT(details->uma()->GetAllSamples( 501 EXPECT_THAT(details->uma()->GetAllSamples(
447 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 502 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
448 ElementsAre(Bucket(15, 1))); 503 HasOneSample(15));
449 EXPECT_THAT(details->uma()->GetAllSamples( 504 EXPECT_THAT(details->uma()->GetAllSamples(
450 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 505 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
451 ElementsAre(Bucket(3, 1))); 506 HasOneSample(3));
452 EXPECT_THAT(details->uma()->GetAllSamples( 507 EXPECT_THAT(details->uma()->GetAllSamples(
453 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 508 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
454 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 3. 509 HasOneSample(1)); // TODO(nick): This should be 3.
455 EXPECT_THAT(details->uma()->GetAllSamples( 510 EXPECT_THAT(details->uma()->GetAllSamples(
456 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 511 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
457 ElementsAre(Bucket(3, 1))); 512 HasOneSample(3));
458 EXPECT_THAT(details->uma()->GetAllSamples( 513 EXPECT_THAT(details->uma()->GetAllSamples(
459 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 514 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
460 ElementsAre(Bucket(3, 1))); 515 HasOneSample(3));
461 EXPECT_THAT(details->uma()->GetAllSamples( 516 EXPECT_THAT(details->uma()->GetAllSamples(
462 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 517 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
463 ElementsAre(Bucket(1, 1))); 518 HasOneSample(1));
464 EXPECT_THAT(details->uma()->GetAllSamples( 519 EXPECT_THAT(details->uma()->GetAllSamples(
465 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 520 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
466 ElementsAre(Bucket(3, 1))); 521 HasOneSample(3));
467 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 522 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 15));
468 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(15));
469 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 523 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
470 EqualsIfExtensionsIsolated(0)); 524 DependingOnPolicy(0, 0, 17));
471 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
472 EqualsIfSitePerProcess(17));
473 525
474 // From the third tab, window.open() a fourth tab in the same 526 // From the third tab, window.open() a fourth tab in the same
475 // BrowsingInstance, to a page using the same four sites "a-d" as third tab, 527 // BrowsingInstance, to a page using the same four sites "a-d" as third tab,
476 // plus an additional site "e". The estimated process counts should increase 528 // plus an additional site "e". The estimated process counts should increase
477 // by one (not five) from the previous scenario, as the new tab can reuse the 529 // by one (not five) from the previous scenario, as the new tab can reuse the
478 // four processes already in the BrowsingInstance. 530 // four processes already in the BrowsingInstance.
479 GURL dcbae_url = embedded_test_server()->GetURL( 531 GURL dcbae_url = embedded_test_server()->GetURL(
480 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))"); 532 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))");
481 ui_test_utils::UrlLoadObserver load_complete( 533 ui_test_utils::UrlLoadObserver load_complete(
482 dcbae_url, content::NotificationService::AllSources()); 534 dcbae_url, content::NotificationService::AllSources());
483 ASSERT_EQ(3, browser()->tab_strip_model()->count()); 535 ASSERT_EQ(3, browser()->tab_strip_model()->count());
484 ASSERT_TRUE(content::ExecuteScript( 536 ASSERT_TRUE(content::ExecuteScript(
485 browser()->tab_strip_model()->GetActiveWebContents(), 537 browser()->tab_strip_model()->GetActiveWebContents(),
486 "window.open('" + dcbae_url.spec() + "');")); 538 "window.open('" + dcbae_url.spec() + "');"));
487 ASSERT_EQ(4, browser()->tab_strip_model()->count()); 539 ASSERT_EQ(4, browser()->tab_strip_model()->count());
488 load_complete.Wait(); 540 load_complete.Wait();
489 541
490 details = new TestMemoryDetails(); 542 details = new TestMemoryDetails();
491 details->StartFetchAndWait(); 543 details->StartFetchAndWait();
492 544
493 EXPECT_THAT( 545 EXPECT_THAT(
494 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 546 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
495 ElementsAre(Bucket(3, 1))); 547 HasOneSample(3));
496 EXPECT_THAT(details->uma()->GetAllSamples( 548 EXPECT_THAT(details->uma()->GetAllSamples(
497 "SiteIsolation.CurrentRendererProcessCount"), 549 "SiteIsolation.CurrentRendererProcessCount"),
498 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 550 HasOneSample(GetRenderProcessCount()));
499 EXPECT_THAT(details->uma()->GetAllSamples( 551 EXPECT_THAT(details->uma()->GetAllSamples(
500 "SiteIsolation.IsolateNothingProcessCountEstimate"), 552 "SiteIsolation.IsolateNothingProcessCountEstimate"),
501 ElementsAre(Bucket(3, 1))); 553 HasOneSample(3));
502 // Could be 11 if subframe processes were reused across BrowsingInstances. 554 // Could be 11 if subframe processes were reused across BrowsingInstances.
503 EXPECT_THAT(details->uma()->GetAllSamples( 555 EXPECT_THAT(details->uma()->GetAllSamples(
504 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 556 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
505 ElementsAre(Bucket(16, 1))); 557 HasOneSample(16));
506 EXPECT_THAT(details->uma()->GetAllSamples( 558 EXPECT_THAT(details->uma()->GetAllSamples(
507 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 559 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
508 ElementsAre(Bucket(12, 1))); 560 HasOneSample(12));
509 EXPECT_THAT(details->uma()->GetAllSamples( 561 EXPECT_THAT(details->uma()->GetAllSamples(
510 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 562 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
511 ElementsAre(Bucket(16, 1))); 563 HasOneSample(16));
512 EXPECT_THAT(details->uma()->GetAllSamples( 564 EXPECT_THAT(details->uma()->GetAllSamples(
513 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 565 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
514 ElementsAre(Bucket(3, 1))); 566 HasOneSample(3));
515 EXPECT_THAT(details->uma()->GetAllSamples( 567 EXPECT_THAT(details->uma()->GetAllSamples(
516 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 568 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
517 ElementsAre(Bucket(1, 1))); // TODO(nick): This should be 3. 569 HasOneSample(1)); // TODO(nick): This should be 3.
518 EXPECT_THAT(details->uma()->GetAllSamples( 570 EXPECT_THAT(details->uma()->GetAllSamples(
519 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 571 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
520 ElementsAre(Bucket(3, 1))); 572 HasOneSample(3));
521 EXPECT_THAT(details->uma()->GetAllSamples( 573 EXPECT_THAT(details->uma()->GetAllSamples(
522 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 574 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
523 ElementsAre(Bucket(3, 1))); 575 HasOneSample(3));
524 EXPECT_THAT(details->uma()->GetAllSamples( 576 EXPECT_THAT(details->uma()->GetAllSamples(
525 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 577 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
526 ElementsAre(Bucket(1, 1))); 578 HasOneSample(1));
527 EXPECT_THAT(details->uma()->GetAllSamples( 579 EXPECT_THAT(details->uma()->GetAllSamples(
528 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 580 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
529 ElementsAre(Bucket(3, 1))); 581 HasOneSample(3));
530 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 582 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 16));
531 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(16));
532 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 583 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
533 EqualsIfExtensionsIsolated(0)); 584 DependingOnPolicy(0, 0, 21));
534 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
535 EqualsIfSitePerProcess(21));
536 585
537 // This test doesn't navigate to any extensions URLs, so it should not be 586 // This test doesn't navigate to any extensions URLs, so it should not be
538 // in any of the field trial groups. 587 // in any of the field trial groups.
539 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); 588 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive"));
540 } 589 }
541 590
542 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) { 591 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensions) {
543 // We start on "about:blank", which should be credited with a process in this 592 // We start on "about:blank", which should be credited with a process in this
544 // case. 593 // case.
545 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 594 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
546 details->StartFetchAndWait(); 595 details->StartFetchAndWait();
547 EXPECT_THAT(details->uma()->GetAllSamples( 596 EXPECT_THAT(details->uma()->GetAllSamples(
548 "SiteIsolation.CurrentRendererProcessCount"), 597 "SiteIsolation.CurrentRendererProcessCount"),
549 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 598 HasOneSample(GetRenderProcessCount()));
550 EXPECT_THAT(details->uma()->GetAllSamples( 599 EXPECT_THAT(details->uma()->GetAllSamples(
551 "SiteIsolation.IsolateNothingProcessCountEstimate"), 600 "SiteIsolation.IsolateNothingProcessCountEstimate"),
552 ElementsAre(Bucket(1, 1))); 601 HasOneSample(1));
553 EXPECT_THAT(details->uma()->GetAllSamples( 602 EXPECT_THAT(details->uma()->GetAllSamples(
554 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 603 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
555 ElementsAre(Bucket(1, 1))); 604 HasOneSample(1));
556 EXPECT_THAT(details->uma()->GetAllSamples( 605 EXPECT_THAT(details->uma()->GetAllSamples(
557 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 606 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
558 ElementsAre(Bucket(1, 1))); 607 HasOneSample(1));
559 EXPECT_THAT(details->uma()->GetAllSamples( 608 EXPECT_THAT(details->uma()->GetAllSamples(
560 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 609 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
561 ElementsAre(Bucket(1, 1))); 610 HasOneSample(1));
562 EXPECT_THAT(GetRenderProcessCount(), 1); 611 EXPECT_THAT(GetRenderProcessCount(), 1);
563 EXPECT_EQ(0, details->GetOutOfProcessIframeCount()); 612 EXPECT_EQ(0, details->GetOutOfProcessIframeCount());
564 613
565 // Install one script-injecting extension with background page, and an 614 // Install one script-injecting extension with background page, and an
566 // extension with web accessible resources. 615 // extension with web accessible resources.
567 const Extension* extension1 = CreateExtension("Extension One", true); 616 const Extension* extension1 = CreateExtension("Extension One", true);
568 const Extension* extension2 = CreateExtension("Extension Two", false); 617 const Extension* extension2 = CreateExtension("Extension Two", false);
569 618
570 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode 619 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode
571 // should have no effect so far, since there are no frames straddling the 620 // should have no effect so far, since there are no frames straddling the
572 // extension/web boundary. 621 // extension/web boundary.
573 GURL tab1_url = embedded_test_server()->GetURL( 622 GURL tab1_url = embedded_test_server()->GetURL(
574 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); 623 "a.com", "/cross_site_iframe_factory.html?a(b,c)");
575 ui_test_utils::NavigateToURL(browser(), tab1_url); 624 ui_test_utils::NavigateToURL(browser(), tab1_url);
576 WebContents* tab1 = browser()->tab_strip_model()->GetWebContentsAt(0); 625 WebContents* tab1 = browser()->tab_strip_model()->GetWebContentsAt(0);
577 GURL tab2_url = embedded_test_server()->GetURL( 626 GURL tab2_url = embedded_test_server()->GetURL(
578 "a.com", "/cross_site_iframe_factory.html?a(d,e)"); 627 "a.com", "/cross_site_iframe_factory.html?a(d,e)");
579 AddTabAtIndex(1, tab2_url, ui::PAGE_TRANSITION_TYPED); 628 AddTabAtIndex(1, tab2_url, ui::PAGE_TRANSITION_TYPED);
580 WebContents* tab2 = browser()->tab_strip_model()->GetWebContentsAt(1); 629 WebContents* tab2 = browser()->tab_strip_model()->GetWebContentsAt(1);
581 630
582 details = new TestMemoryDetails(); 631 details = new TestMemoryDetails();
583 details->StartFetchAndWait(); 632 details->StartFetchAndWait();
584 EXPECT_THAT(details->uma()->GetAllSamples( 633 EXPECT_THAT(details->uma()->GetAllSamples(
585 "SiteIsolation.CurrentRendererProcessCount"), 634 "SiteIsolation.CurrentRendererProcessCount"),
586 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 635 HasOneSample(GetRenderProcessCount()));
587 EXPECT_THAT(details->uma()->GetAllSamples( 636 EXPECT_THAT(details->uma()->GetAllSamples(
588 "SiteIsolation.IsolateNothingProcessCountEstimate"), 637 "SiteIsolation.IsolateNothingProcessCountEstimate"),
589 ElementsAre(Bucket(3, 1))); 638 HasOneSample(3));
590 EXPECT_THAT(details->uma()->GetAllSamples( 639 EXPECT_THAT(details->uma()->GetAllSamples(
591 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 640 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
592 ElementsAre(Bucket(3, 1))); 641 HasOneSample(3));
593 EXPECT_THAT(details->uma()->GetAllSamples( 642 EXPECT_THAT(details->uma()->GetAllSamples(
594 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 643 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
595 ElementsAre(Bucket(2, 1))); 644 HasOneSample(2));
596 EXPECT_THAT(details->uma()->GetAllSamples( 645 EXPECT_THAT(details->uma()->GetAllSamples(
597 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 646 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
598 ElementsAre(Bucket(3, 1))); 647 HasOneSample(3));
599 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 648 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 7));
600 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 649 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
601 EqualsIfExtensionsIsolated(0)); 650 DependingOnPolicy(0, 0, 4));
602 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
603 651
604 // Test that "one process per extension" applies even when web content has an 652 // Test that "one process per extension" applies even when web content has an
605 // extension iframe. 653 // extension iframe.
606 654
607 // Tab1 navigates its first iframe to a resource of extension1. This shouldn't 655 // Tab1 navigates its first iframe to a resource of extension1. This shouldn't
608 // result in a new extension process (it should share with extension1's 656 // result in a new extension process (it should share with extension1's
609 // background page). 657 // background page).
610 content::NavigateIframeToURL( 658 content::NavigateIframeToURL(
611 tab1, "child-0", extension1->GetResourceURL("/blank_iframe.html")); 659 tab1, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
612 details = new TestMemoryDetails(); 660 details = new TestMemoryDetails();
613 details->StartFetchAndWait(); 661 details->StartFetchAndWait();
614 EXPECT_THAT(details->uma()->GetAllSamples( 662 EXPECT_THAT(details->uma()->GetAllSamples(
615 "SiteIsolation.CurrentRendererProcessCount"), 663 "SiteIsolation.CurrentRendererProcessCount"),
616 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 664 HasOneSample(GetRenderProcessCount()));
617 EXPECT_THAT(details->uma()->GetAllSamples( 665 EXPECT_THAT(details->uma()->GetAllSamples(
618 "SiteIsolation.IsolateNothingProcessCountEstimate"), 666 "SiteIsolation.IsolateNothingProcessCountEstimate"),
619 ElementsAre(Bucket(3, 1))); 667 HasOneSample(3));
620 EXPECT_THAT(details->uma()->GetAllSamples( 668 EXPECT_THAT(details->uma()->GetAllSamples(
621 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 669 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
622 ElementsAre(Bucket(3, 1))); 670 HasOneSample(3));
623 EXPECT_THAT(details->uma()->GetAllSamples( 671 EXPECT_THAT(details->uma()->GetAllSamples(
624 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 672 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
625 ElementsAre(Bucket(2, 1))); 673 HasOneSample(2));
626 EXPECT_THAT(details->uma()->GetAllSamples( 674 EXPECT_THAT(details->uma()->GetAllSamples(
627 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 675 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
628 ElementsAre(Bucket(3, 1))); 676 HasOneSample(3));
629 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 677 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 6));
630 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 678 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
631 EqualsIfExtensionsIsolated(1)); 679 DependingOnPolicy(0, 1, 4));
632 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
633 680
634 // Tab2 navigates its first iframe to a resource of extension1. This also 681 // Tab2 navigates its first iframe to a resource of extension1. This also
635 // shouldn't result in a new extension process (it should share with the 682 // shouldn't result in a new extension process (it should share with the
636 // background page and the other iframe). 683 // background page and the other iframe).
637 content::NavigateIframeToURL( 684 content::NavigateIframeToURL(
638 tab2, "child-0", extension1->GetResourceURL("/blank_iframe.html")); 685 tab2, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
639 details = new TestMemoryDetails(); 686 details = new TestMemoryDetails();
640 details->StartFetchAndWait(); 687 details->StartFetchAndWait();
641 EXPECT_THAT(details->uma()->GetAllSamples( 688 EXPECT_THAT(details->uma()->GetAllSamples(
642 "SiteIsolation.CurrentRendererProcessCount"), 689 "SiteIsolation.CurrentRendererProcessCount"),
643 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 690 HasOneSample(GetRenderProcessCount()));
644 EXPECT_THAT(details->uma()->GetAllSamples( 691 EXPECT_THAT(details->uma()->GetAllSamples(
645 "SiteIsolation.IsolateNothingProcessCountEstimate"), 692 "SiteIsolation.IsolateNothingProcessCountEstimate"),
646 ElementsAre(Bucket(3, 1))); 693 HasOneSample(3));
647 EXPECT_THAT(details->uma()->GetAllSamples( 694 EXPECT_THAT(details->uma()->GetAllSamples(
648 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 695 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
649 ElementsAre(Bucket(3, 1))); 696 HasOneSample(3));
650 EXPECT_THAT(details->uma()->GetAllSamples( 697 EXPECT_THAT(details->uma()->GetAllSamples(
651 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 698 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
652 ElementsAre(Bucket(2, 1))); 699 HasOneSample(2));
653 EXPECT_THAT(details->uma()->GetAllSamples( 700 EXPECT_THAT(details->uma()->GetAllSamples(
654 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 701 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
655 ElementsAre(Bucket(3, 1))); 702 HasOneSample(3));
656 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 703 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 5));
657 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 704 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
658 EqualsIfExtensionsIsolated(2)); 705 DependingOnPolicy(0, 2, 4));
659 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
660 706
661 // Tab1 navigates its second iframe to a resource of extension2. This SHOULD 707 // Tab1 navigates its second iframe to a resource of extension2. This SHOULD
662 // result in a new process since extension2 had no existing process. 708 // result in a new process since extension2 had no existing process.
663 content::NavigateIframeToURL( 709 content::NavigateIframeToURL(
664 tab1, "child-1", extension2->GetResourceURL("/blank_iframe.html")); 710 tab1, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
665 details = new TestMemoryDetails(); 711 details = new TestMemoryDetails();
666 details->StartFetchAndWait(); 712 details->StartFetchAndWait();
667 EXPECT_THAT(details->uma()->GetAllSamples( 713 EXPECT_THAT(details->uma()->GetAllSamples(
668 "SiteIsolation.CurrentRendererProcessCount"), 714 "SiteIsolation.CurrentRendererProcessCount"),
669 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 715 HasOneSample(GetRenderProcessCount()));
670 EXPECT_THAT(details->uma()->GetAllSamples( 716 EXPECT_THAT(details->uma()->GetAllSamples(
671 "SiteIsolation.IsolateNothingProcessCountEstimate"), 717 "SiteIsolation.IsolateNothingProcessCountEstimate"),
672 ElementsAre(Bucket(3, 1))); 718 HasOneSample(3));
673 EXPECT_THAT(details->uma()->GetAllSamples( 719 EXPECT_THAT(details->uma()->GetAllSamples(
674 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 720 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
675 ElementsAre(Bucket(4, 1))); 721 HasOneSample(4));
676 EXPECT_THAT(details->uma()->GetAllSamples( 722 EXPECT_THAT(details->uma()->GetAllSamples(
677 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 723 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
678 ElementsAre(Bucket(3, 1))); 724 HasOneSample(3));
679 EXPECT_THAT(details->uma()->GetAllSamples( 725 EXPECT_THAT(details->uma()->GetAllSamples(
680 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 726 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
681 ElementsAre(Bucket(4, 1))); 727 HasOneSample(4));
682 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); 728 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 5));
683 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 729 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
684 EqualsIfExtensionsIsolated(3)); 730 DependingOnPolicy(0, 3, 4));
685 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
686 731
687 // Tab2 navigates its second iframe to a resource of extension2. This should 732 // Tab2 navigates its second iframe to a resource of extension2. This should
688 // share the existing extension2 process. 733 // share the existing extension2 process.
689 content::NavigateIframeToURL( 734 content::NavigateIframeToURL(
690 tab2, "child-1", extension2->GetResourceURL("/blank_iframe.html")); 735 tab2, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
691 details = new TestMemoryDetails(); 736 details = new TestMemoryDetails();
692 details->StartFetchAndWait(); 737 details->StartFetchAndWait();
693 EXPECT_THAT(details->uma()->GetAllSamples( 738 EXPECT_THAT(details->uma()->GetAllSamples(
694 "SiteIsolation.CurrentRendererProcessCount"), 739 "SiteIsolation.CurrentRendererProcessCount"),
695 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 740 HasOneSample(GetRenderProcessCount()));
696 EXPECT_THAT(details->uma()->GetAllSamples( 741 EXPECT_THAT(details->uma()->GetAllSamples(
697 "SiteIsolation.IsolateNothingProcessCountEstimate"), 742 "SiteIsolation.IsolateNothingProcessCountEstimate"),
698 ElementsAre(Bucket(3, 1))); 743 HasOneSample(3));
699 EXPECT_THAT(details->uma()->GetAllSamples( 744 EXPECT_THAT(details->uma()->GetAllSamples(
700 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 745 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
701 ElementsAre(Bucket(4, 1))); 746 HasOneSample(4));
702 EXPECT_THAT(details->uma()->GetAllSamples( 747 EXPECT_THAT(details->uma()->GetAllSamples(
703 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 748 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
704 ElementsAre(Bucket(3, 1))); 749 HasOneSample(3));
705 EXPECT_THAT(details->uma()->GetAllSamples( 750 EXPECT_THAT(details->uma()->GetAllSamples(
706 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 751 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
707 ElementsAre(Bucket(4, 1))); 752 HasOneSample(4));
708 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); 753 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4));
709 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 754 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
710 EqualsIfExtensionsIsolated(4)); 755 DependingOnPolicy(0, 4, 4));
711 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
712 756
713 // Install extension3 (identical config to extension2) 757 // Install extension3 (identical config to extension2)
714 const Extension* extension3 = CreateExtension("Extension Three", false); 758 const Extension* extension3 = CreateExtension("Extension Three", false);
715 759
716 // Navigate Tab2 to a top-level page from extension3. There are four processes 760 // Navigate Tab2 to a top-level page from extension3. There are four processes
717 // now: one for tab1's main frame, and one for each of the extensions: 761 // now: one for tab1's main frame, and one for each of the extensions:
718 // extension1 has a process because it has a background page; extension2 is 762 // extension1 has a process because it has a background page; extension2 is
719 // used as an iframe in tab1, and extension3 is the top-level frame in tab2. 763 // used as an iframe in tab1, and extension3 is the top-level frame in tab2.
720 ui_test_utils::NavigateToURL(browser(), 764 ui_test_utils::NavigateToURL(browser(),
721 extension3->GetResourceURL("blank_iframe.html")); 765 extension3->GetResourceURL("blank_iframe.html"));
722 details = new TestMemoryDetails(); 766 details = new TestMemoryDetails();
723 details->StartFetchAndWait(); 767 details->StartFetchAndWait();
724 EXPECT_THAT(details->uma()->GetAllSamples( 768 EXPECT_THAT(details->uma()->GetAllSamples(
725 "SiteIsolation.CurrentRendererProcessCount"), 769 "SiteIsolation.CurrentRendererProcessCount"),
726 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 770 HasOneSample(GetRenderProcessCount()));
727 EXPECT_THAT(details->uma()->GetAllSamples( 771 EXPECT_THAT(details->uma()->GetAllSamples(
728 "SiteIsolation.IsolateNothingProcessCountEstimate"), 772 "SiteIsolation.IsolateNothingProcessCountEstimate"),
729 ElementsAre(Bucket(3, 1))); 773 HasOneSample(3));
730 EXPECT_THAT(details->uma()->GetAllSamples( 774 EXPECT_THAT(details->uma()->GetAllSamples(
731 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 775 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
732 ElementsAre(Bucket(4, 1))); 776 HasOneSample(4));
733 EXPECT_THAT(details->uma()->GetAllSamples( 777 EXPECT_THAT(details->uma()->GetAllSamples(
734 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 778 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
735 ElementsAre(Bucket(4, 1))); 779 HasOneSample(4));
736 EXPECT_THAT(details->uma()->GetAllSamples( 780 EXPECT_THAT(details->uma()->GetAllSamples(
737 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 781 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
738 ElementsAre(Bucket(4, 1))); 782 HasOneSample(4));
739 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); 783 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4));
740 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 784 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
741 EqualsIfExtensionsIsolated(2)); 785 DependingOnPolicy(0, 2, 2));
742 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
743 786
744 // Navigate tab2 to a different extension3 page containing a web iframe. The 787 // Navigate tab2 to a different extension3 page containing a web iframe. The
745 // iframe should get its own process. The lower bound number indicates that, 788 // iframe should get its own process. The lower bound number indicates that,
746 // in theory, the iframe could share a process with tab1's main frame. 789 // in theory, the iframe could share a process with tab1's main frame.
747 ui_test_utils::NavigateToURL(browser(), 790 ui_test_utils::NavigateToURL(browser(),
748 extension3->GetResourceURL("http_iframe.html")); 791 extension3->GetResourceURL("http_iframe.html"));
749 details = new TestMemoryDetails(); 792 details = new TestMemoryDetails();
750 details->StartFetchAndWait(); 793 details->StartFetchAndWait();
751 EXPECT_THAT(details->uma()->GetAllSamples( 794 EXPECT_THAT(details->uma()->GetAllSamples(
752 "SiteIsolation.CurrentRendererProcessCount"), 795 "SiteIsolation.CurrentRendererProcessCount"),
753 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 796 HasOneSample(GetRenderProcessCount()));
754 EXPECT_THAT(details->uma()->GetAllSamples( 797 EXPECT_THAT(details->uma()->GetAllSamples(
755 "SiteIsolation.IsolateNothingProcessCountEstimate"), 798 "SiteIsolation.IsolateNothingProcessCountEstimate"),
756 ElementsAre(Bucket(3, 1))); 799 HasOneSample(3));
757 EXPECT_THAT(details->uma()->GetAllSamples( 800 EXPECT_THAT(details->uma()->GetAllSamples(
758 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 801 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
759 ElementsAre(Bucket(5, 1))); 802 HasOneSample(5));
760 EXPECT_THAT(details->uma()->GetAllSamples( 803 EXPECT_THAT(details->uma()->GetAllSamples(
761 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 804 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
762 ElementsAre(Bucket(4, 1))); 805 HasOneSample(4));
763 EXPECT_THAT(details->uma()->GetAllSamples( 806 EXPECT_THAT(details->uma()->GetAllSamples(
764 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 807 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
765 ElementsAre(Bucket(5, 1))); 808 HasOneSample(5));
766 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(5)); 809 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 5, 5));
767 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 810 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
768 EqualsIfExtensionsIsolated(3)); 811 DependingOnPolicy(0, 3, 3));
769 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(3));
770 812
771 // Navigate tab1 to an extension3 page with an extension3 iframe. There should 813 // Navigate tab1 to an extension3 page with an extension3 iframe. There should
772 // be three processes estimated by IsolateExtensions: one for extension3, one 814 // be three processes estimated by IsolateExtensions: one for extension3, one
773 // for extension1's background page, and one for the web iframe in tab2. 815 // for extension1's background page, and one for the web iframe in tab2.
774 browser()->tab_strip_model()->ActivateTabAt(0, true); 816 browser()->tab_strip_model()->ActivateTabAt(0, true);
775 ui_test_utils::NavigateToURL(browser(), 817 ui_test_utils::NavigateToURL(browser(),
776 extension3->GetResourceURL("blank_iframe.html")); 818 extension3->GetResourceURL("blank_iframe.html"));
777 details = new TestMemoryDetails(); 819 details = new TestMemoryDetails();
778 details->StartFetchAndWait(); 820 details->StartFetchAndWait();
779 EXPECT_THAT(details->uma()->GetAllSamples( 821 EXPECT_THAT(details->uma()->GetAllSamples(
780 "SiteIsolation.CurrentRendererProcessCount"), 822 "SiteIsolation.CurrentRendererProcessCount"),
781 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 823 HasOneSample(GetRenderProcessCount()));
782 EXPECT_THAT(details->uma()->GetAllSamples( 824 EXPECT_THAT(details->uma()->GetAllSamples(
783 "SiteIsolation.IsolateNothingProcessCountEstimate"), 825 "SiteIsolation.IsolateNothingProcessCountEstimate"),
784 ElementsAre(Bucket(2, 1))); 826 HasOneSample(2));
785 EXPECT_THAT(details->uma()->GetAllSamples( 827 EXPECT_THAT(details->uma()->GetAllSamples(
786 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 828 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
787 ElementsAre(Bucket(3, 1))); 829 HasOneSample(3));
788 EXPECT_THAT(details->uma()->GetAllSamples( 830 EXPECT_THAT(details->uma()->GetAllSamples(
789 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 831 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
790 ElementsAre(Bucket(3, 1))); 832 HasOneSample(3));
791 EXPECT_THAT(details->uma()->GetAllSamples( 833 EXPECT_THAT(details->uma()->GetAllSamples(
792 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 834 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
793 ElementsAre(Bucket(3, 1))); 835 HasOneSample(3));
794 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 836 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 3, 3));
795 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 837 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
796 EqualsIfExtensionsIsolated(1)); 838 DependingOnPolicy(0, 1, 1));
797 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
798 839
799 // Now navigate tab1 to an extension3 page with a web iframe. This could share 840 // Now navigate tab1 to an extension3 page with a web iframe. This could share
800 // a process with tab2's iframe (the LowerBound number), or it could get its 841 // a process with tab2's iframe (the LowerBound number), or it could get its
801 // own process (the Estimate number). 842 // own process (the Estimate number).
802 ui_test_utils::NavigateToURL(browser(), 843 ui_test_utils::NavigateToURL(browser(),
803 extension3->GetResourceURL("http_iframe.html")); 844 extension3->GetResourceURL("http_iframe.html"));
804 details = new TestMemoryDetails(); 845 details = new TestMemoryDetails();
805 details->StartFetchAndWait(); 846 details->StartFetchAndWait();
806 EXPECT_THAT(details->uma()->GetAllSamples( 847 EXPECT_THAT(details->uma()->GetAllSamples(
807 "SiteIsolation.CurrentRendererProcessCount"), 848 "SiteIsolation.CurrentRendererProcessCount"),
808 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 849 HasOneSample(GetRenderProcessCount()));
809 EXPECT_THAT(details->uma()->GetAllSamples( 850 EXPECT_THAT(details->uma()->GetAllSamples(
810 "SiteIsolation.IsolateNothingProcessCountEstimate"), 851 "SiteIsolation.IsolateNothingProcessCountEstimate"),
811 ElementsAre(Bucket(2, 1))); 852 HasOneSample(2));
812 EXPECT_THAT(details->uma()->GetAllSamples( 853 EXPECT_THAT(details->uma()->GetAllSamples(
813 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 854 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
814 ElementsAre(Bucket(4, 1))); 855 HasOneSample(4));
815 EXPECT_THAT(details->uma()->GetAllSamples( 856 EXPECT_THAT(details->uma()->GetAllSamples(
816 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 857 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
817 ElementsAre(Bucket(3, 1))); 858 HasOneSample(3));
818 EXPECT_THAT(details->uma()->GetAllSamples( 859 EXPECT_THAT(details->uma()->GetAllSamples(
819 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 860 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
820 ElementsAre(Bucket(4, 1))); 861 HasOneSample(4));
821 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4)); 862 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 4, 4));
822 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 863 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
823 EqualsIfExtensionsIsolated(2)); 864 DependingOnPolicy(0, 2, 2));
824 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
825 865
826 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); 866 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive"));
827 } 867 }
828 868
829 // Exercises accounting in the case where an extension has two different-site 869 // Exercises accounting in the case where an extension has two different-site
830 // web iframes. 870 // web iframes.
831 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) { 871 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) {
832 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 872 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
833 details->StartFetchAndWait(); 873 details->StartFetchAndWait();
834 874
835 // Install one script-injecting extension with background page, and an 875 // Install one script-injecting extension with background page, and an
836 // extension with web accessible resources. 876 // extension with web accessible resources.
837 const Extension* extension = CreateExtension("Test Extension", false); 877 const Extension* extension = CreateExtension("Test Extension", false);
838 878
839 ui_test_utils::NavigateToURL( 879 ui_test_utils::NavigateToURL(
840 browser(), extension->GetResourceURL("/two_http_iframes.html")); 880 browser(), extension->GetResourceURL("/two_http_iframes.html"));
841 881
842 details = new TestMemoryDetails(); 882 details = new TestMemoryDetails();
843 details->StartFetchAndWait(); 883 details->StartFetchAndWait();
844 EXPECT_THAT(details->uma()->GetAllSamples( 884 EXPECT_THAT(details->uma()->GetAllSamples(
845 "SiteIsolation.CurrentRendererProcessCount"), 885 "SiteIsolation.CurrentRendererProcessCount"),
846 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 886 HasOneSample(GetRenderProcessCount()));
847 EXPECT_THAT(details->uma()->GetAllSamples( 887 EXPECT_THAT(details->uma()->GetAllSamples(
848 "SiteIsolation.IsolateNothingProcessCountEstimate"), 888 "SiteIsolation.IsolateNothingProcessCountEstimate"),
849 ElementsAre(Bucket(1, 1))); 889 HasOneSample(1));
850 EXPECT_THAT(details->uma()->GetAllSamples( 890 EXPECT_THAT(details->uma()->GetAllSamples(
851 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 891 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
852 ElementsAre(Bucket(2, 1))); 892 HasOneSample(2));
853 EXPECT_THAT(details->uma()->GetAllSamples( 893 EXPECT_THAT(details->uma()->GetAllSamples(
854 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 894 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
855 ElementsAre(Bucket(2, 1))); 895 HasOneSample(2));
856 EXPECT_THAT(details->uma()->GetAllSamples( 896 EXPECT_THAT(details->uma()->GetAllSamples(
857 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 897 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
858 ElementsAre(Bucket(2, 1))); 898 HasOneSample(2));
859 // TODO(nick): https://crbug.com/512560 Make the number below agree with the 899 // TODO(nick): https://crbug.com/512560 Make the number below agree with the
860 // estimates above, which assume consolidation of subframe processes. 900 // estimates above, which assume consolidation of subframe processes.
861 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3)); 901 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 3, 3));
862 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 902 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
863 EqualsIfExtensionsIsolated(2)); 903 DependingOnPolicy(0, 2, 2));
864 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
865 904
866 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive")); 905 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive"));
867 } 906 }
868 907
869 // Verifies that --isolate-extensions doesn't isolate hosted apps. 908 // Verifies that --isolate-extensions doesn't isolate hosted apps.
870 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { 909 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
871 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( 910 GURL app_with_web_iframe_url = embedded_test_server()->GetURL(
872 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); 911 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)");
873 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( 912 GURL app_in_web_iframe_url = embedded_test_server()->GetURL(
874 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); 913 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)");
875 914
876 // No hosted app is installed: app.org just behaves like a normal domain. 915 // No hosted app is installed: app.org just behaves like a normal domain.
877 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); 916 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url);
878 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 917 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
879 details->StartFetchAndWait(); 918 details->StartFetchAndWait();
880 EXPECT_THAT(details->uma()->GetAllSamples( 919 EXPECT_THAT(details->uma()->GetAllSamples(
881 "SiteIsolation.CurrentRendererProcessCount"), 920 "SiteIsolation.CurrentRendererProcessCount"),
882 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 921 HasOneSample(GetRenderProcessCount()));
883 EXPECT_THAT(details->uma()->GetAllSamples( 922 EXPECT_THAT(details->uma()->GetAllSamples(
884 "SiteIsolation.IsolateNothingProcessCountEstimate"), 923 "SiteIsolation.IsolateNothingProcessCountEstimate"),
885 ElementsAre(Bucket(1, 1))); 924 HasOneSample(1));
886 EXPECT_THAT(details->uma()->GetAllSamples( 925 EXPECT_THAT(details->uma()->GetAllSamples(
887 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 926 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
888 ElementsAre(Bucket(1, 1))); 927 HasOneSample(1));
889 EXPECT_THAT(details->uma()->GetAllSamples( 928 EXPECT_THAT(details->uma()->GetAllSamples(
890 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 929 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
891 ElementsAre(Bucket(1, 1))); 930 HasOneSample(1));
892 EXPECT_THAT(details->uma()->GetAllSamples( 931 EXPECT_THAT(details->uma()->GetAllSamples(
893 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 932 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
894 ElementsAre(Bucket(1, 1))); 933 HasOneSample(1));
895 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 934 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
896 EXPECT_THAT(details->uma()->GetAllSamples( 935 EXPECT_THAT(details->uma()->GetAllSamples(
897 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 936 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
898 ElementsAre(Bucket(2, 1))); 937 HasOneSample(2));
899 EXPECT_THAT(details->uma()->GetAllSamples( 938 EXPECT_THAT(details->uma()->GetAllSamples(
900 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 939 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
901 ElementsAre(Bucket(2, 1))); 940 HasOneSample(2));
902 EXPECT_THAT(details->uma()->GetAllSamples( 941 EXPECT_THAT(details->uma()->GetAllSamples(
903 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 942 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
904 ElementsAre(Bucket(2, 1))); 943 HasOneSample(2));
905 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); 944 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
906 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 945 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
907 EqualsIfExtensionsIsolated(0)); 946 DependingOnPolicy(0, 0, 1));
908 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
909 947
910 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); 948 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
911 details = new TestMemoryDetails(); 949 details = new TestMemoryDetails();
912 details->StartFetchAndWait(); 950 details->StartFetchAndWait();
913 EXPECT_THAT(details->uma()->GetAllSamples( 951 EXPECT_THAT(details->uma()->GetAllSamples(
914 "SiteIsolation.CurrentRendererProcessCount"), 952 "SiteIsolation.CurrentRendererProcessCount"),
915 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 953 HasOneSample(GetRenderProcessCount()));
916 EXPECT_THAT(details->uma()->GetAllSamples( 954 EXPECT_THAT(details->uma()->GetAllSamples(
917 "SiteIsolation.IsolateNothingProcessCountEstimate"), 955 "SiteIsolation.IsolateNothingProcessCountEstimate"),
918 ElementsAre(Bucket(1, 1))); 956 HasOneSample(1));
919 EXPECT_THAT(details->uma()->GetAllSamples( 957 EXPECT_THAT(details->uma()->GetAllSamples(
920 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 958 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
921 ElementsAre(Bucket(1, 1))); 959 HasOneSample(1));
922 EXPECT_THAT(details->uma()->GetAllSamples( 960 EXPECT_THAT(details->uma()->GetAllSamples(
923 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 961 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
924 ElementsAre(Bucket(1, 1))); 962 HasOneSample(1));
925 EXPECT_THAT(details->uma()->GetAllSamples( 963 EXPECT_THAT(details->uma()->GetAllSamples(
926 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 964 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
927 ElementsAre(Bucket(1, 1))); 965 HasOneSample(1));
928 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 966 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
929 EXPECT_THAT(details->uma()->GetAllSamples( 967 EXPECT_THAT(details->uma()->GetAllSamples(
930 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 968 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
931 ElementsAre(Bucket(2, 1))); 969 HasOneSample(2));
932 EXPECT_THAT(details->uma()->GetAllSamples( 970 EXPECT_THAT(details->uma()->GetAllSamples(
933 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 971 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
934 ElementsAre(Bucket(2, 1))); 972 HasOneSample(2));
935 EXPECT_THAT(details->uma()->GetAllSamples( 973 EXPECT_THAT(details->uma()->GetAllSamples(
936 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 974 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
937 ElementsAre(Bucket(2, 1))); 975 HasOneSample(2));
938 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); 976 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
939 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 977 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
940 EqualsIfExtensionsIsolated(0)); 978 DependingOnPolicy(0, 0, 1));
941 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
942 979
943 // Now install app.org as a hosted app. 980 // Now install app.org as a hosted app.
944 CreateHostedApp("App", GURL("http://app.org")); 981 CreateHostedApp("App", GURL("http://app.org"));
945 982
946 // Reload the same two pages, and verify that the hosted app still is not 983 // Reload the same two pages, and verify that the hosted app still is not
947 // isolated by --isolate-extensions, but is isolated by --site-per-process. 984 // isolated by --isolate-extensions, but is isolated by --site-per-process.
948 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); 985 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url);
949 details = new TestMemoryDetails(); 986 details = new TestMemoryDetails();
950 details->StartFetchAndWait(); 987 details->StartFetchAndWait();
951 EXPECT_THAT(details->uma()->GetAllSamples( 988 EXPECT_THAT(details->uma()->GetAllSamples(
952 "SiteIsolation.CurrentRendererProcessCount"), 989 "SiteIsolation.CurrentRendererProcessCount"),
953 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 990 HasOneSample(GetRenderProcessCount()));
954 EXPECT_THAT(details->uma()->GetAllSamples( 991 EXPECT_THAT(details->uma()->GetAllSamples(
955 "SiteIsolation.IsolateNothingProcessCountEstimate"), 992 "SiteIsolation.IsolateNothingProcessCountEstimate"),
956 ElementsAre(Bucket(1, 1))); 993 HasOneSample(1));
957 EXPECT_THAT(details->uma()->GetAllSamples( 994 EXPECT_THAT(details->uma()->GetAllSamples(
958 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 995 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
959 ElementsAre(Bucket(1, 1))); 996 HasOneSample(1));
960 EXPECT_THAT(details->uma()->GetAllSamples( 997 EXPECT_THAT(details->uma()->GetAllSamples(
961 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 998 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
962 ElementsAre(Bucket(1, 1))); 999 HasOneSample(1));
963 EXPECT_THAT(details->uma()->GetAllSamples( 1000 EXPECT_THAT(details->uma()->GetAllSamples(
964 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 1001 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
965 ElementsAre(Bucket(1, 1))); 1002 HasOneSample(1));
966 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 1003 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
967 EXPECT_THAT(details->uma()->GetAllSamples( 1004 EXPECT_THAT(details->uma()->GetAllSamples(
968 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 1005 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
969 ElementsAre(Bucket(2, 1))); 1006 HasOneSample(2));
970 EXPECT_THAT(details->uma()->GetAllSamples( 1007 EXPECT_THAT(details->uma()->GetAllSamples(
971 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 1008 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
972 ElementsAre(Bucket(2, 1))); 1009 HasOneSample(2));
973 EXPECT_THAT(details->uma()->GetAllSamples( 1010 EXPECT_THAT(details->uma()->GetAllSamples(
974 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 1011 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
975 ElementsAre(Bucket(2, 1))); 1012 HasOneSample(2));
976 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); 1013 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
977 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 1014 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
978 EqualsIfExtensionsIsolated(0)); 1015 DependingOnPolicy(0, 0, 1));
979 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
980 1016
981 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); 1017 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
982 details = new TestMemoryDetails(); 1018 details = new TestMemoryDetails();
983 details->StartFetchAndWait(); 1019 details->StartFetchAndWait();
984 EXPECT_THAT(details->uma()->GetAllSamples( 1020 EXPECT_THAT(details->uma()->GetAllSamples(
985 "SiteIsolation.CurrentRendererProcessCount"), 1021 "SiteIsolation.CurrentRendererProcessCount"),
986 ElementsAre(Bucket(GetRenderProcessCount(), 1))); 1022 HasOneSample(GetRenderProcessCount()));
987 EXPECT_THAT(details->uma()->GetAllSamples( 1023 EXPECT_THAT(details->uma()->GetAllSamples(
988 "SiteIsolation.IsolateNothingProcessCountEstimate"), 1024 "SiteIsolation.IsolateNothingProcessCountEstimate"),
989 ElementsAre(Bucket(1, 1))); 1025 HasOneSample(1));
990 EXPECT_THAT(details->uma()->GetAllSamples( 1026 EXPECT_THAT(details->uma()->GetAllSamples(
991 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 1027 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
992 ElementsAre(Bucket(1, 1))); 1028 HasOneSample(1));
993 EXPECT_THAT(details->uma()->GetAllSamples( 1029 EXPECT_THAT(details->uma()->GetAllSamples(
994 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"), 1030 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
995 ElementsAre(Bucket(1, 1))); 1031 HasOneSample(1));
996 EXPECT_THAT(details->uma()->GetAllSamples( 1032 EXPECT_THAT(details->uma()->GetAllSamples(
997 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"), 1033 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
998 ElementsAre(Bucket(1, 1))); 1034 HasOneSample(1));
999 EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1)); 1035 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1000 EXPECT_THAT(details->uma()->GetAllSamples( 1036 EXPECT_THAT(details->uma()->GetAllSamples(
1001 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 1037 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
1002 ElementsAre(Bucket(2, 1))); 1038 HasOneSample(2));
1003 EXPECT_THAT(details->uma()->GetAllSamples( 1039 EXPECT_THAT(details->uma()->GetAllSamples(
1004 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 1040 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
1005 ElementsAre(Bucket(2, 1))); 1041 HasOneSample(2));
1006 EXPECT_THAT(details->uma()->GetAllSamples( 1042 EXPECT_THAT(details->uma()->GetAllSamples(
1007 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 1043 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
1008 ElementsAre(Bucket(2, 1))); 1044 HasOneSample(2));
1009 EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2)); 1045 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1010 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 1046 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
1011 EqualsIfExtensionsIsolated(0)); 1047 DependingOnPolicy(0, 0, 1));
1012 EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
1013 1048
1014 // Since hosted apps are excluded from isolation, this test should not be 1049 // Since hosted apps are excluded from isolation, this test should not be
1015 // in any of the field trial groups. 1050 // in any of the field trial groups.
1016 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive")); 1051 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive"));
1017 } 1052 }
1018 1053
1019 // Verifies that the client is put in the appropriate field trial group. 1054 // Verifies that the client is put in the appropriate field trial group.
1020 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, VerifyFieldTrialGroup) { 1055 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest, VerifyFieldTrialGroup) {
1021 const Extension* extension = CreateExtension("Extension", false); 1056 const Extension* extension = CreateExtension("Extension", false);
1022 GURL tab1_url = embedded_test_server()->GetURL( 1057 GURL tab1_url = embedded_test_server()->GetURL(
1023 "a.com", "/cross_site_iframe_factory.html?a(b,c)"); 1058 "a.com", "/cross_site_iframe_factory.html?a(b,c)");
1024 ui_test_utils::NavigateToURL(browser(), tab1_url); 1059 ui_test_utils::NavigateToURL(browser(), tab1_url);
1025 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); 1060 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
1026 1061
1027 // Tab navigates its second iframe to a page of the extension. 1062 // Tab navigates its second iframe to a page of the extension.
1028 content::NavigateIframeToURL(tab, "child-1", 1063 content::NavigateIframeToURL(tab, "child-1",
1029 extension->GetResourceURL("/blank_iframe.html")); 1064 extension->GetResourceURL("/blank_iframe.html"));
1030 1065
(...skipping 10 matching lines...) Expand all
1041 } 1076 }
1042 } else { 1077 } else {
1043 group = "Default"; 1078 group = "Default";
1044 } 1079 }
1045 1080
1046 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group)); 1081 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group));
1047 } 1082 }
1048 1083
1049 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is 1084 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
1050 // correct when using tabs with web pages. 1085 // correct when using tabs with web pages.
1051 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, 1086 IN_PROC_BROWSER_TEST_P(SiteDetailsBrowserTest,
1052 VerifySiteInstanceCountInBrowsingInstance) { 1087 VerifySiteInstanceCountInBrowsingInstance) {
1053 // Page with 14 nested oopifs across 9 sites (a.com through i.com). 1088 // Page with 14 nested oopifs across 9 sites (a.com through i.com).
1054 GURL abcdefghi_url = embedded_test_server()->GetURL( 1089 GURL abcdefghi_url = embedded_test_server()->GetURL(
1055 "a.com", 1090 "a.com",
1056 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); 1091 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))");
1057 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); 1092 ui_test_utils::NavigateToURL(browser(), abcdefghi_url);
1058 1093
1059 // Get the metrics. 1094 // Get the metrics.
1060 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 1095 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
1061 details->StartFetchAndWait(); 1096 details->StartFetchAndWait();
1062 if (content::AreAllSitesIsolatedForTesting()) { 1097
1063 EXPECT_THAT(details->uma()->GetAllSamples( 1098 // Since there are no extensions involved, the results in the default case
1064 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1099 // and extensions::IsIsolateExtensionsEnabled() are the same.
1065 ElementsAre(Bucket(9, 1))); 1100 EXPECT_THAT(details->uma()->GetAllSamples(
1066 } else { 1101 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1067 // Since there are no extensions involved, the results in the default case 1102 HasOneSample(DependingOnPolicy(1, 1, 9)));
1068 // and extensions::IsIsolateExtensionsEnabled() are the same.
1069 EXPECT_THAT(details->uma()->GetAllSamples(
1070 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1071 ElementsAre(Bucket(1, 1)));
1072 }
1073 1103
1074 // Open another tab through window.open(), which will be in the same 1104 // Open another tab through window.open(), which will be in the same
1075 // BrowsingInstance. 1105 // BrowsingInstance.
1076 GURL dcbae_url = embedded_test_server()->GetURL( 1106 GURL dcbae_url = embedded_test_server()->GetURL(
1077 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))"); 1107 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))");
1078 ui_test_utils::UrlLoadObserver load_complete( 1108 ui_test_utils::UrlLoadObserver load_complete(
1079 dcbae_url, content::NotificationService::AllSources()); 1109 dcbae_url, content::NotificationService::AllSources());
1080 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 1110 ASSERT_EQ(1, browser()->tab_strip_model()->count());
1081 ASSERT_TRUE(content::ExecuteScript( 1111 ASSERT_TRUE(content::ExecuteScript(
1082 browser()->tab_strip_model()->GetActiveWebContents(), 1112 browser()->tab_strip_model()->GetActiveWebContents(),
1083 "window.open('" + dcbae_url.spec() + "');")); 1113 "window.open('" + dcbae_url.spec() + "');"));
1084 ASSERT_EQ(2, browser()->tab_strip_model()->count()); 1114 ASSERT_EQ(2, browser()->tab_strip_model()->count());
1085 load_complete.Wait(); 1115 load_complete.Wait();
1086 1116
1087 details = new TestMemoryDetails(); 1117 details = new TestMemoryDetails();
1088 details->StartFetchAndWait(); 1118 details->StartFetchAndWait();
1089 if (content::AreAllSitesIsolatedForTesting()) { 1119 EXPECT_THAT(details->uma()->GetAllSamples(
1090 EXPECT_THAT(details->uma()->GetAllSamples( 1120 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1091 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1121 HasOneSample(DependingOnPolicy(1, 1, 11)));
1092 ElementsAre(Bucket(11, 1)));
1093 } else {
1094 EXPECT_THAT(details->uma()->GetAllSamples(
1095 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1096 ElementsAre(Bucket(1, 1)));
1097 }
1098 1122
1099 // Open a tab, which will be in a different BrowsingInstance. 1123 // Open a tab, which will be in a different BrowsingInstance.
1100 GURL abcd_url = embedded_test_server()->GetURL( 1124 GURL abcd_url = embedded_test_server()->GetURL(
1101 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); 1125 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))");
1102 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); 1126 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED);
1103 1127
1104 details = new TestMemoryDetails(); 1128 details = new TestMemoryDetails();
1105 details->StartFetchAndWait(); 1129 details->StartFetchAndWait();
1106 if (content::AreAllSitesIsolatedForTesting()) { 1130 EXPECT_THAT(
1107 EXPECT_THAT(details->uma()->GetAllSamples( 1131 details->uma()->GetAllSamples(
1108 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1132 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1109 ElementsAre(Bucket(4, 1), Bucket(11, 1))); 1133 DependingOnPolicy(ElementsAre(Sample(1, 2)), ElementsAre(Sample(1, 2)),
1110 } else { 1134 ElementsAre(Sample(4, 1), Sample(11, 1))));
1111 EXPECT_THAT(details->uma()->GetAllSamples(
1112 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1113 ElementsAre(Bucket(1, 2)));
1114 }
1115 } 1135 }
1116 1136
1117 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is 1137 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
1118 // correct when extensions and web pages are mixed together. 1138 // correct when extensions and web pages are mixed together.
1119 IN_PROC_BROWSER_TEST_F( 1139 IN_PROC_BROWSER_TEST_P(
1120 SiteDetailsBrowserTest, 1140 SiteDetailsBrowserTest,
1121 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { 1141 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) {
1122 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode 1142 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode
1123 // should have no effect so far, since there are no frames straddling the 1143 // should have no effect so far, since there are no frames straddling the
1124 // extension/web boundary. 1144 // extension/web boundary.
1125 GURL tab_url = embedded_test_server()->GetURL( 1145 GURL tab_url = embedded_test_server()->GetURL(
1126 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); 1146 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))");
1127 ui_test_utils::NavigateToURL(browser(), tab_url); 1147 ui_test_utils::NavigateToURL(browser(), tab_url);
1128 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); 1148 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
1129 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 1149 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
1130 details->StartFetchAndWait(); 1150 details->StartFetchAndWait();
1131 if (content::AreAllSitesIsolatedForTesting()) { 1151
1132 EXPECT_THAT(details->uma()->GetAllSamples( 1152 // Since there are no extensions loaded yet, the results in the default case
1133 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1153 // and extensions::IsIsolateExtensionsEnabled() are the same.
1134 ElementsAre(Bucket(5, 1))); 1154 EXPECT_THAT(details->uma()->GetAllSamples(
1135 } else { 1155 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1136 // Since there are no extensions loaded yet, the results in the default case 1156 HasOneSample(DependingOnPolicy(1, 1, 5)));
1137 // and extensions::IsIsolateExtensionsEnabled() are the same.
1138 EXPECT_THAT(details->uma()->GetAllSamples(
1139 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1140 ElementsAre(Bucket(1, 1)));
1141 }
1142 1157
1143 // Load an extension without a background page, which will avoid creating a 1158 // Load an extension without a background page, which will avoid creating a
1144 // BrowsingInstance for it. 1159 // BrowsingInstance for it.
1145 const Extension* extension1 = CreateExtension("Extension One", false); 1160 const Extension* extension1 = CreateExtension("Extension One", false);
1146 1161
1147 // Navigate the tab's first iframe to a resource of the extension. The 1162 // Navigate the tab's first iframe to a resource of the extension. The
1148 // extension iframe will be put in the same BrowsingInstance as it is part 1163 // extension iframe will be put in the same BrowsingInstance as it is part
1149 // of the frame tree. 1164 // of the frame tree.
1150 content::NavigateIframeToURL( 1165 content::NavigateIframeToURL(
1151 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html")); 1166 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
1152 details = new TestMemoryDetails(); 1167 details = new TestMemoryDetails();
1153 details->StartFetchAndWait(); 1168 details->StartFetchAndWait();
1154 if (content::AreAllSitesIsolatedForTesting()) { 1169 EXPECT_THAT(details->uma()->GetAllSamples(
1155 EXPECT_THAT(details->uma()->GetAllSamples( 1170 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1156 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1171 HasOneSample(DependingOnPolicy(1, 2, 5)));
1157 ElementsAre(Bucket(5, 1)));
1158 } else if (extensions::IsIsolateExtensionsEnabled()) {
1159 EXPECT_THAT(details->uma()->GetAllSamples(
1160 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1161 ElementsAre(Bucket(2, 1)));
1162 } else {
1163 EXPECT_THAT(details->uma()->GetAllSamples(
1164 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1165 ElementsAre(Bucket(1, 1)));
1166 }
1167 1172
1168 // Now load an extension with a background page. This will result in a 1173 // Now load an extension with a background page. This will result in a
1169 // BrowsingInstance for the background page. 1174 // BrowsingInstance for the background page.
1170 const Extension* extension2 = CreateExtension("Extension One", true); 1175 const Extension* extension2 = CreateExtension("Extension One", true);
1171 details = new TestMemoryDetails(); 1176 details = new TestMemoryDetails();
1172 details->StartFetchAndWait(); 1177 details->StartFetchAndWait();
1173 if (content::AreAllSitesIsolatedForTesting()) { 1178 EXPECT_THAT(details->uma()->GetAllSamples(
1174 EXPECT_THAT(details->uma()->GetAllSamples( 1179 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1175 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1180 DependingOnPolicy(ElementsAre(Bucket(1, 2)),
1176 ElementsAre(Bucket(1, 1), Bucket(5, 1))); 1181 ElementsAre(Bucket(1, 1), Bucket(2, 1)),
1177 } else if (extensions::IsIsolateExtensionsEnabled()) { 1182 ElementsAre(Bucket(1, 1), Bucket(5, 1))));
1178 EXPECT_THAT(details->uma()->GetAllSamples(
1179 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1180 ElementsAre(Bucket(1, 1), Bucket(2, 1)));
1181 } else {
1182 EXPECT_THAT(details->uma()->GetAllSamples(
1183 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1184 ElementsAre(Bucket(1, 2)));
1185 }
1186 1183
1187 // Navigate the second iframe of the tab to the second extension. It should 1184 // Navigate the second iframe of the tab to the second extension. It should
1188 // stay in the same BrowsingInstance as the page. 1185 // stay in the same BrowsingInstance as the page.
1189 content::NavigateIframeToURL( 1186 content::NavigateIframeToURL(
1190 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); 1187 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
1191 details = new TestMemoryDetails(); 1188 details = new TestMemoryDetails();
1192 details->StartFetchAndWait(); 1189 details->StartFetchAndWait();
1193 if (content::AreAllSitesIsolatedForTesting()) { 1190 EXPECT_THAT(details->uma()->GetAllSamples(
1194 EXPECT_THAT(details->uma()->GetAllSamples( 1191 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1195 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 1192 DependingOnPolicy(ElementsAre(Bucket(1, 2)),
1196 ElementsAre(Bucket(1, 1), Bucket(5, 1))); 1193 ElementsAre(Bucket(1, 1), Bucket(3, 1)),
1197 } else if (extensions::IsIsolateExtensionsEnabled()) { 1194 ElementsAre(Bucket(1, 1), Bucket(5, 1))));
1198 EXPECT_THAT(details->uma()->GetAllSamples(
1199 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1200 ElementsAre(Bucket(1, 1), Bucket(3, 1)));
1201 } else {
1202 EXPECT_THAT(details->uma()->GetAllSamples(
1203 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1204 ElementsAre(Bucket(1, 2)));
1205 }
1206 } 1195 }
1196
1197 INSTANTIATE_TEST_CASE_P(
1198 ,
1199 SiteDetailsBrowserTest,
1200 testing::Values("",
1201 extensions::switches::kIsolateExtensions,
1202 switches::kSitePerProcess));
OLDNEW
« no previous file with comments | « chrome/browser/site_details.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698