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,