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

Unified Diff: chrome/browser/site_details_browsertest.cc

Issue 1492033002: Add UMA histogram for the number of SiteInstances per BrowsingInstance. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes based on Scott's review. Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/site_details.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/site_details_browsertest.cc
diff --git a/chrome/browser/site_details_browsertest.cc b/chrome/browser/site_details_browsertest.cc
index e36ce88a3d6c2ee0d3ade232f2ddc490fb447867..a810cf76a1022b814b18bb60fcc8ecd5dfea3bee 100644
--- a/chrome/browser/site_details_browsertest.cc
+++ b/chrome/browser/site_details_browsertest.cc
@@ -1035,3 +1035,163 @@ IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest, VerifyFieldTrialGroup) {
EXPECT_TRUE(IsInTrialGroup("SiteIsolationExtensionsActive", group));
}
+
+// Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
+// correct when using tabs with web pages.
+IN_PROC_BROWSER_TEST_F(SiteDetailsBrowserTest,
+ VerifySiteInstanceCountInBrowsingInstance) {
+ // Page with 14 nested oopifs across 9 sites (a.com through i.com).
+ GURL abcdefghi_url = embedded_test_server()->GetURL(
+ "a.com",
+ "/cross_site_iframe_factory.html?a(b(a(b,c,d,e,f,g,h)),c,d,e,i(f))");
+ ui_test_utils::NavigateToURL(browser(), abcdefghi_url);
+
+ // Get the metrics.
+ scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(9, 1)));
+ } else {
+ // Since there are no extensions involved, the results in the default case
+ // and extensions::IsIsolateExtensionsEnabled() are the same.
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 1)));
+ }
+
+ // Open another tab through window.open(), which will be in the same
+ // BrowsingInstance.
+ GURL dcbae_url = embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?d(c(b(j(k))))");
+ ui_test_utils::UrlLoadObserver load_complete(
+ dcbae_url, content::NotificationService::AllSources());
+ ASSERT_EQ(1, browser()->tab_strip_model()->count());
+ ASSERT_TRUE(content::ExecuteScript(
+ browser()->tab_strip_model()->GetActiveWebContents(),
+ "window.open('" + dcbae_url.spec() + "');"));
+ ASSERT_EQ(2, browser()->tab_strip_model()->count());
+ load_complete.Wait();
+
+ details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(11, 1)));
+ } else {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 1)));
+ }
+
+ // Open a tab, which will be in a different BrowsingInstance.
+ GURL abcd_url = embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?a(b(c(d())))");
+ AddTabAtIndex(1, abcd_url, ui::PAGE_TRANSITION_TYPED);
+
+ details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(4, 1), Bucket(11, 1)));
+ } else {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 2)));
+ }
+}
+
+// Verifies that the UMA counter for SiteInstances in a BrowsingInstance is
+// correct when extensions and web pages are mixed together.
+IN_PROC_BROWSER_TEST_F(
+ SiteDetailsBrowserTest,
+ VerifySiteInstanceCountInBrowsingInstanceWithExtensions) {
+ // Open two a.com tabs (with cross site http iframes). IsolateExtensions mode
+ // should have no effect so far, since there are no frames straddling the
+ // extension/web boundary.
+ GURL tab_url = embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?a(b,c,d(e))");
+ ui_test_utils::NavigateToURL(browser(), tab_url);
+ WebContents* tab = browser()->tab_strip_model()->GetWebContentsAt(0);
+ scoped_refptr<TestMemoryDetails> details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(5, 1)));
+ } else {
+ // Since there are no extensions loaded yet, the results in the default case
+ // and extensions::IsIsolateExtensionsEnabled() are the same.
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 1)));
+ }
+
+ // Load an extension without a background page, which will avoid creating a
+ // BrowsingInstance for it.
+ const Extension* extension1 = CreateExtension("Extension One", false);
+
+ // Navigate the tab's first iframe to a resource of the extension. The
+ // extension iframe will be put in a separate BrowsingInstance (see
+ // https://crbug.com/522302) unless in the default process model.
+ content::NavigateIframeToURL(
+ tab, "child-0", extension1->GetResourceURL("/blank_iframe.html"));
+ details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 1), Bucket(4, 1)));
+ } else if (extensions::IsIsolateExtensionsEnabled()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 2)));
+ } else {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 1)));
+ }
+
+ // Now load an extension with a background page. This will result in a
+ // BrowsingInstance for the background page.
+ const Extension* extension2 = CreateExtension("Extension One", true);
+ details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 2), Bucket(4, 1)));
+ } else if (extensions::IsIsolateExtensionsEnabled()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 3)));
+ } else {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 2)));
+ }
+
+ // Navigate the second iframe of the tab to the second extension. This will
+ // create a new BrowsingInstance again due to https://crbug.com/522302 for
+ // --site-per-process and --isolate-extensions.
+ content::NavigateIframeToURL(
+ tab, "child-1", extension2->GetResourceURL("/blank_iframe.html"));
+ details = new TestMemoryDetails();
+ details->StartFetchAndWait();
+ if (content::AreAllSitesIsolatedForTesting()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 3), Bucket(3, 1)));
+ } else if (extensions::IsIsolateExtensionsEnabled()) {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 4)));
+ } else {
+ EXPECT_THAT(details->uma()->GetAllSamples(
+ "SiteIsolation.SiteInstancesPerBrowsingInstance"),
+ ElementsAre(Bucket(1, 2)));
+ }
+}
« no previous file with comments | « chrome/browser/site_details.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698