| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef WRITE_TO_FILE_NET_LOG_OBSERVER_H_ |
| #define WRITE_TO_FILE_NET_LOG_OBSERVER_H_ |
| |
| #include <stdio.h> |
| |
| #include "base/files/scoped_file.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "net/log/net_log.h" |
| |
| namespace base { |
| class DictionaryValue; |
| class FilePath; |
| class Value; |
| } |
| |
| namespace net { |
| |
| class URLRequestContext; |
| |
| // WriteToFileNetLogObserver watches the NetLog event stream, and sends all |
| // entries to a file specified on creation. |
| // |
| // The text file will contain a single JSON object. |
| class NET_EXPORT WriteToFileNetLogObserver : public NetLog::ThreadSafeObserver { |
| public: |
| WriteToFileNetLogObserver(); |
| ~WriteToFileNetLogObserver() override; |
| |
| // Sets the log level to log at. Must be called before StartObserving. |
| void set_log_level(NetLog::LogLevel log_level); |
| |
| // Starts observing |net_log| and writes output to |file|. Must not already |
| // be watching a NetLog. Separate from constructor to enforce thread safety. |
| // |
| // |file| must be a non-NULL empty file that's open for writing. |
| // |
| // |constants| is an optional legend for decoding constant values used in the |
| // log. It should generally be a modified version of GetNetConstants(). If |
| // not present, the output of GetNetConstants() will be used. |
| // |
| // |url_request_context| is an optional URLRequestContext that will be used to |
| // pre-populate the log with information about in-progress events. |
| // If the context is non-NULL, this must be called on the context's thread. |
| void StartObserving(NetLog* net_log, |
| base::ScopedFILE file, |
| base::Value* constants, |
| net::URLRequestContext* url_request_context); |
| |
| // Stops observing net_log(). Must already be watching. Must be called |
| // before destruction of the WriteToFileNetLogObserver and the NetLog. |
| // |
| // |url_request_context| is an optional argument used to added additional |
| // network stack state to the log. If the context is non-NULL, this must be |
| // called on the context's thread. |
| void StopObserving(net::URLRequestContext* url_request_context); |
| |
| // net::NetLog::ThreadSafeObserver implementation: |
| void OnAddEntry(const NetLog::Entry& entry) override; |
| |
| private: |
| base::ScopedFILE file_; |
| |
| // The LogLevel to log at. |
| NetLog::LogLevel log_level_; |
| |
| // True if OnAddEntry() has been called at least once. |
| bool added_events_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WriteToFileNetLogObserver); |
| }; |
| |
| } // namespace net |
| |
| #endif // WRITE_TO_FILE_NET_LOG_OBSERVER_H_ |