// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/frame_host/frame_tree.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/web_contents.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" #include "content/shell/browser/shell.h" #include "content/test/content_browser_test_utils_internal.h" #include "net/dns/mock_host_resolver.h" namespace content { class PerformanceMemoryBrowserTest : public ContentBrowserTest { public: PerformanceMemoryBrowserTest() {} protected: void SetUpOnMainThread() override { host_resolver()->AddRule("*", "127.0.0.1"); SetupCrossSiteRedirector(embedded_test_server()); ASSERT_TRUE(embedded_test_server()->Start()); } }; // Verify that performance.memory is not bucketized when sites are isolated for // testing, and that it is bucketized when they are not. IN_PROC_BROWSER_TEST_F(PerformanceMemoryBrowserTest, PerformanceMemory) { GURL main_url(embedded_test_server()->GetURL("a.com", "/title1.html")); EXPECT_TRUE(NavigateToURL(shell(), main_url)); WebContents* contents = shell()->web_contents(); FrameTreeNode* root = static_cast<WebContentsImpl*>(contents)->GetFrameTree()->root(); int usedJSHeapSize = -1; EXPECT_TRUE(ExecuteScriptAndExtractInt( root, "window.domAutomationController.send(performance.memory.usedJSHeapSize);", &usedJSHeapSize)); EXPECT_GE(usedJSHeapSize, 0); // There is no explicit way to check if the memory values are bucketized or // not. As in third_party/blink/renderer/core/timing/memory_info_test.cc, // check that the value mod 100000 is non-zero to verify that it is // not bucketized. This should be the case when the renderer process is locked // to a site (i.e. scheme plus eTLD+1). if (AreAllSitesIsolatedForTesting()) EXPECT_NE(0, usedJSHeapSize % 100000); else EXPECT_EQ(0, usedJSHeapSize % 100000); } } // namespace content