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