| Index: chrome/browser/site_details_browsertest.cc
|
| diff --git a/chrome/browser/site_details_browsertest.cc b/chrome/browser/site_details_browsertest.cc
|
| index a11d9b2cf32174b2ef0f244b92dbe91e45556dab..530b65071365e53c5f6915e38f6108da9ce5ed8c 100644
|
| --- a/chrome/browser/site_details_browsertest.cc
|
| +++ b/chrome/browser/site_details_browsertest.cc
|
| @@ -56,6 +56,13 @@ class TestMemoryDetails : public MetricsMemoryDetails {
|
| // StartFetchAndWait().
|
| base::HistogramTester* uma() { return uma_.get(); }
|
|
|
| + int GetOutOfProcessIframeCount() {
|
| + std::vector<Bucket> buckets =
|
| + uma_->GetAllSamples("SiteIsolation.OutOfProcessIframes");
|
| + CHECK_EQ(1U, buckets.size());
|
| + return buckets[0].min;
|
| + }
|
| +
|
| size_t CountPageTitles() {
|
| size_t count = 0;
|
| for (const ProcessMemoryInformation& process : ChromeBrowser()->processes) {
|
| @@ -256,6 +263,10 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) {
|
| ElementsAre(Bucket(1, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(9));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfSitePerProcess(14));
|
|
|
| // Navigate to a different, disjoint set of 7 sites.
|
| GURL pqrstuv_url = embedded_test_server()->GetURL(
|
| @@ -305,6 +316,10 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) {
|
| ElementsAre(Bucket(1, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(1));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(7));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfSitePerProcess(11));
|
|
|
| // Open a second tab (different BrowsingInstance) with 4 sites (a through d).
|
| GURL abcd_url = embedded_test_server()->GetURL(
|
| @@ -353,6 +368,10 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) {
|
| ElementsAre(Bucket(2, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(2));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(11));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfSitePerProcess(14));
|
|
|
| // Open a third tab (different BrowsingInstance) with the same 4 sites.
|
| AddTabAtIndex(2, abcd_url, ui::PAGE_TRANSITION_TYPED);
|
| @@ -399,6 +418,10 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) {
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(15));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfSitePerProcess(17));
|
|
|
| // From the third tab, window.open() a fourth tab in the same
|
| // BrowsingInstance, to a page using the same four sites "a-d" as third tab,
|
| @@ -458,6 +481,10 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ManyIframes) {
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(16));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfSitePerProcess(21));
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| @@ -481,6 +508,7 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(1, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), 1);
|
| + EXPECT_EQ(0, details->GetOutOfProcessIframeCount());
|
|
|
| // Install one script-injecting extension with background page, and an
|
| // extension with web accessible resources.
|
| @@ -517,6 +545,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
|
|
|
| // Test that "one process per extension" applies even when web content has an
|
| // extension iframe.
|
| @@ -544,6 +575,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(1));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
|
|
|
| // Tab2 navigates its first iframe to a resource of extension1. This also
|
| // shouldn't result in a new extension process (it should share with the
|
| @@ -568,6 +602,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
|
|
|
| // Tab1 navigates its second iframe to a resource of extension2. This SHOULD
|
| // result in a new process since extension2 had no existing process.
|
| @@ -591,6 +628,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(4, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
|
|
|
| // Tab2 navigates its second iframe to a resource of extension2. This should
|
| // share the existing extension2 process.
|
| @@ -614,6 +654,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(4, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(4));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(4));
|
|
|
| // Install extension3 (identical config to extension2)
|
| const Extension* extension3 = CreateExtension("Extension Three", false);
|
| @@ -642,6 +685,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(4, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
|
|
|
| // Navigate tab2 to a different extension3 page containing a web iframe. The
|
| // iframe should get its own process. The lower bound number indicates that,
|
| @@ -666,6 +712,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(5, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(5));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(3));
|
|
|
| // Navigate tab1 to an extension3 page with an extension3 iframe. There should
|
| // be three processes estimated by IsolateExtensions: one for extension3, one
|
| @@ -691,6 +740,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(3, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(1));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
|
|
|
| // Now navigate tab1 to an extension3 page with a web iframe. This could share
|
| // a process with tab2's iframe (the LowerBound number), or it could get its
|
| @@ -715,6 +767,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensions) {
|
| "SiteIsolation.IsolateExtensionsProcessCountNoLimit"),
|
| ElementsAre(Bucket(4, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(4));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
|
| }
|
|
|
| // Exercises accounting in the case where an extension has two different-site
|
| @@ -750,6 +805,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, ExtensionWithTwoWebIframes) {
|
| // TODO(nick): https://crbug.com/512560 Make the number below agree with the
|
| // estimates above, which assume consolidation of subframe processes.
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfExtensionsIsolated(3));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(2));
|
| }
|
|
|
| // Verifies that --isolate-extensions doesn't isolate hosted apps.
|
| @@ -789,6 +847,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
|
| "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
|
| ElementsAre(Bucket(2, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
|
|
|
| ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
|
| details = new TestMemoryDetails();
|
| @@ -819,6 +880,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
|
| "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
|
| ElementsAre(Bucket(2, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
|
|
|
| // Now install app.org as a hosted app.
|
| CreateHostedApp("App", GURL("http://app.org"));
|
| @@ -854,6 +918,9 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
|
| "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
|
| ElementsAre(Bucket(2, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
|
|
|
| ui_test_utils::NavigateToURL(browser(), app_in_web_iframe_url);
|
| details = new TestMemoryDetails();
|
| @@ -884,4 +951,7 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, IsolateExtensionsHostedApps) {
|
| "SiteIsolation.IsolateAllSitesProcessCountNoLimit"),
|
| ElementsAre(Bucket(2, 1)));
|
| EXPECT_THAT(GetRenderProcessCount(), EqualsIfSitePerProcess(2));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(),
|
| + EqualsIfExtensionsIsolated(0));
|
| + EXPECT_THAT(details->GetOutOfProcessIframeCount(), EqualsIfSitePerProcess(1));
|
| }
|
|
|