blob: c102cdd85b5d23154dc087bacdad2b1347a49836 [file] [log] [blame]
// Copyright 2026 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/devtools/devtools_manager.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/trace_event/memory_dump_request_args.h"
#include "base/trace_event/process_memory_dump.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/test/test_content_browser_client.h"
#include "content/test/test_render_view_host.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
class DevToolsManagerTest : public RenderViewHostImplTestHarness {
public:
DevToolsManagerTest() = default;
~DevToolsManagerTest() override = default;
void SetUp() override {
RenderViewHostImplTestHarness::SetUp();
DevToolsManager::ShutdownForTests();
}
void TearDown() override {
DevToolsManager::ShutdownForTests();
RenderViewHostImplTestHarness::TearDown();
}
};
TEST_F(DevToolsManagerTest, OnMemoryDump) {
base::HistogramTester histogram_tester;
DevToolsManager* manager = DevToolsManager::GetInstance();
// No sessions initially.
base::trace_event::MemoryDumpArgs args = {
base::trace_event::MemoryDumpLevelOfDetail::kDetailed};
base::trace_event::ProcessMemoryDump pmd(args);
manager->OnMemoryDump(args, &pmd);
// Check allocator dump.
auto* dump = pmd.GetAllocatorDump("devtools/sessions");
ASSERT_NE(dump, nullptr);
base::trace_event::MemoryAllocatorDump::Entry entry(
base::trace_event::MemoryAllocatorDump::kNameObjectCount,
base::trace_event::MemoryAllocatorDump::kUnitsObjects, 0u);
EXPECT_THAT(dump->entries(),
testing::Contains(testing::Eq(testing::ByRef(entry))));
// Create a host and attach a client.
scoped_refptr<DevToolsAgentHost> agent_host =
DevToolsAgentHost::GetOrCreateFor(web_contents());
class TestClient : public DevToolsAgentHostClient {
public:
void DispatchProtocolMessage(DevToolsAgentHost* agent_host,
base::span<const uint8_t> message) override {}
void AgentHostClosed(DevToolsAgentHost* agent_host) override {}
};
TestClient client;
agent_host->AttachClient(&client);
base::trace_event::ProcessMemoryDump pmd2(args);
manager->OnMemoryDump(args, &pmd2);
auto* dump2 = pmd2.GetAllocatorDump("devtools/sessions");
ASSERT_NE(dump2, nullptr);
base::trace_event::MemoryAllocatorDump::Entry entry2(
base::trace_event::MemoryAllocatorDump::kNameObjectCount,
base::trace_event::MemoryAllocatorDump::kUnitsObjects, 1u);
EXPECT_THAT(dump2->entries(),
testing::Contains(testing::Eq(testing::ByRef(entry2))));
agent_host->DetachClient(&client);
base::trace_event::ProcessMemoryDump pmd3(args);
manager->OnMemoryDump(args, &pmd3);
auto* dump3 = pmd3.GetAllocatorDump("devtools/sessions");
ASSERT_NE(dump3, nullptr);
EXPECT_THAT(dump3->entries(),
testing::Contains(testing::Eq(testing::ByRef(entry))));
}
} // namespace content