net: split RecordingNetLogObserver class out of RecordingTestNetLog

Bug: 1040681
Change-Id: Iaadc7d1b99668c8287eab5a181838f744f767e86
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2036271
Commit-Queue: Matt Mueller <[email protected]>
Reviewed-by: Matt Menke <[email protected]>
Cr-Commit-Position: refs/heads/master@{#738005}
diff --git a/net/log/test_net_log.cc b/net/log/test_net_log.cc
index f38e4d10..a238e9d 100644
--- a/net/log/test_net_log.cc
+++ b/net/log/test_net_log.cc
@@ -14,18 +14,23 @@
 
 namespace net {
 
-TestNetLog::TestNetLog() : NetLog(util::PassKey<TestNetLog>()) {}
-TestNetLog::~TestNetLog() = default;
+RecordingNetLogObserver::RecordingNetLogObserver()
+    : RecordingNetLogObserver(NetLogCaptureMode::kIncludeSensitive) {}
 
-RecordingTestNetLog::RecordingTestNetLog() {
-  AddObserver(this, NetLogCaptureMode::kIncludeSensitive);
+RecordingNetLogObserver::RecordingNetLogObserver(NetLogCaptureMode capture_mode)
+    : RecordingNetLogObserver(NetLog::Get(), capture_mode) {}
+
+RecordingNetLogObserver::RecordingNetLogObserver(NetLog* net_log,
+                                                 NetLogCaptureMode capture_mode)
+    : net_log_(net_log) {
+  net_log_->AddObserver(this, capture_mode);
 }
 
-RecordingTestNetLog::~RecordingTestNetLog() {
-  RemoveObserver(this);
+RecordingNetLogObserver::~RecordingNetLogObserver() {
+  net_log_->RemoveObserver(this);
 }
 
-std::vector<NetLogEntry> RecordingTestNetLog::GetEntries() const {
+std::vector<NetLogEntry> RecordingNetLogObserver::GetEntries() const {
   base::AutoLock lock(lock_);
   std::vector<NetLogEntry> result;
   for (const auto& entry : entry_list_)
@@ -33,7 +38,7 @@
   return result;
 }
 
-std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesForSource(
+std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesForSource(
     NetLogSource source) const {
   base::AutoLock lock(lock_);
   std::vector<NetLogEntry> result;
@@ -44,7 +49,7 @@
   return result;
 }
 
-std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesWithType(
+std::vector<NetLogEntry> RecordingNetLogObserver::GetEntriesWithType(
     NetLogEventType type) const {
   base::AutoLock lock(lock_);
   std::vector<NetLogEntry> result;
@@ -55,33 +60,78 @@
   return result;
 }
 
-size_t RecordingTestNetLog::GetSize() const {
+size_t RecordingNetLogObserver::GetSize() const {
   base::AutoLock lock(lock_);
   return entry_list_.size();
 }
 
-void RecordingTestNetLog::Clear() {
+void RecordingNetLogObserver::Clear() {
   base::AutoLock lock(lock_);
   entry_list_.clear();
 }
 
-void RecordingTestNetLog::OnAddEntry(const NetLogEntry& entry) {
+void RecordingNetLogObserver::OnAddEntry(const NetLogEntry& entry) {
   base::Value params = entry.params.Clone();
+  base::RepeatingClosure add_entry_callback;
+  {
+    // Only need to acquire the lock when accessing class variables.
+    base::AutoLock lock(lock_);
+    entry_list_.emplace_back(entry.type, entry.source, entry.phase, entry.time,
+                             std::move(params));
+    add_entry_callback = add_entry_callback_;
+  }
+  if (!add_entry_callback.is_null())
+    add_entry_callback.Run();
+}
 
-  // Only need to acquire the lock when accessing class variables.
+void RecordingNetLogObserver::SetObserverCaptureMode(
+    NetLogCaptureMode capture_mode) {
+  net_log_->RemoveObserver(this);
+  net_log_->AddObserver(this, capture_mode);
+}
+
+void RecordingNetLogObserver::SetThreadsafeAddEntryCallback(
+    base::RepeatingClosure add_entry_callback) {
   base::AutoLock lock(lock_);
-  entry_list_.emplace_back(entry.type, entry.source, entry.phase, entry.time,
-                           std::move(params));
+  add_entry_callback_ = add_entry_callback;
+}
+
+TestNetLog::TestNetLog() : NetLog(util::PassKey<TestNetLog>()) {}
+TestNetLog::~TestNetLog() = default;
+
+RecordingTestNetLog::RecordingTestNetLog()
+    : observer_(this, NetLogCaptureMode::kIncludeSensitive) {}
+RecordingTestNetLog::~RecordingTestNetLog() = default;
+
+std::vector<NetLogEntry> RecordingTestNetLog::GetEntries() const {
+  return observer_.GetEntries();
+}
+
+std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesForSource(
+    NetLogSource source) const {
+  return observer_.GetEntriesForSource(source);
+}
+
+std::vector<NetLogEntry> RecordingTestNetLog::GetEntriesWithType(
+    NetLogEventType type) const {
+  return observer_.GetEntriesWithType(type);
+}
+
+size_t RecordingTestNetLog::GetSize() const {
+  return observer_.GetSize();
+}
+
+void RecordingTestNetLog::Clear() {
+  return observer_.Clear();
 }
 
 NetLog::ThreadSafeObserver* RecordingTestNetLog::GetObserver() {
-  return this;
+  return &observer_;
 }
 
 void RecordingTestNetLog::SetObserverCaptureMode(
     NetLogCaptureMode capture_mode) {
-  RemoveObserver(this);
-  AddObserver(this, capture_mode);
+  observer_.SetObserverCaptureMode(capture_mode);
 }
 
 RecordingBoundTestNetLog::RecordingBoundTestNetLog()