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

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

Issue 2850793005: Remove command line/field trial support and configs for Isolate Extensions. (Closed)
Patch Set: Remove more cases of "isolate.*extension" Created 3 years, 7 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
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 <memory> 10 #include <memory>
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 } 95 }
96 96
97 std::unique_ptr<base::HistogramTester> uma_; 97 std::unique_ptr<base::HistogramTester> uma_;
98 98
99 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails); 99 DISALLOW_COPY_AND_ASSIGN(TestMemoryDetails);
100 }; 100 };
101 101
102 IsolationScenarioType GetCurrentPolicy() { 102 IsolationScenarioType GetCurrentPolicy() {
103 if (content::AreAllSitesIsolatedForTesting()) 103 if (content::AreAllSitesIsolatedForTesting())
104 return ISOLATE_ALL_SITES; 104 return ISOLATE_ALL_SITES;
105 if (extensions::IsIsolateExtensionsEnabled())
106 return ISOLATE_EXTENSIONS;
107 return ISOLATE_NOTHING; 105 return ISOLATE_NOTHING;
108 } 106 }
109 107
110 // This matcher takes three other matchers as arguments, and applies one of them 108 // This matcher takes two other matchers as arguments, and applies one of them
111 // depending on the current site isolation mode. The first applies if no site 109 // depending on the current site isolation mode. The first applies if no site
112 // isolation mode is active; the second applies under --isolate-extensions mode; 110 // isolation mode is active; and the second applies under --site-per-process
113 // and the third applies under --site-per-process mode. 111 // mode.
114 MATCHER_P3(DependingOnPolicy, 112 MATCHER_P2(DependingOnPolicy,
115 isolate_nothing, 113 isolate_nothing,
116 isolate_extensions,
117 isolate_all_sites, 114 isolate_all_sites,
118 GetCurrentPolicy() == ISOLATE_NOTHING 115 GetCurrentPolicy() == ISOLATE_NOTHING
119 ? std::string("(with oopifs disabled) ") + 116 ? std::string("(with oopifs disabled) ") +
120 PrintToString(isolate_nothing) 117 PrintToString(isolate_nothing)
121 : GetCurrentPolicy() == ISOLATE_EXTENSIONS 118 : std::string("(under --site-per-process) ") +
122 ? std::string("(under --isolate-extensions) ") + 119 PrintToString(isolate_all_sites)) {
123 PrintToString(isolate_extensions)
124 : std::string("(under --site-per-process) ") +
125 PrintToString(isolate_all_sites)) {
126 switch (GetCurrentPolicy()) { 120 switch (GetCurrentPolicy()) {
127 case ISOLATE_NOTHING: 121 case ISOLATE_NOTHING:
ncarter (slow) 2017/05/01 20:15:19 ISOLATE_NOTHING ought to be the unreachable case n
nasko 2017/05/01 21:25:37 Are you suggesting it should be #ifdef'd for Andro
ncarter (slow) 2017/05/01 21:37:43 Hmm, probably not necessary to ifdef on android, s
128 return ExplainMatchResult(isolate_nothing, arg, result_listener); 122 return ExplainMatchResult(isolate_nothing, arg, result_listener);
129 case ISOLATE_EXTENSIONS:
130 return ExplainMatchResult(isolate_extensions, arg, result_listener);
131 case ISOLATE_ALL_SITES: 123 case ISOLATE_ALL_SITES:
132 return ExplainMatchResult(isolate_all_sites, arg, result_listener); 124 return ExplainMatchResult(isolate_all_sites, arg, result_listener);
133 default: 125 default:
134 return false; 126 return false;
135 } 127 }
136 } 128 }
137 129
138 // Matcher for base::Bucket objects that allows bucket_min to be a matcher. 130 // Matcher for base::Bucket objects that allows bucket_min to be a matcher.
139 MATCHER_P2(Sample, 131 MATCHER_P2(Sample,
140 bucket_min, 132 bucket_min,
141 count, 133 count,
142 std::string("is a Bucket whose count is ") + PrintToString(count) + 134 std::string("is a Bucket whose count is ") + PrintToString(count) +
143 std::string(" and whose value is ") + 135 std::string(" and whose value is ") +
144 PrintToString(bucket_min)) { 136 PrintToString(bucket_min)) {
145 return ExplainMatchResult(count, arg.count, result_listener) && 137 return ExplainMatchResult(count, arg.count, result_listener) &&
146 ExplainMatchResult(bucket_min, arg.min, result_listener); 138 ExplainMatchResult(bucket_min, arg.min, result_listener);
147 } 139 }
148 140
149 // Allow matchers to be pretty-printed when passed to PrintToString() for the 141 // Allow matchers to be pretty-printed when passed to PrintToString() for the
150 // cases we care about. 142 // cases we care about.
151 template <typename P1, typename P2, typename P3> 143 template <typename P1, typename P2>
152 void PrintTo(const DependingOnPolicyMatcherP3<P1, P2, P3>& matcher, 144 void PrintTo(const DependingOnPolicyMatcherP2<P1, P2>& matcher,
153 std::ostream* os) { 145 std::ostream* os) {
154 testing::Matcher<int> matcherCast = matcher; 146 testing::Matcher<int> matcherCast = matcher;
155 matcherCast.DescribeTo(os); 147 matcherCast.DescribeTo(os);
156 } 148 }
157 149
158 template <typename P1, typename P2> 150 template <typename P1, typename P2>
159 void PrintTo(const SampleMatcherP2<P1, P2>& matcher, std::ostream* os) { 151 void PrintTo(const SampleMatcherP2<P1, P2>& matcher, std::ostream* os) {
160 testing::Matcher<Bucket> matcherCast = matcher; 152 testing::Matcher<Bucket> matcherCast = matcher;
161 matcherCast.DescribeTo(os); 153 matcherCast.DescribeTo(os);
162 } 154 }
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 HasOneSample(9)); 388 HasOneSample(9));
397 EXPECT_THAT(details->uma()->GetAllSamples( 389 EXPECT_THAT(details->uma()->GetAllSamples(
398 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 390 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
399 HasOneSample(1)); 391 HasOneSample(1));
400 EXPECT_THAT(details->uma()->GetAllSamples( 392 EXPECT_THAT(details->uma()->GetAllSamples(
401 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 393 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
402 HasOneSample(1)); 394 HasOneSample(1));
403 EXPECT_THAT(details->uma()->GetAllSamples( 395 EXPECT_THAT(details->uma()->GetAllSamples(
404 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 396 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
405 HasOneSample(1)); 397 HasOneSample(1));
406 EXPECT_THAT(details->uma()->GetAllSamples( 398 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 9));
407 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 399 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 14));
408 HasOneSample(1));
409 EXPECT_THAT(details->uma()->GetAllSamples(
410 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
411 HasOneSample(1));
412 EXPECT_THAT(details->uma()->GetAllSamples(
413 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
414 HasOneSample(1));
415 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 9));
416 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
417 DependingOnPolicy(0, 0, 14));
418 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 400 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
419 HasOneSample(DependingOnPolicy(0, 0, 114))); 401 HasOneSample(DependingOnPolicy(0, 114)));
420 EXPECT_THAT(details->uma()->GetAllSamples( 402 EXPECT_THAT(details->uma()->GetAllSamples(
421 "SiteIsolation.ProxyCountPerBrowsingInstance"), 403 "SiteIsolation.ProxyCountPerBrowsingInstance"),
422 HasOneSample(DependingOnPolicy(0, 0, 114))); 404 HasOneSample(DependingOnPolicy(0, 114)));
423 405
424 // Navigate to a different, disjoint set of 7 sites. 406 // Navigate to a different, disjoint set of 7 sites.
425 GURL pqrstuv_url = embedded_test_server()->GetURL( 407 GURL pqrstuv_url = embedded_test_server()->GetURL(
426 "p.com", 408 "p.com",
427 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))"); 409 "/cross_site_iframe_factory.html?p(q(r),r(s),s(t),t(q),u(u),v(p))");
428 ui_test_utils::NavigateToURL(browser(), pqrstuv_url); 410 ui_test_utils::NavigateToURL(browser(), pqrstuv_url);
429 411
430 details = new TestMemoryDetails(); 412 details = new TestMemoryDetails();
431 details->StartFetchAndWait(); 413 details->StartFetchAndWait();
432 414
(...skipping 18 matching lines...) Expand all
451 HasOneSample(7)); 433 HasOneSample(7));
452 EXPECT_THAT(details->uma()->GetAllSamples( 434 EXPECT_THAT(details->uma()->GetAllSamples(
453 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 435 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
454 HasOneSample(1)); 436 HasOneSample(1));
455 EXPECT_THAT(details->uma()->GetAllSamples( 437 EXPECT_THAT(details->uma()->GetAllSamples(
456 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 438 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
457 HasOneSample(1)); 439 HasOneSample(1));
458 EXPECT_THAT(details->uma()->GetAllSamples( 440 EXPECT_THAT(details->uma()->GetAllSamples(
459 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 441 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
460 HasOneSample(1)); 442 HasOneSample(1));
461 EXPECT_THAT(details->uma()->GetAllSamples( 443 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 7));
462 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 444 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 11));
463 HasOneSample(1));
464 EXPECT_THAT(details->uma()->GetAllSamples(
465 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
466 HasOneSample(1));
467 EXPECT_THAT(details->uma()->GetAllSamples(
468 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
469 HasOneSample(1));
470 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 7));
471 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
472 DependingOnPolicy(0, 0, 11));
473 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 445 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
474 HasOneSample(DependingOnPolicy(0, 0, 68))); 446 HasOneSample(DependingOnPolicy(0, 68)));
475 EXPECT_THAT(details->uma()->GetAllSamples( 447 EXPECT_THAT(details->uma()->GetAllSamples(
476 "SiteIsolation.ProxyCountPerBrowsingInstance"), 448 "SiteIsolation.ProxyCountPerBrowsingInstance"),
477 HasOneSample(DependingOnPolicy(0, 0, 68))); 449 HasOneSample(DependingOnPolicy(0, 68)));
478 450
479 // Open a second tab (different BrowsingInstance) with 4 sites (a through d). 451 // Open a second tab (different BrowsingInstance) with 4 sites (a through d).
480 GURL abcd_url = embedded_test_server()->GetURL( 452 GURL abcd_url = embedded_test_server()->GetURL(
481 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); 453 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))");
482 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); 454 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED);
483 455
484 details = new TestMemoryDetails(); 456 details = new TestMemoryDetails();
485 details->StartFetchAndWait(); 457 details->StartFetchAndWait();
486 458
487 EXPECT_EQ(2U, details->CountPageTitles()); 459 EXPECT_EQ(2U, details->CountPageTitles());
(...skipping 17 matching lines...) Expand all
505 HasOneSample(11)); 477 HasOneSample(11));
506 EXPECT_THAT(details->uma()->GetAllSamples( 478 EXPECT_THAT(details->uma()->GetAllSamples(
507 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 479 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
508 HasOneSample(2)); 480 HasOneSample(2));
509 EXPECT_THAT(details->uma()->GetAllSamples( 481 EXPECT_THAT(details->uma()->GetAllSamples(
510 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 482 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
511 HasOneSample(1)); // TODO(nick): This should be 2. 483 HasOneSample(1)); // TODO(nick): This should be 2.
512 EXPECT_THAT(details->uma()->GetAllSamples( 484 EXPECT_THAT(details->uma()->GetAllSamples(
513 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 485 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
514 HasOneSample(2)); 486 HasOneSample(2));
487 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 11));
488 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 14));
489 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
490 HasOneSample(DependingOnPolicy(0, 81)));
515 EXPECT_THAT(details->uma()->GetAllSamples( 491 EXPECT_THAT(details->uma()->GetAllSamples(
516 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 492 "SiteIsolation.ProxyCountPerBrowsingInstance"),
517 HasOneSample(2)); 493 DependingOnPolicy(ElementsAre(Bucket(0, 2)),
518 EXPECT_THAT(details->uma()->GetAllSamples( 494 ElementsAre(Bucket(12, 1), Bucket(68, 1))));
519 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
520 HasOneSample(1));
521 EXPECT_THAT(details->uma()->GetAllSamples(
522 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
523 HasOneSample(2));
524 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 2, 11));
525 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
526 DependingOnPolicy(0, 0, 14));
527 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
528 HasOneSample(DependingOnPolicy(0, 0, 81)));
529 EXPECT_THAT(
530 details->uma()->GetAllSamples(
531 "SiteIsolation.ProxyCountPerBrowsingInstance"),
532 DependingOnPolicy(ElementsAre(Bucket(0, 2)), ElementsAre(Bucket(0, 2)),
533 ElementsAre(Bucket(12, 1), Bucket(68, 1))));
534 495
535 // Open a third tab (different BrowsingInstance) with the same 4 sites. 496 // Open a third tab (different BrowsingInstance) with the same 4 sites.
536 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED); 497 AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED);
537 498
538 details = new TestMemoryDetails(); 499 details = new TestMemoryDetails();
539 details->StartFetchAndWait(); 500 details->StartFetchAndWait();
540 501
541 EXPECT_THAT( 502 EXPECT_THAT(
542 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"), 503 details->uma()->GetAllSamples("SiteIsolation.BrowsingInstanceCount"),
543 HasOneSample(3)); 504 HasOneSample(3));
(...skipping 15 matching lines...) Expand all
559 HasOneSample(15)); 520 HasOneSample(15));
560 EXPECT_THAT(details->uma()->GetAllSamples( 521 EXPECT_THAT(details->uma()->GetAllSamples(
561 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 522 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
562 HasOneSample(3)); 523 HasOneSample(3));
563 EXPECT_THAT(details->uma()->GetAllSamples( 524 EXPECT_THAT(details->uma()->GetAllSamples(
564 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 525 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
565 HasOneSample(1)); // TODO(nick): This should be 3. 526 HasOneSample(1)); // TODO(nick): This should be 3.
566 EXPECT_THAT(details->uma()->GetAllSamples( 527 EXPECT_THAT(details->uma()->GetAllSamples(
567 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 528 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
568 HasOneSample(3)); 529 HasOneSample(3));
530 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 15));
531 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 17));
532 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
533 HasOneSample(DependingOnPolicy(0, 96)));
569 EXPECT_THAT(details->uma()->GetAllSamples( 534 EXPECT_THAT(details->uma()->GetAllSamples(
570 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 535 "SiteIsolation.ProxyCountPerBrowsingInstance"),
571 HasOneSample(3)); 536 DependingOnPolicy(ElementsAre(Bucket(0, 3)),
572 EXPECT_THAT(details->uma()->GetAllSamples( 537 ElementsAre(Bucket(12, 2), Bucket(68, 1))));
573 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
574 HasOneSample(1));
575 EXPECT_THAT(details->uma()->GetAllSamples(
576 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
577 HasOneSample(3));
578 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 15));
579 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
580 DependingOnPolicy(0, 0, 17));
581 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
582 HasOneSample(DependingOnPolicy(0, 0, 96)));
583 EXPECT_THAT(
584 details->uma()->GetAllSamples(
585 "SiteIsolation.ProxyCountPerBrowsingInstance"),
586 DependingOnPolicy(ElementsAre(Bucket(0, 3)), ElementsAre(Bucket(0, 3)),
587 ElementsAre(Bucket(12, 2), Bucket(68, 1))));
588 538
589 // From the third tab, window.open() a fourth tab in the same 539 // From the third tab, window.open() a fourth tab in the same
590 // BrowsingInstance, to a page using the same four sites "a-d" as third tab, 540 // BrowsingInstance, to a page using the same four sites "a-d" as third tab,
591 // plus an additional site "e". The estimated process counts should increase 541 // plus an additional site "e". The estimated process counts should increase
592 // by one (not five) from the previous scenario, as the new tab can reuse the 542 // by one (not five) from the previous scenario, as the new tab can reuse the
593 // four processes already in the BrowsingInstance. 543 // four processes already in the BrowsingInstance.
594 GURL dcbae_url = embedded_test_server()->GetURL( 544 GURL dcbae_url = embedded_test_server()->GetURL(
595 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))"); 545 "a.com", "/cross_site_iframe_factory.html?d(c(b(a(e))))");
596 ui_test_utils::UrlLoadObserver load_complete( 546 ui_test_utils::UrlLoadObserver load_complete(
597 dcbae_url, content::NotificationService::AllSources()); 547 dcbae_url, content::NotificationService::AllSources());
(...skipping 28 matching lines...) Expand all
626 HasOneSample(16)); 576 HasOneSample(16));
627 EXPECT_THAT(details->uma()->GetAllSamples( 577 EXPECT_THAT(details->uma()->GetAllSamples(
628 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"), 578 "SiteIsolation.IsolateHttpsSitesProcessCountEstimate"),
629 HasOneSample(3)); 579 HasOneSample(3));
630 EXPECT_THAT(details->uma()->GetAllSamples( 580 EXPECT_THAT(details->uma()->GetAllSamples(
631 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"), 581 "SiteIsolation.IsolateHttpsSitesProcessCountLowerBound"),
632 HasOneSample(1)); // TODO(nick): This should be 3. 582 HasOneSample(1)); // TODO(nick): This should be 3.
633 EXPECT_THAT(details->uma()->GetAllSamples( 583 EXPECT_THAT(details->uma()->GetAllSamples(
634 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"), 584 "SiteIsolation.IsolateHttpsSitesProcessCountNoLimit"),
635 HasOneSample(3)); 585 HasOneSample(3));
636 EXPECT_THAT(details->uma()->GetAllSamples( 586 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 16));
637 "SiteIsolation.IsolateExtensionsProcessCountEstimate"), 587 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 21));
638 HasOneSample(3));
639 EXPECT_THAT(details->uma()->GetAllSamples(
640 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
641 HasOneSample(1));
642 EXPECT_THAT(details->uma()->GetAllSamples(
643 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
644 HasOneSample(3));
645 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 16));
646 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
647 DependingOnPolicy(0, 0, 21));
648 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 588 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
649 HasOneSample(DependingOnPolicy(0, 0, 114))); 589 HasOneSample(DependingOnPolicy(0, 114)));
650 EXPECT_THAT(details->uma()->GetAllSamples( 590 EXPECT_THAT(details->uma()->GetAllSamples(
651 "SiteIsolation.ProxyCountPerBrowsingInstance"), 591 "SiteIsolation.ProxyCountPerBrowsingInstance"),
652 DependingOnPolicy( 592 DependingOnPolicy(
653 ElementsAre(Bucket(0, 3)), ElementsAre(Bucket(0, 3)), 593 ElementsAre(Bucket(0, 3)),
654 ElementsAre(Bucket(12, 1), Bucket(29, 1), Bucket(68, 1)))); 594 ElementsAre(Bucket(12, 1), Bucket(29, 1), Bucket(68, 1))));
655
656 // This test doesn't navigate to any extensions URLs, so it should not be
657 // in any of the field trial groups.
658 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive"));
659 }
660
661 // Flaky on Windows and Mac. crbug.com/671891
662 #if defined(OS_WIN) || defined(OS_MACOSX)
663 #define MAYBE_IsolateExtensions DISABLED_IsolateExtensions
664 #else
665 #define MAYBE_IsolateExtensions IsolateExtensions
666 #endif
667 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, MAYBE_IsolateExtensions) {
668 // We start on "about:blank", which should be credited with a process in this
669 // case.
670 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
671 details->StartFetchAndWait();
672 EXPECT_THAT(details->uma()->GetAllSamples(
673 "SiteIsolation.CurrentRendererProcessCount"),
674 HasOneSample(GetRenderProcessCount()));
675 EXPECT_THAT(details->uma()->GetAllSamples(
676 "SiteIsolation.IsolateNothingProcessCountEstimate"),
677 HasOneSample(1));
678 EXPECT_THAT(details->uma()->GetAllSamples(
679 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
680 HasOneSample(1));
681 EXPECT_THAT(details->uma()->GetAllSamples(
682 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
683 HasOneSample(1));
684 EXPECT_THAT(details->uma()->GetAllSamples(
685 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
686 HasOneSample(1));
687 EXPECT_THAT(GetRenderProcessCount(), 1);
688 EXPECT_EQ(0, details->GetOutOfProcessIframeCount());
689
690 // Install one script-injecting extension with background page, and an
691 // extension with web accessible resources.
692 const Extension* extension1 = CreateExtension("Extension One", true);
693 const Extension* extension2 = CreateExtension("Extension Two", false);
694
695 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode
696 // should have no effect so far, since there are no frames straddling the
697 // extension/web boundary.
698 GURL tab1_url = embedded_test_server()->GetURL(
699 "a.com", "/cross_site_iframe_factory.html?a(b,c)");
700 ui_test_utils::NavigateToURL(browser(), tab1_url);
701 WebContents* tab1 = browser()->tab_strip_model()->GetWebContentsAt(0);
702 GURL tab2_url = embedded_test_server()->GetURL(
703 "a.com", "/cross_site_iframe_factory.html?a(d,e)");
704 AddTabAtIndex(1, tab2_url, ui::PAGE_TRANSITION_TYPED);
705 WebContents* tab2 = browser()->tab_strip_model()->GetWebContentsAt(1);
706
707 details = new TestMemoryDetails();
708 details->StartFetchAndWait();
709 EXPECT_THAT(details->uma()->GetAllSamples(
710 "SiteIsolation.CurrentRendererProcessCount"),
711 HasOneSample(GetRenderProcessCount()));
712 EXPECT_THAT(details->uma()->GetAllSamples(
713 "SiteIsolation.IsolateNothingProcessCountEstimate"),
714 HasOneSample(3));
715 EXPECT_THAT(details->uma()->GetAllSamples(
716 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
717 HasOneSample(3));
718 EXPECT_THAT(details->uma()->GetAllSamples(
719 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
720 HasOneSample(2));
721 EXPECT_THAT(details->uma()->GetAllSamples(
722 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
723 HasOneSample(3));
724 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 7));
725 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
726 DependingOnPolicy(0, 0, 4));
727
728 // Test that "one process per extension" applies even when web content has an
729 // extension iframe.
730
731 // Tab1 navigates its first iframe to a resource of extension1. This shouldn't
732 // result in a new extension process (it should share with extension1's
733 // background page).
734 content::NavigateIframeToURL(
735 tab1, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
736 details = new TestMemoryDetails();
737 details->StartFetchAndWait();
738 EXPECT_THAT(details->uma()->GetAllSamples(
739 "SiteIsolation.CurrentRendererProcessCount"),
740 HasOneSample(GetRenderProcessCount()));
741 EXPECT_THAT(details->uma()->GetAllSamples(
742 "SiteIsolation.IsolateNothingProcessCountEstimate"),
743 HasOneSample(3));
744 EXPECT_THAT(details->uma()->GetAllSamples(
745 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
746 HasOneSample(3));
747 EXPECT_THAT(details->uma()->GetAllSamples(
748 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
749 HasOneSample(2));
750 EXPECT_THAT(details->uma()->GetAllSamples(
751 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
752 HasOneSample(3));
753 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 6));
754 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
755 DependingOnPolicy(0, 1, 4));
756
757 // Tab2 navigates its first iframe to a resource of extension1. This also
758 // shouldn't result in a new extension process (it should share with the
759 // background page and the other iframe).
760 content::NavigateIframeToURL(
761 tab2, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
762 details = new TestMemoryDetails();
763 details->StartFetchAndWait();
764 EXPECT_THAT(details->uma()->GetAllSamples(
765 "SiteIsolation.CurrentRendererProcessCount"),
766 HasOneSample(GetRenderProcessCount()));
767 EXPECT_THAT(details->uma()->GetAllSamples(
768 "SiteIsolation.IsolateNothingProcessCountEstimate"),
769 HasOneSample(3));
770 EXPECT_THAT(details->uma()->GetAllSamples(
771 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
772 HasOneSample(3));
773 EXPECT_THAT(details->uma()->GetAllSamples(
774 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
775 HasOneSample(2));
776 EXPECT_THAT(details->uma()->GetAllSamples(
777 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
778 HasOneSample(3));
779 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 3, 5));
780 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
781 DependingOnPolicy(0, 2, 4));
782
783 // Tab1 navigates its second iframe to a resource of extension2. This SHOULD
784 // result in a new process since extension2 had no existing process.
785 content::NavigateIframeToURL(
786 tab1, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
787 details = new TestMemoryDetails();
788 details->StartFetchAndWait();
789 EXPECT_THAT(details->uma()->GetAllSamples(
790 "SiteIsolation.CurrentRendererProcessCount"),
791 HasOneSample(GetRenderProcessCount()));
792 EXPECT_THAT(details->uma()->GetAllSamples(
793 "SiteIsolation.IsolateNothingProcessCountEstimate"),
794 HasOneSample(3));
795 EXPECT_THAT(details->uma()->GetAllSamples(
796 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
797 HasOneSample(4));
798 EXPECT_THAT(details->uma()->GetAllSamples(
799 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
800 HasOneSample(3));
801 EXPECT_THAT(details->uma()->GetAllSamples(
802 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
803 HasOneSample(4));
804 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 5));
805 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
806 DependingOnPolicy(0, 3, 4));
807
808 // Tab2 navigates its second iframe to a resource of extension2. This should
809 // share the existing extension2 process.
810 content::NavigateIframeToURL(
811 tab2, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
812 details = new TestMemoryDetails();
813 details->StartFetchAndWait();
814 EXPECT_THAT(details->uma()->GetAllSamples(
815 "SiteIsolation.CurrentRendererProcessCount"),
816 HasOneSample(GetRenderProcessCount()));
817 EXPECT_THAT(details->uma()->GetAllSamples(
818 "SiteIsolation.IsolateNothingProcessCountEstimate"),
819 HasOneSample(3));
820 EXPECT_THAT(details->uma()->GetAllSamples(
821 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
822 HasOneSample(4));
823 EXPECT_THAT(details->uma()->GetAllSamples(
824 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
825 HasOneSample(3));
826 EXPECT_THAT(details->uma()->GetAllSamples(
827 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
828 HasOneSample(4));
829 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4));
830 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
831 DependingOnPolicy(0, 4, 4));
832
833 // Install extension3 (identical config to extension2)
834 const Extension* extension3 = CreateExtension("Extension Three", false);
835
836 // Navigate Tab2 to a top-level page from extension3. There are four processes
837 // now: one for tab1's main frame, and one for each of the extensions:
838 // extension1 has a process because it has a background page; extension2 is
839 // used as an iframe in tab1, and extension3 is the top-level frame in tab2.
840 ui_test_utils::NavigateToURL(browser(),
841 extension3->GetResourceURL("blank_iframe.html"));
842 details = new TestMemoryDetails();
843 details->StartFetchAndWait();
844 EXPECT_THAT(details->uma()->GetAllSamples(
845 "SiteIsolation.CurrentRendererProcessCount"),
846 HasOneSample(GetRenderProcessCount()));
847 EXPECT_THAT(details->uma()->GetAllSamples(
848 "SiteIsolation.IsolateNothingProcessCountEstimate"),
849 HasOneSample(3));
850 EXPECT_THAT(details->uma()->GetAllSamples(
851 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
852 HasOneSample(4));
853 EXPECT_THAT(details->uma()->GetAllSamples(
854 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
855 HasOneSample(4));
856 EXPECT_THAT(details->uma()->GetAllSamples(
857 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
858 HasOneSample(4));
859 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 4, 4));
860 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
861 DependingOnPolicy(0, 2, 2));
862
863 // Navigate tab2 to a different extension3 page containing a web iframe. The
864 // iframe should get its own process. The lower bound number indicates that,
865 // in theory, the iframe could share a process with tab1's main frame.
866 ui_test_utils::NavigateToURL(browser(),
867 extension3->GetResourceURL("http_iframe.html"));
868 details = new TestMemoryDetails();
869 details->StartFetchAndWait();
870 EXPECT_THAT(details->uma()->GetAllSamples(
871 "SiteIsolation.CurrentRendererProcessCount"),
872 HasOneSample(GetRenderProcessCount()));
873 EXPECT_THAT(details->uma()->GetAllSamples(
874 "SiteIsolation.IsolateNothingProcessCountEstimate"),
875 HasOneSample(3));
876 EXPECT_THAT(details->uma()->GetAllSamples(
877 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
878 HasOneSample(5));
879 EXPECT_THAT(details->uma()->GetAllSamples(
880 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
881 HasOneSample(4));
882 EXPECT_THAT(details->uma()->GetAllSamples(
883 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
884 HasOneSample(5));
885 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(3, 5, 5));
886 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
887 DependingOnPolicy(0, 3, 3));
888
889 // Navigate tab1 to an extension3 page with an extension3 iframe. There should
890 // be three processes estimated by IsolateExtensions: one for extension3, one
891 // for extension1's background page, and one for the web iframe in tab2.
892 browser()->tab_strip_model()->ActivateTabAt(0, true);
893 ui_test_utils::NavigateToURL(browser(),
894 extension3->GetResourceURL("blank_iframe.html"));
895 details = new TestMemoryDetails();
896 details->StartFetchAndWait();
897 EXPECT_THAT(details->uma()->GetAllSamples(
898 "SiteIsolation.CurrentRendererProcessCount"),
899 HasOneSample(GetRenderProcessCount()));
900 EXPECT_THAT(details->uma()->GetAllSamples(
901 "SiteIsolation.IsolateNothingProcessCountEstimate"),
902 HasOneSample(2));
903 EXPECT_THAT(details->uma()->GetAllSamples(
904 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
905 HasOneSample(3));
906 EXPECT_THAT(details->uma()->GetAllSamples(
907 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
908 HasOneSample(3));
909 EXPECT_THAT(details->uma()->GetAllSamples(
910 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
911 HasOneSample(3));
912 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 3, 3));
913 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
914 DependingOnPolicy(0, 1, 1));
915
916 // Now navigate tab1 to an extension3 page with a web iframe. This could share
917 // a process with tab2's iframe (the LowerBound number), or it could get its
918 // own process (the Estimate number).
919 ui_test_utils::NavigateToURL(browser(),
920 extension3->GetResourceURL("http_iframe.html"));
921 details = new TestMemoryDetails();
922 details->StartFetchAndWait();
923 EXPECT_THAT(details->uma()->GetAllSamples(
924 "SiteIsolation.CurrentRendererProcessCount"),
925 HasOneSample(GetRenderProcessCount()));
926 EXPECT_THAT(details->uma()->GetAllSamples(
927 "SiteIsolation.IsolateNothingProcessCountEstimate"),
928 HasOneSample(2));
929 EXPECT_THAT(details->uma()->GetAllSamples(
930 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
931 HasOneSample(4));
932 EXPECT_THAT(details->uma()->GetAllSamples(
933 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
934 HasOneSample(3));
935 EXPECT_THAT(details->uma()->GetAllSamples(
936 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
937 HasOneSample(4));
938 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(2, 4, 4));
939 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
940 DependingOnPolicy(0, 2, 2));
941
942 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive"));
943 } 595 }
944 596
945 // Due to http://crbug.com/612711, we are not isolating iframes from platform 597 // Due to http://crbug.com/612711, we are not isolating iframes from platform
946 // apps with --isolate-extenions. 598 // apps with --isolate-extenions.
947 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, PlatformAppsNotIsolated) { 599 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, PlatformAppsNotIsolated) {
948 // --site-per-process will still isolate iframes from platform apps, so skip 600 // --site-per-process will still isolate iframes from platform apps, so skip
949 // the test in that case. 601 // the test in that case.
950 if (content::AreAllSitesIsolatedForTesting()) 602 if (content::AreAllSitesIsolatedForTesting())
951 return; 603 return;
952 CreateAppWithSandboxPage("Extension One"); 604 CreateAppWithSandboxPage("Extension One");
953 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 605 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
954 details->StartFetchAndWait(); 606 details->StartFetchAndWait();
955 EXPECT_EQ(0, details->GetOutOfProcessIframeCount()); 607 EXPECT_EQ(0, details->GetOutOfProcessIframeCount());
956 } 608 }
957 609
958 // Exercises accounting in the case where an extension has two different-site 610 // Verifies that hosted apps are not isolated.
959 // web iframes.
960 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) {
961 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
962 details->StartFetchAndWait();
963
964 // Install one script-injecting extension with background page, and an
965 // extension with web accessible resources.
966 const Extension* extension = CreateExtension("Test Extension", false);
967
968 ui_test_utils::NavigateToURL(
969 browser(), extension->GetResourceURL("/two_http_iframes.html"));
970
971 details = new TestMemoryDetails();
972 details->StartFetchAndWait();
973 EXPECT_THAT(details->uma()->GetAllSamples(
974 "SiteIsolation.CurrentRendererProcessCount"),
975 HasOneSample(GetRenderProcessCount()));
976 EXPECT_THAT(details->uma()->GetAllSamples(
977 "SiteIsolation.IsolateNothingProcessCountEstimate"),
978 HasOneSample(1));
979 EXPECT_THAT(details->uma()->GetAllSamples(
980 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
981 HasOneSample(2));
982 EXPECT_THAT(details->uma()->GetAllSamples(
983 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
984 HasOneSample(2));
985 EXPECT_THAT(details->uma()->GetAllSamples(
986 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
987 HasOneSample(2));
988 // TODO(nick): https://crbug.com/512560 Make the number below agree with the
989 // estimates above, which assume consolidation of subframe processes.
990 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 3, 3));
991 EXPECT_THAT(details->GetOutOfProcessIframeCount(),
992 DependingOnPolicy(0, 2, 2));
993
994 EXPECT_TRUE(IsInTrial("SiteIsolationExtensionsActive"));
995 }
996
997 // Verifies that --isolate-extensions doesn't isolate hosted apps.
998 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) { 611 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
999 GURL app_with_web_iframe_url = embedded_test_server()->GetURL( 612 GURL app_with_web_iframe_url = embedded_test_server()->GetURL(
1000 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)"); 613 "app.org", "/cross_site_iframe_factory.html?app.org(b.com)");
1001 GURL app_in_web_iframe_url = embedded_test_server()->GetURL( 614 GURL app_in_web_iframe_url = embedded_test_server()->GetURL(
1002 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)"); 615 "b.com", "/cross_site_iframe_factory.html?b.com(app.org)");
1003 616
1004 // No hosted app is installed: app.org just behaves like a normal domain. 617 // No hosted app is installed: app.org just behaves like a normal domain.
1005 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); 618 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url);
1006 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 619 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
1007 details->StartFetchAndWait(); 620 details->StartFetchAndWait();
1008 EXPECT_THAT(details->uma()->GetAllSamples( 621 EXPECT_THAT(details->uma()->GetAllSamples(
1009 "SiteIsolation.CurrentRendererProcessCount"), 622 "SiteIsolation.CurrentRendererProcessCount"),
1010 HasOneSample(GetRenderProcessCount())); 623 HasOneSample(GetRenderProcessCount()));
1011 EXPECT_THAT(details->uma()->GetAllSamples( 624 EXPECT_THAT(details->uma()->GetAllSamples(
1012 "SiteIsolation.IsolateNothingProcessCountEstimate"), 625 "SiteIsolation.IsolateNothingProcessCountEstimate"),
1013 HasOneSample(1)); 626 HasOneSample(1));
1014 EXPECT_THAT(details->uma()->GetAllSamples( 627 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1015 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
1016 HasOneSample(1));
1017 EXPECT_THAT(details->uma()->GetAllSamples(
1018 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
1019 HasOneSample(1));
1020 EXPECT_THAT(details->uma()->GetAllSamples(
1021 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
1022 HasOneSample(1));
1023 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1024 EXPECT_THAT(details->uma()->GetAllSamples( 628 EXPECT_THAT(details->uma()->GetAllSamples(
1025 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 629 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
1026 HasOneSample(2)); 630 HasOneSample(2));
1027 EXPECT_THAT(details->uma()->GetAllSamples( 631 EXPECT_THAT(details->uma()->GetAllSamples(
1028 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 632 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
1029 HasOneSample(2)); 633 HasOneSample(2));
1030 EXPECT_THAT(details->uma()->GetAllSamples( 634 EXPECT_THAT(details->uma()->GetAllSamples(
1031 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 635 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
1032 HasOneSample(2)); 636 HasOneSample(2));
1033 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); 637 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1034 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 638 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 1));
1035 DependingOnPolicy(0, 0, 1));
1036 639
1037 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); 640 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
1038 details = new TestMemoryDetails(); 641 details = new TestMemoryDetails();
1039 details->StartFetchAndWait(); 642 details->StartFetchAndWait();
1040 EXPECT_THAT(details->uma()->GetAllSamples( 643 EXPECT_THAT(details->uma()->GetAllSamples(
1041 "SiteIsolation.CurrentRendererProcessCount"), 644 "SiteIsolation.CurrentRendererProcessCount"),
1042 HasOneSample(GetRenderProcessCount())); 645 HasOneSample(GetRenderProcessCount()));
1043 EXPECT_THAT(details->uma()->GetAllSamples( 646 EXPECT_THAT(details->uma()->GetAllSamples(
1044 "SiteIsolation.IsolateNothingProcessCountEstimate"), 647 "SiteIsolation.IsolateNothingProcessCountEstimate"),
1045 HasOneSample(1)); 648 HasOneSample(1));
1046 EXPECT_THAT(details->uma()->GetAllSamples( 649 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1047 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
1048 HasOneSample(1));
1049 EXPECT_THAT(details->uma()->GetAllSamples(
1050 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
1051 HasOneSample(1));
1052 EXPECT_THAT(details->uma()->GetAllSamples(
1053 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
1054 HasOneSample(1));
1055 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1056 EXPECT_THAT(details->uma()->GetAllSamples( 650 EXPECT_THAT(details->uma()->GetAllSamples(
1057 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 651 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
1058 HasOneSample(2)); 652 HasOneSample(2));
1059 EXPECT_THAT(details->uma()->GetAllSamples( 653 EXPECT_THAT(details->uma()->GetAllSamples(
1060 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 654 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
1061 HasOneSample(2)); 655 HasOneSample(2));
1062 EXPECT_THAT(details->uma()->GetAllSamples( 656 EXPECT_THAT(details->uma()->GetAllSamples(
1063 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 657 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
1064 HasOneSample(2)); 658 HasOneSample(2));
1065 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); 659 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1066 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 660 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 1));
1067 DependingOnPolicy(0, 0, 1));
1068 661
1069 // Now install app.org as a hosted app. 662 // Now install app.org as a hosted app.
1070 CreateHostedApp("App", GURL("http://app.org")); 663 CreateHostedApp("App", GURL("http://app.org"));
1071 664
1072 // Reload the same two pages, and verify that the hosted app still is not 665 // Reload the same two pages, and verify that the hosted app still is not
1073 // isolated by --isolate-extensions, but is isolated by --site-per-process. 666 // isolated by default, but is isolated by --site-per-process.
1074 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url); 667 ui_test_utils::NavigateToURL(browser(), app_with_web_iframe_url);
1075 details = new TestMemoryDetails(); 668 details = new TestMemoryDetails();
1076 details->StartFetchAndWait(); 669 details->StartFetchAndWait();
1077 EXPECT_THAT(details->uma()->GetAllSamples( 670 EXPECT_THAT(details->uma()->GetAllSamples(
1078 "SiteIsolation.CurrentRendererProcessCount"), 671 "SiteIsolation.CurrentRendererProcessCount"),
1079 HasOneSample(GetRenderProcessCount())); 672 HasOneSample(GetRenderProcessCount()));
1080 EXPECT_THAT(details->uma()->GetAllSamples( 673 EXPECT_THAT(details->uma()->GetAllSamples(
1081 "SiteIsolation.IsolateNothingProcessCountEstimate"), 674 "SiteIsolation.IsolateNothingProcessCountEstimate"),
1082 HasOneSample(1)); 675 HasOneSample(1));
1083 EXPECT_THAT(details->uma()->GetAllSamples( 676 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1084 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
1085 HasOneSample(1));
1086 EXPECT_THAT(details->uma()->GetAllSamples(
1087 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
1088 HasOneSample(1));
1089 EXPECT_THAT(details->uma()->GetAllSamples(
1090 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
1091 HasOneSample(1));
1092 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1093 EXPECT_THAT(details->uma()->GetAllSamples( 677 EXPECT_THAT(details->uma()->GetAllSamples(
1094 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 678 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
1095 HasOneSample(2)); 679 HasOneSample(2));
1096 EXPECT_THAT(details->uma()->GetAllSamples( 680 EXPECT_THAT(details->uma()->GetAllSamples(
1097 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 681 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
1098 HasOneSample(2)); 682 HasOneSample(2));
1099 EXPECT_THAT(details->uma()->GetAllSamples( 683 EXPECT_THAT(details->uma()->GetAllSamples(
1100 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 684 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
1101 HasOneSample(2)); 685 HasOneSample(2));
1102 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); 686 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1103 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 687 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 1));
1104 DependingOnPolicy(0, 0, 1));
1105 688
1106 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url); 689 ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
1107 details = new TestMemoryDetails(); 690 details = new TestMemoryDetails();
1108 details->StartFetchAndWait(); 691 details->StartFetchAndWait();
1109 EXPECT_THAT(details->uma()->GetAllSamples( 692 EXPECT_THAT(details->uma()->GetAllSamples(
1110 "SiteIsolation.CurrentRendererProcessCount"), 693 "SiteIsolation.CurrentRendererProcessCount"),
1111 HasOneSample(GetRenderProcessCount())); 694 HasOneSample(GetRenderProcessCount()));
1112 EXPECT_THAT(details->uma()->GetAllSamples( 695 EXPECT_THAT(details->uma()->GetAllSamples(
1113 "SiteIsolation.IsolateNothingProcessCountEstimate"), 696 "SiteIsolation.IsolateNothingProcessCountEstimate"),
1114 HasOneSample(1)); 697 HasOneSample(1));
1115 EXPECT_THAT(details->uma()->GetAllSamples( 698 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1116 "SiteIsolation.IsolateExtensionsProcessCountEstimate"),
1117 HasOneSample(1));
1118 EXPECT_THAT(details->uma()->GetAllSamples(
1119 "SiteIsolation.IsolateExtensionsProcessCountLowerBound"),
1120 HasOneSample(1));
1121 EXPECT_THAT(details->uma()->GetAllSamples(
1122 "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
1123 HasOneSample(1));
1124 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2));
1125 EXPECT_THAT(details->uma()->GetAllSamples( 699 EXPECT_THAT(details->uma()->GetAllSamples(
1126 "SiteIsolation.IsolateAllSitesProcessCountEstimate"), 700 "SiteIsolation.IsolateAllSitesProcessCountEstimate"),
1127 HasOneSample(2)); 701 HasOneSample(2));
1128 EXPECT_THAT(details->uma()->GetAllSamples( 702 EXPECT_THAT(details->uma()->GetAllSamples(
1129 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"), 703 "SiteIsolation.IsolateAllSitesProcessCountLowerBound"),
1130 HasOneSample(2)); 704 HasOneSample(2));
1131 EXPECT_THAT(details->uma()->GetAllSamples( 705 EXPECT_THAT(details->uma()->GetAllSamples(
1132 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"), 706 "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
1133 HasOneSample(2)); 707 HasOneSample(2));
1134 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 1, 2)); 708 EXPECT_THAT(GetRenderProcessCount(), DependingOnPolicy(1, 2));
1135 EXPECT_THAT(details->GetOutOfProcessIframeCount(), 709 EXPECT_THAT(details->GetOutOfProcessIframeCount(), DependingOnPolicy(0, 1));
1136 DependingOnPolicy(0, 0, 1));
1137
1138 // Since hosted apps are excluded from isolation, this test should not be
1139 // in any of the field trial groups.
1140 EXPECT_FALSE(IsInTrial("SiteIsolationExtensionsActive"));
1141 }
1142
1143 // Verifies that the client is put in the appropriate field trial group.
1144 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, VerifyFieldTrialGroup) {
1145 const Extension* extension = CreateExtension("Extension", false);
1146 GURL tab1_url = embedded_test_server()->GetURL(
1147 "a.com", "/cross_site_iframe_factory.html?a(b,c)");
1148 ui_test_utils::NavigateToURL(browser(), tab1_url);
1149 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
1150
1151 // Tab navigates its second iframe to a page of the extension.
1152 content::NavigateIframeToURL(tab, "child-1",
1153 extension->GetResourceURL("/blank_iframe.html"));
1154
1155 std::string group;
1156 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
1157 switches::kSitePerProcess)) {
1158 group = "SitePerProcessFlag";
1159 } else if (extensions::IsIsolateExtensionsEnabled()) {
1160 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
1161 extensions::switches::kIsolateExtensions)) {
1162 group = "IsolateExtensionsFlag";
1163 } else {
1164 group = "FieldTrial";
1165 }
1166 } else {
1167 if (base::FieldTrialList::FindFullName("SiteIsolationExtensions").empty())
1168 group = "Default";
1169 else
1170 group = "Control";
1171 }
1172
1173 EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group));
1174 } 710 }
1175 711
1176 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is 712 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
1177 // correct when using tabs with web pages. 713 // correct when using tabs with web pages.
1178 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, 714 IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest,
1179 VerifySiteInstanceCountInBrowsingInstance) { 715 VerifySiteInstanceCountInBrowsingInstance) {
1180 // Page with 14 nested oopifs across 9 sites (a.com through i.com). 716 // Page with 14 nested oopifs across 9 sites (a.com through i.com).
1181 GURL abcdefghi_url = embedded_test_server()->GetURL( 717 GURL abcdefghi_url = embedded_test_server()->GetURL(
1182 "a.com", 718 "a.com",
1183 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))"); 719 "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))");
1184 ui_test_utils::NavigateToURL(browser(), abcdefghi_url); 720 ui_test_utils::NavigateToURL(browser(), abcdefghi_url);
1185 721
1186 // Get the metrics. 722 // Get the metrics.
1187 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 723 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
1188 details->StartFetchAndWait(); 724 details->StartFetchAndWait();
1189 725
1190 // Since there are no extensions involved, the results in the default case
1191 // and extensions::IsIsolateExtensionsEnabled() are the same.
1192 EXPECT_THAT(details->uma()->GetAllSamples( 726 EXPECT_THAT(details->uma()->GetAllSamples(
1193 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 727 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1194 HasOneSample(DependingOnPolicy(1, 1, 9))); 728 HasOneSample(DependingOnPolicy(1, 9)));
1195 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 729 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
1196 HasOneSample(DependingOnPolicy(0, 0, 114))); 730 HasOneSample(DependingOnPolicy(0, 114)));
1197 EXPECT_THAT(details->uma()->GetAllSamples( 731 EXPECT_THAT(details->uma()->GetAllSamples(
1198 "SiteIsolation.ProxyCountPerBrowsingInstance"), 732 "SiteIsolation.ProxyCountPerBrowsingInstance"),
1199 HasOneSample(DependingOnPolicy(0, 0, 114))); 733 HasOneSample(DependingOnPolicy(0, 114)));
1200 734
1201 // Open another tab through window.open(), which will be in the same 735 // Open another tab through window.open(), which will be in the same
1202 // BrowsingInstance. 736 // BrowsingInstance.
1203 GURL dcbae_url = embedded_test_server()->GetURL( 737 GURL dcbae_url = embedded_test_server()->GetURL(
1204 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))"); 738 "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))");
1205 ui_test_utils::UrlLoadObserver load_complete( 739 ui_test_utils::UrlLoadObserver load_complete(
1206 dcbae_url, content::NotificationService::AllSources()); 740 dcbae_url, content::NotificationService::AllSources());
1207 ASSERT_EQ(1, browser()->tab_strip_model()->count()); 741 ASSERT_EQ(1, browser()->tab_strip_model()->count());
1208 ASSERT_TRUE(content::ExecuteScript( 742 ASSERT_TRUE(content::ExecuteScript(
1209 browser()->tab_strip_model()->GetActiveWebContents(), 743 browser()->tab_strip_model()->GetActiveWebContents(),
1210 "window.open('" + dcbae_url.spec() + "');")); 744 "window.open('" + dcbae_url.spec() + "');"));
1211 ASSERT_EQ(2, browser()->tab_strip_model()->count()); 745 ASSERT_EQ(2, browser()->tab_strip_model()->count());
1212 load_complete.Wait(); 746 load_complete.Wait();
1213 747
1214 details = new TestMemoryDetails(); 748 details = new TestMemoryDetails();
1215 details->StartFetchAndWait(); 749 details->StartFetchAndWait();
1216 EXPECT_THAT(details->uma()->GetAllSamples( 750 EXPECT_THAT(details->uma()->GetAllSamples(
1217 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 751 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1218 HasOneSample(DependingOnPolicy(1, 1, 11))); 752 HasOneSample(DependingOnPolicy(1, 11)));
1219 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 753 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
1220 HasOneSample(DependingOnPolicy(0, 0, 160))); 754 HasOneSample(DependingOnPolicy(0, 160)));
1221 EXPECT_THAT(details->uma()->GetAllSamples( 755 EXPECT_THAT(details->uma()->GetAllSamples(
1222 "SiteIsolation.ProxyCountPerBrowsingInstance"), 756 "SiteIsolation.ProxyCountPerBrowsingInstance"),
1223 HasOneSample(DependingOnPolicy(0, 0, 160))); 757 HasOneSample(DependingOnPolicy(0, 160)));
1224 758
1225 // Open a tab, which will be in a different BrowsingInstance. 759 // Open a tab, which will be in a different BrowsingInstance.
1226 GURL abcd_url = embedded_test_server()->GetURL( 760 GURL abcd_url = embedded_test_server()->GetURL(
1227 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))"); 761 "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))");
1228 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED); 762 AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED);
1229 763
1230 details = new TestMemoryDetails(); 764 details = new TestMemoryDetails();
1231 details->StartFetchAndWait(); 765 details->StartFetchAndWait();
1232 EXPECT_THAT( 766 EXPECT_THAT(details->uma()->GetAllSamples(
1233 details->uma()->GetAllSamples( 767 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1234 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 768 DependingOnPolicy(ElementsAre(Sample(1, 2)),
1235 DependingOnPolicy(ElementsAre(Sample(1, 2)), ElementsAre(Sample(1, 2)), 769 ElementsAre(Sample(4, 1), Sample(11, 1))));
1236 ElementsAre(Sample(4, 1), Sample(11, 1))));
1237 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"), 770 EXPECT_THAT(details->uma()->GetAllSamples("SiteIsolation.ProxyCount"),
1238 HasOneSample(DependingOnPolicy(0, 0, 160))); 771 HasOneSample(DependingOnPolicy(0, 160)));
1239 EXPECT_THAT( 772 EXPECT_THAT(details->uma()->GetAllSamples(
1240 details->uma()->GetAllSamples( 773 "SiteIsolation.ProxyCountPerBrowsingInstance"),
1241 "SiteIsolation.ProxyCountPerBrowsingInstance"), 774 DependingOnPolicy(ElementsAre(Sample(0, 2)),
1242 DependingOnPolicy(ElementsAre(Sample(0, 2)), ElementsAre(Sample(0, 2)), 775 ElementsAre(Sample(12, 1), Sample(160, 1))));
1243 ElementsAre(Sample(12, 1), Sample(160, 1))));
1244 } 776 }
1245 777
1246 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is 778 // Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
1247 // correct when extensions and web pages are mixed together. 779 // correct when extensions and web pages are mixed together.
1248 IN_PROC_BROWSER_TEST_F( 780 IN_PROC_BROWSER_TEST_F(
1249 SiteDetailsBrowserTest, 781 SiteDetailsBrowserTest,
1250 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) { 782 VerifySiteInstanceCountInBrowsingInstanceWithExtensions) {
1251 // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode 783 // Open two a.com tabs (with cross site http iframes). Isolating extensions
1252 // should have no effect so far, since there are no frames straddling the 784 // should have no effect so far, since there are no frames straddling the
1253 // extension/web boundary. 785 // extension/web boundary.
1254 GURL tab_url = embedded_test_server()->GetURL( 786 GURL tab_url = embedded_test_server()->GetURL(
1255 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))"); 787 "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))");
1256 ui_test_utils::NavigateToURL(browser(), tab_url); 788 ui_test_utils::NavigateToURL(browser(), tab_url);
1257 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0); 789 WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
1258 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails(); 790 scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
1259 details->StartFetchAndWait(); 791 details->StartFetchAndWait();
1260
1261 // Since there are no extensions loaded yet, the results in the default case
1262 // and extensions::IsIsolateExtensionsEnabled() are the same.
1263 EXPECT_THAT(details->uma()->GetAllSamples( 792 EXPECT_THAT(details->uma()->GetAllSamples(
1264 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 793 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1265 HasOneSample(DependingOnPolicy(1, 1, 5))); 794 HasOneSample(DependingOnPolicy(1, 5)));
1266 795
1267 // Load an extension without a background page, which will avoid creating a 796 // Load an extension without a background page, which will avoid creating a
1268 // BrowsingInstance for it. 797 // BrowsingInstance for it.
1269 const Extension* extension1 = CreateExtension("Extension One", false); 798 const Extension* extension1 = CreateExtension("Extension One", false);
1270 799
1271 // Navigate the tab's first iframe to a resource of the extension. The 800 // Navigate the tab's first iframe to a resource of the extension. The
1272 // extension iframe will be put in the same BrowsingInstance as it is part 801 // extension iframe will be put in the same BrowsingInstance as it is part
1273 // of the frame tree. 802 // of the frame tree.
1274 content::NavigateIframeToURL( 803 content::NavigateIframeToURL(
1275 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html")); 804 tab, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
1276 details = new TestMemoryDetails(); 805 details = new TestMemoryDetails();
1277 details->StartFetchAndWait(); 806 details->StartFetchAndWait();
1278 EXPECT_THAT(details->uma()->GetAllSamples( 807 EXPECT_THAT(details->uma()->GetAllSamples(
1279 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 808 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1280 HasOneSample(DependingOnPolicy(1, 2, 5))); 809 HasOneSample(DependingOnPolicy(2, 5)));
1281 810
1282 // Now load an extension with a background page. This will result in a 811 // Now load an extension with a background page. This will result in a
1283 // BrowsingInstance for the background page. 812 // BrowsingInstance for the background page.
1284 const Extension* extension2 = CreateExtension("Extension Two", true); 813 const Extension* extension2 = CreateExtension("Extension Two", true);
1285 details = new TestMemoryDetails(); 814 details = new TestMemoryDetails();
1286 details->StartFetchAndWait(); 815 details->StartFetchAndWait();
1287 EXPECT_THAT(details->uma()->GetAllSamples( 816 EXPECT_THAT(details->uma()->GetAllSamples(
1288 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 817 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1289 DependingOnPolicy(ElementsAre(Bucket(1, 2)), 818 DependingOnPolicy(ElementsAre(Bucket(1, 1), Bucket(2, 1)),
1290 ElementsAre(Bucket(1, 1), Bucket(2, 1)),
1291 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); 819 ElementsAre(Bucket(1, 1), Bucket(5, 1))));
1292 820
1293 // Navigate the second iframe of the tab to the second extension. It should 821 // Navigate the second iframe of the tab to the second extension. It should
1294 // stay in the same BrowsingInstance as the page. 822 // stay in the same BrowsingInstance as the page.
1295 content::NavigateIframeToURL( 823 content::NavigateIframeToURL(
1296 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html")); 824 tab, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
1297 details = new TestMemoryDetails(); 825 details = new TestMemoryDetails();
1298 details->StartFetchAndWait(); 826 details->StartFetchAndWait();
1299 EXPECT_THAT(details->uma()->GetAllSamples( 827 EXPECT_THAT(details->uma()->GetAllSamples(
1300 "SiteIsolation.SiteInstancesPerBrowsingInstance"), 828 "SiteIsolation.SiteInstancesPerBrowsingInstance"),
1301 DependingOnPolicy(ElementsAre(Bucket(1, 2)), 829 DependingOnPolicy(ElementsAre(Bucket(1, 1), Bucket(3, 1)),
1302 ElementsAre(Bucket(1, 1), Bucket(3, 1)),
1303 ElementsAre(Bucket(1, 1), Bucket(5, 1)))); 830 ElementsAre(Bucket(1, 1), Bucket(5, 1))));
1304 } 831 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698