xref: /aosp_15_r20/external/cronet/net/log/test_net_log.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2012 The Chromium Authors
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 
7 #include "base/synchronization/lock.h"
8 #include "base/values.h"
9 #include "net/log/net_log_capture_mode.h"
10 #include "net/log/net_log_entry.h"
11 #include "net/log/net_log_source.h"
12 #include "net/log/net_log_source_type.h"
13 
14 namespace net {
15 
RecordingNetLogObserver()16 RecordingNetLogObserver::RecordingNetLogObserver()
17     : RecordingNetLogObserver(NetLogCaptureMode::kIncludeSensitive) {}
18 
RecordingNetLogObserver(NetLogCaptureMode capture_mode)19 RecordingNetLogObserver::RecordingNetLogObserver(NetLogCaptureMode capture_mode)
20     : RecordingNetLogObserver(NetLog::Get(), capture_mode) {}
21 
RecordingNetLogObserver(NetLog * net_log,NetLogCaptureMode capture_mode)22 RecordingNetLogObserver::RecordingNetLogObserver(NetLog* net_log,
23                                                  NetLogCaptureMode capture_mode)
24     : net_log_(net_log) {
25   net_log_->AddObserver(this, capture_mode);
26 }
27 
~RecordingNetLogObserver()28 RecordingNetLogObserver::~RecordingNetLogObserver() {
29   net_log_->RemoveObserver(this);
30 }
31 
GetEntries() const32 std::vector<NetLogEntry> RecordingNetLogObserver::GetEntries() const {
33   base::AutoLock lock(lock_);
34   std::vector<NetLogEntry> result;
35   for (const auto& entry : entry_list_)
36     result.push_back(entry.Clone());
37   return result;
38 }
39 
GetEntriesForSource(NetLogSource source) const40 std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesForSource(
41     NetLogSource source) const {
42   base::AutoLock lock(lock_);
43   std::vector<NetLogEntry> result;
44   for (const auto& entry : entry_list_) {
45     if (entry.source.id == source.id)
46       result.push_back(entry.Clone());
47   }
48   return result;
49 }
50 
GetEntriesWithType(NetLogEventType type) const51 std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesWithType(
52     NetLogEventType type) const {
53   base::AutoLock lock(lock_);
54   std::vector<NetLogEntry> result;
55   for (const auto& entry : entry_list_) {
56     if (entry.type == type)
57       result.push_back(entry.Clone());
58   }
59   return result;
60 }
61 
GetEntriesForSourceWithType(NetLogSource source,NetLogEventType type,NetLogEventPhase phase) const62 std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesForSourceWithType(
63     NetLogSource source,
64     NetLogEventType type,
65     NetLogEventPhase phase) const {
66   base::AutoLock lock(lock_);
67   std::vector<NetLogEntry> result;
68   for (const auto& entry : entry_list_) {
69     if (entry.source.id == source.id && entry.type == type &&
70         entry.phase == phase) {
71       result.push_back(entry.Clone());
72     }
73   }
74   return result;
75 }
76 
GetSize() const77 size_t RecordingNetLogObserver::GetSize() const {
78   base::AutoLock lock(lock_);
79   return entry_list_.size();
80 }
81 
Clear()82 void RecordingNetLogObserver::Clear() {
83   base::AutoLock lock(lock_);
84   entry_list_.clear();
85 }
86 
OnAddEntry(const NetLogEntry & entry)87 void RecordingNetLogObserver::OnAddEntry(const NetLogEntry& entry) {
88   base::Value::Dict params = entry.params.Clone();
89   base::RepeatingClosure add_entry_callback;
90   {
91     // Only need to acquire the lock when accessing class variables.
92     base::AutoLock lock(lock_);
93     entry_list_.emplace_back(entry.type, entry.source, entry.phase, entry.time,
94                              std::move(params));
95     add_entry_callback = add_entry_callback_;
96   }
97   if (!add_entry_callback.is_null())
98     add_entry_callback.Run();
99 }
100 
SetObserverCaptureMode(NetLogCaptureMode capture_mode)101 void RecordingNetLogObserver::SetObserverCaptureMode(
102     NetLogCaptureMode capture_mode) {
103   net_log_->RemoveObserver(this);
104   net_log_->AddObserver(this, capture_mode);
105 }
106 
SetThreadsafeAddEntryCallback(base::RepeatingClosure add_entry_callback)107 void RecordingNetLogObserver::SetThreadsafeAddEntryCallback(
108     base::RepeatingClosure add_entry_callback) {
109   base::AutoLock lock(lock_);
110   add_entry_callback_ = add_entry_callback;
111 }
112 
113 }  // namespace net
114