1 // Copyright 2014 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 #ifndef NET_LOG_TRACE_NET_LOG_OBSERVER_H_ 6 #define NET_LOG_TRACE_NET_LOG_OBSERVER_H_ 7 8 #include "base/memory/raw_ptr.h" 9 #include "base/memory/weak_ptr.h" 10 #include "net/base/net_export.h" 11 #include "net/base/tracing.h" 12 #include "net/log/net_log.h" 13 14 namespace net { 15 16 // TraceNetLogObserver watches for TraceLog enable, and sends NetLog 17 // events to TraceLog if it is enabled. 18 class NET_EXPORT TraceNetLogObserver 19 : public NetLog::ThreadSafeObserver, 20 public base::trace_event::TraceLog::AsyncEnabledStateObserver { 21 public: 22 TraceNetLogObserver(); 23 24 TraceNetLogObserver(const TraceNetLogObserver&) = delete; 25 TraceNetLogObserver& operator=(const TraceNetLogObserver&) = delete; 26 27 ~TraceNetLogObserver() override; 28 29 // net::NetLog::ThreadSafeObserver implementation: 30 void OnAddEntry(const NetLogEntry& entry) override; 31 32 // Start to watch for TraceLog enable and disable events. 33 // This can't be called if already watching for events. 34 // Watches NetLog only when tracing is enabled. 35 void WatchForTraceStart(NetLog* net_log); 36 37 // Stop watching for TraceLog enable and disable events. 38 // If WatchForTraceStart is called, this must be called before 39 // TraceNetLogObserver is destroyed. 40 void StopWatchForTraceStart(); 41 42 // base::trace_event::TraceLog::EnabledStateChangedObserver implementation: 43 void OnTraceLogEnabled() override; 44 void OnTraceLogDisabled() override; 45 46 private: 47 raw_ptr<NetLog> net_log_to_watch_ = nullptr; 48 base::WeakPtrFactory<TraceNetLogObserver> weak_factory_{this}; 49 }; 50 51 } // namespace net 52 53 #endif // NET_LOG_TRACE_NET_LOG_OBSERVER_H_ 54