| // 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 |