Remove the ChromeNetLog observer classes, using NetLog::ThreadSafeObserver
instead, slightly modifying the NetLog interface to do so.

[email protected]
BUG=114611

Review URL: http://codereview.chromium.org/9415013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124176 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/base/net_log.cc b/net/base/net_log.cc
index 26ecdee..1de670ec 100644
--- a/net/base/net_log.cc
+++ b/net/base/net_log.cc
@@ -56,17 +56,26 @@
   return dict;
 }
 
-NetLog::ThreadSafeObserver::ThreadSafeObserver(LogLevel log_level)
-    : log_level_(log_level) {
+NetLog::ThreadSafeObserver::ThreadSafeObserver() : log_level_(LOG_BASIC),
+                                                   net_log_(NULL) {
 }
 
 NetLog::ThreadSafeObserver::~ThreadSafeObserver() {
+  // Make sure we aren't watching a NetLog on destruction.  Because the NetLog
+  // may pass events to each observer on multiple threads, we cannot safely
+  // stop watching a NetLog automatically from a parent class.
+  DCHECK(!net_log_);
 }
 
 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const {
+  DCHECK(net_log_);
   return log_level_;
 }
 
+NetLog* NetLog::ThreadSafeObserver::net_log() const {
+  return net_log_;
+}
+
 // static
 std::string NetLog::TickCountToString(const base::TimeTicks& time) {
   int64 delta_time = (time - base::TimeTicks()).InMilliseconds();
@@ -167,6 +176,23 @@
   return entry_dict;
 }
 
+void NetLog::OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level) {
+  DCHECK(!observer->net_log_);
+  observer->net_log_ = this;
+  observer->log_level_ = log_level;
+}
+
+void NetLog::OnSetObserverLogLevel(ThreadSafeObserver* observer,
+                                   LogLevel log_level) {
+  DCHECK_EQ(this, observer->net_log_);
+  observer->log_level_ = log_level;
+}
+
+void NetLog::OnRemoveObserver(ThreadSafeObserver* observer) {
+  DCHECK_EQ(this, observer->net_log_);
+  observer->net_log_ = NULL;
+}
+
 void BoundNetLog::AddEntry(
     NetLog::EventType type,
     NetLog::EventPhase phase,