blob: c0e515ac62d5823fd7926ca9d78c593a59f0ff8e [file] [log] [blame]
xunjieli96ab36a72016-12-05 21:36:051// Copyright 2016 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/url_request/url_request_context.h"
6
Daniel McArdle3a663d62019-01-31 00:48:477#include "base/strings/pattern.h"
xunjielid5debfc2017-02-24 15:55:498#include "base/trace_event/memory_dump_request_args.h"
xunjieli96ab36a72016-12-05 21:36:059#include "base/trace_event/process_memory_dump.h"
Lily Houghton582d4622018-01-22 22:43:4010#include "net/proxy_resolution/proxy_config_service_fixed.h"
Bence Béky98447b12018-05-08 03:14:0111#include "net/test/test_with_scoped_task_environment.h"
Ramin Halavatica8d5252018-03-12 05:33:4912#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
xunjieli96ab36a72016-12-05 21:36:0513#include "net/url_request/url_request_context_builder.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace net {
17
xunjielid5debfc2017-02-24 15:55:4918class URLRequestContextMemoryDumpTest
Bence Béky98447b12018-05-08 03:14:0119 : public testing::TestWithParam<base::trace_event::MemoryDumpLevelOfDetail>,
20 public WithScopedTaskEnvironment {};
xunjielid5debfc2017-02-24 15:55:4921
Victor Costan8fb98f6f2019-02-01 17:08:2922INSTANTIATE_TEST_SUITE_P(
xunjielid5debfc2017-02-24 15:55:4923 /* no prefix */,
24 URLRequestContextMemoryDumpTest,
25 ::testing::Values(base::trace_event::MemoryDumpLevelOfDetail::DETAILED,
26 base::trace_event::MemoryDumpLevelOfDetail::BACKGROUND));
27
xunjieli96ab36a72016-12-05 21:36:0528// Checks if the dump provider runs without crashing and dumps root objects.
xunjielid5debfc2017-02-24 15:55:4929TEST_P(URLRequestContextMemoryDumpTest, MemoryDumpProvider) {
30 base::trace_event::MemoryDumpArgs dump_args = {GetParam()};
xunjieli96ab36a72016-12-05 21:36:0531 std::unique_ptr<base::trace_event::ProcessMemoryDump> process_memory_dump(
erikchenf62ea042018-05-25 21:30:5732 new base::trace_event::ProcessMemoryDump(dump_args));
xunjieli96ab36a72016-12-05 21:36:0533 URLRequestContextBuilder builder;
34#if defined(OS_LINUX) || defined(OS_ANDROID)
Ramin Halavatica8d5252018-03-12 05:33:4935 builder.set_proxy_config_service(std::make_unique<ProxyConfigServiceFixed>(
36 ProxyConfigWithAnnotation::CreateDirect()));
xunjieli96ab36a72016-12-05 21:36:0537#endif // defined(OS_LINUX) || defined(OS_ANDROID)
38 std::unique_ptr<URLRequestContext> context(builder.Build());
39 context->OnMemoryDump(dump_args, process_memory_dump.get());
40 const base::trace_event::ProcessMemoryDump::AllocatorDumpsMap&
41 allocator_dumps = process_memory_dump->allocator_dumps();
42
xunjieli9f8c5fb52016-12-07 22:59:3343 bool did_dump_http_network_session = false;
44 bool did_dump_ssl_client_session_cache = false;
xunjieli96ab36a72016-12-05 21:36:0545 bool did_dump_url_request_context = false;
xunjieli2a2468bd2017-01-04 21:17:3346 bool did_dump_url_request_context_http_network_session = false;
xunjieli96ab36a72016-12-05 21:36:0547 for (const auto& it : allocator_dumps) {
48 const std::string& dump_name = it.first;
xunjieli9f8c5fb52016-12-07 22:59:3349 if (dump_name.find("net/http_network_session") != std::string::npos)
50 did_dump_http_network_session = true;
Daniel McArdle3a663d62019-01-31 00:48:4751 // Match against a relaxed form of the memory dump whitelist pattern.
52 if (base::MatchPattern(
53 dump_name, "net/http_network_session_0x*/ssl_client_session_cache"))
xunjieli9f8c5fb52016-12-07 22:59:3354 did_dump_ssl_client_session_cache = true;
xunjieli2a2468bd2017-01-04 21:17:3355 if (dump_name.find("net/url_request_context") != std::string::npos) {
56 // A sub allocator dump to take into account of the sharing relationship.
57 if (dump_name.find("http_network_session") != std::string::npos) {
58 did_dump_url_request_context_http_network_session = true;
59 } else {
60 did_dump_url_request_context = true;
61 }
62 }
xunjieli96ab36a72016-12-05 21:36:0563 }
xunjieli9f8c5fb52016-12-07 22:59:3364 ASSERT_TRUE(did_dump_http_network_session);
65 ASSERT_TRUE(did_dump_ssl_client_session_cache);
xunjieli96ab36a72016-12-05 21:36:0566 ASSERT_TRUE(did_dump_url_request_context);
xunjieli2a2468bd2017-01-04 21:17:3367 ASSERT_TRUE(did_dump_url_request_context_http_network_session);
xunjieli96ab36a72016-12-05 21:36:0568}
69
xunjieli9f8c5fb52016-12-07 22:59:3370// TODO(xunjieli): Add more granular tests on the MemoryDumpProvider.
xunjieli96ab36a72016-12-05 21:36:0571} // namespace net