blob: a238e9d8d0471c057341423371f48a13a1f28e30 [file] [log] [blame]
vishal.b62985ca92015-04-17 08:45:511// Copyright (c) 2012 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/log/test_net_log.h"
6
Avi Drissman13fc8932015-12-20 04:40:467#include "base/macros.h"
mmenke6d23d6f2015-05-05 19:05:088#include "base/synchronization/lock.h"
9#include "base/values.h"
mikecironef22f9812016-10-04 03:40:1910#include "net/log/net_log_capture_mode.h"
11#include "net/log/net_log_entry.h"
12#include "net/log/net_log_source.h"
mikecirone8b85c432016-09-08 19:11:0013#include "net/log/net_log_source_type.h"
mmenke6d23d6f2015-05-05 19:05:0814
vishal.b62985ca92015-04-17 08:45:5115namespace net {
16
Matt Mueller30329532020-02-04 00:37:2217RecordingNetLogObserver::RecordingNetLogObserver()
18 : RecordingNetLogObserver(NetLogCaptureMode::kIncludeSensitive) {}
Matt Muellerde5dadf2019-11-27 20:11:5819
Matt Mueller30329532020-02-04 00:37:2220RecordingNetLogObserver::RecordingNetLogObserver(NetLogCaptureMode capture_mode)
21 : RecordingNetLogObserver(NetLog::Get(), capture_mode) {}
22
23RecordingNetLogObserver::RecordingNetLogObserver(NetLog* net_log,
24 NetLogCaptureMode capture_mode)
25 : net_log_(net_log) {
26 net_log_->AddObserver(this, capture_mode);
vishal.b62985ca92015-04-17 08:45:5127}
28
Matt Mueller30329532020-02-04 00:37:2229RecordingNetLogObserver::~RecordingNetLogObserver() {
30 net_log_->RemoveObserver(this);
vishal.b62985ca92015-04-17 08:45:5131}
32
Matt Mueller30329532020-02-04 00:37:2233std::vector<NetLogEntry> RecordingNetLogObserver::GetEntries() const {
Eric Roman630830c2019-07-16 21:49:4234 base::AutoLock lock(lock_);
Eric Roman79cc7552019-07-19 02:17:5435 std::vector<NetLogEntry> result;
36 for (const auto& entry : entry_list_)
37 result.push_back(entry.Clone());
38 return result;
vishal.b62985ca92015-04-17 08:45:5139}
40
Matt Mueller30329532020-02-04 00:37:2241std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesForSource(
Eric Roman79cc7552019-07-19 02:17:5442 NetLogSource source) const {
Eric Roman630830c2019-07-16 21:49:4243 base::AutoLock lock(lock_);
Eric Roman79cc7552019-07-19 02:17:5444 std::vector<NetLogEntry> result;
Eric Roman630830c2019-07-16 21:49:4245 for (const auto& entry : entry_list_) {
46 if (entry.source.id == source.id)
Eric Roman79cc7552019-07-19 02:17:5447 result.push_back(entry.Clone());
Eric Roman630830c2019-07-16 21:49:4248 }
Eric Roman79cc7552019-07-19 02:17:5449 return result;
50}
51
Matt Mueller30329532020-02-04 00:37:2252std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesWithType(
Eric Roman79cc7552019-07-19 02:17:5453 NetLogEventType type) const {
54 base::AutoLock lock(lock_);
55 std::vector<NetLogEntry> result;
56 for (const auto& entry : entry_list_) {
57 if (entry.type == type)
58 result.push_back(entry.Clone());
59 }
60 return result;
vishal.b62985ca92015-04-17 08:45:5161}
62
Matt Mueller30329532020-02-04 00:37:2263size_t RecordingNetLogObserver::GetSize() const {
Eric Roman630830c2019-07-16 21:49:4264 base::AutoLock lock(lock_);
65 return entry_list_.size();
vishal.b62985ca92015-04-17 08:45:5166}
67
Matt Mueller30329532020-02-04 00:37:2268void RecordingNetLogObserver::Clear() {
Eric Roman630830c2019-07-16 21:49:4269 base::AutoLock lock(lock_);
70 entry_list_.clear();
mmenke6d23d6f2015-05-05 19:05:0871}
72
Matt Mueller30329532020-02-04 00:37:2273void RecordingNetLogObserver::OnAddEntry(const NetLogEntry& entry) {
Eric Roman79cc7552019-07-19 02:17:5474 base::Value params = entry.params.Clone();
Matt Mueller30329532020-02-04 00:37:2275 base::RepeatingClosure add_entry_callback;
76 {
77 // Only need to acquire the lock when accessing class variables.
78 base::AutoLock lock(lock_);
79 entry_list_.emplace_back(entry.type, entry.source, entry.phase, entry.time,
80 std::move(params));
81 add_entry_callback = add_entry_callback_;
82 }
83 if (!add_entry_callback.is_null())
84 add_entry_callback.Run();
85}
Eric Roman630830c2019-07-16 21:49:4286
Matt Mueller30329532020-02-04 00:37:2287void RecordingNetLogObserver::SetObserverCaptureMode(
88 NetLogCaptureMode capture_mode) {
89 net_log_->RemoveObserver(this);
90 net_log_->AddObserver(this, capture_mode);
91}
92
93void RecordingNetLogObserver::SetThreadsafeAddEntryCallback(
94 base::RepeatingClosure add_entry_callback) {
Eric Roman630830c2019-07-16 21:49:4295 base::AutoLock lock(lock_);
Matt Mueller30329532020-02-04 00:37:2296 add_entry_callback_ = add_entry_callback;
97}
98
99TestNetLog::TestNetLog() : NetLog(util::PassKey<TestNetLog>()) {}
100TestNetLog::~TestNetLog() = default;
101
102RecordingTestNetLog::RecordingTestNetLog()
103 : observer_(this, NetLogCaptureMode::kIncludeSensitive) {}
104RecordingTestNetLog::~RecordingTestNetLog() = default;
105
106std::vector<NetLogEntry> RecordingTestNetLog::GetEntries() const {
107 return observer_.GetEntries();
108}
109
110std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesForSource(
111 NetLogSource source) const {
112 return observer_.GetEntriesForSource(source);
113}
114
115std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesWithType(
116 NetLogEventType type) const {
117 return observer_.GetEntriesWithType(type);
118}
119
120size_t RecordingTestNetLog::GetSize() const {
121 return observer_.GetSize();
122}
123
124void RecordingTestNetLog::Clear() {
125 return observer_.Clear();
Eric Roman630830c2019-07-16 21:49:42126}
127
Matt Muellerd9342e3a2019-11-26 01:41:14128NetLog::ThreadSafeObserver* RecordingTestNetLog::GetObserver() {
Matt Mueller30329532020-02-04 00:37:22129 return &observer_;
Eric Roman630830c2019-07-16 21:49:42130}
131
Matt Muellerd9342e3a2019-11-26 01:41:14132void RecordingTestNetLog::SetObserverCaptureMode(
133 NetLogCaptureMode capture_mode) {
Matt Mueller30329532020-02-04 00:37:22134 observer_.SetObserverCaptureMode(capture_mode);
vishal.b62985ca92015-04-17 08:45:51135}
136
Matt Muellerd9342e3a2019-11-26 01:41:14137RecordingBoundTestNetLog::RecordingBoundTestNetLog()
tfarina42834112016-09-22 13:38:20138 : net_log_(NetLogWithSource::Make(&test_net_log_, NetLogSourceType::NONE)) {
139}
vishal.b62985ca92015-04-17 08:45:51140
Matt Muellerd9342e3a2019-11-26 01:41:14141RecordingBoundTestNetLog::~RecordingBoundTestNetLog() = default;
vishal.b62985ca92015-04-17 08:45:51142
Matt Muellerd9342e3a2019-11-26 01:41:14143std::vector<NetLogEntry> RecordingBoundTestNetLog::GetEntries() const {
Eric Roman79cc7552019-07-19 02:17:54144 return test_net_log_.GetEntries();
vishal.b62985ca92015-04-17 08:45:51145}
146
Matt Muellerd9342e3a2019-11-26 01:41:14147std::vector<NetLogEntry> RecordingBoundTestNetLog::GetEntriesForSource(
Eric Roman79cc7552019-07-19 02:17:54148 NetLogSource source) const {
149 return test_net_log_.GetEntriesForSource(source);
150}
151
Matt Muellerd9342e3a2019-11-26 01:41:14152std::vector<NetLogEntry> RecordingBoundTestNetLog::GetEntriesWithType(
Eric Roman79cc7552019-07-19 02:17:54153 NetLogEventType type) const {
154 return test_net_log_.GetEntriesWithType(type);
vishal.b62985ca92015-04-17 08:45:51155}
156
Matt Muellerd9342e3a2019-11-26 01:41:14157size_t RecordingBoundTestNetLog::GetSize() const {
mmenke43758e62015-05-04 21:09:46158 return test_net_log_.GetSize();
vishal.b62985ca92015-04-17 08:45:51159}
160
Matt Muellerd9342e3a2019-11-26 01:41:14161void RecordingBoundTestNetLog::Clear() {
mmenke43758e62015-05-04 21:09:46162 test_net_log_.Clear();
vishal.b62985ca92015-04-17 08:45:51163}
164
Matt Muellerd9342e3a2019-11-26 01:41:14165void RecordingBoundTestNetLog::SetObserverCaptureMode(
166 NetLogCaptureMode capture_mode) {
Eric Roman630830c2019-07-16 21:49:42167 test_net_log_.SetObserverCaptureMode(capture_mode);
vishal.b62985ca92015-04-17 08:45:51168}
169
170} // namespace net