Index: net/base/net_log.h |
diff --git a/net/base/net_log.h b/net/base/net_log.h |
deleted file mode 100644 |
index 5fb27917aba09cb0ec5f63990a39f78aa83a43bf..0000000000000000000000000000000000000000 |
--- a/net/base/net_log.h |
+++ /dev/null |
@@ -1,401 +0,0 @@ |
-// Copyright (c) 2012 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 NET_BASE_NET_LOG_H_ |
-#define NET_BASE_NET_LOG_H_ |
- |
-#include <string> |
- |
-#include "base/atomicops.h" |
-#include "base/basictypes.h" |
-#include "base/callback_forward.h" |
-#include "base/compiler_specific.h" |
-#include "base/observer_list.h" |
-#include "base/strings/string16.h" |
-#include "base/synchronization/lock.h" |
-#include "base/time/time.h" |
-#include "net/base/net_export.h" |
- |
-namespace base { |
-class DictionaryValue; |
-class Value; |
-} |
- |
-namespace net { |
- |
-// NetLog is the destination for log messages generated by the network stack. |
-// Each log message has a "source" field which identifies the specific entity |
-// that generated the message (for example, which URLRequest or which |
-// SpdySession). |
-// |
-// To avoid needing to pass in the "source ID" to the logging functions, NetLog |
-// is usually accessed through a BoundNetLog, which will always pass in a |
-// specific source ID. |
-// |
-// All methods are thread safe, with the exception that no NetLog or |
-// NetLog::ThreadSafeObserver functions may be called by an observer's |
-// OnAddEntry() method. Doing so will result in a deadlock. |
-// |
-// For a broader introduction see the design document: |
-// https://sites.google.com/a/chromium.org/dev/developers/design-documents/network-stack/netlog |
-class NET_EXPORT NetLog { |
- public: |
- enum EventType { |
-#define EVENT_TYPE(label) TYPE_ ## label, |
-#include "net/base/net_log_event_type_list.h" |
-#undef EVENT_TYPE |
- EVENT_COUNT |
- }; |
- |
- // The 'phase' of an event trace (whether it marks the beginning or end |
- // of an event.). |
- enum EventPhase { |
- PHASE_NONE, |
- PHASE_BEGIN, |
- PHASE_END, |
- }; |
- |
- // The "source" identifies the entity that generated the log message. |
- enum SourceType { |
-#define SOURCE_TYPE(label) SOURCE_ ## label, |
-#include "net/base/net_log_source_type_list.h" |
-#undef SOURCE_TYPE |
- SOURCE_COUNT |
- }; |
- |
- // Specifies the granularity of events that should be emitted to the log. |
- // |
- // Since the LogLevel may be read and set on any thread without locking, it |
- // may be possible for an Observer to receive an event or parameters that |
- // normally wouldn't be logged at the currently active log level. |
- enum LogLevel { |
- // Log everything possible, even if it is slow and memory expensive. |
- // Includes logging of transferred bytes. |
- LOG_ALL, |
- |
- // Log all events, but do not include the actual transferred bytes as |
- // parameters for bytes sent/received events. |
- LOG_ALL_BUT_BYTES, |
- |
- // Log all events, but do not include the actual transferred bytes and |
- // remove cookies and HTTP credentials. |
- LOG_STRIP_PRIVATE_DATA, |
- |
- // Don't log any events. |
- LOG_NONE, |
- }; |
- |
- // A callback function that return a Value representation of the parameters |
- // associated with an event. If called, it will be called synchonously, |
- // so it need not have owning references. May be called more than once, or |
- // not at all. May return NULL. |
- typedef base::Callback<base::Value*(LogLevel)> ParametersCallback; |
- |
- // Identifies the entity that generated this log. The |id| field should |
- // uniquely identify the source, and is used by log observers to infer |
- // message groupings. Can use NetLog::NextID() to create unique IDs. |
- struct NET_EXPORT Source { |
- static const uint32 kInvalidId; |
- |
- Source(); |
- Source(SourceType type, uint32 id); |
- bool IsValid() const; |
- |
- // Adds the source to a DictionaryValue containing event parameters, |
- // using the name "source_dependency". |
- void AddToEventParameters(base::DictionaryValue* event_params) const; |
- |
- // Returns a callback that returns a dictionary with a single entry |
- // named "source_dependecy" that describes |this|. |
- ParametersCallback ToEventParametersCallback() const; |
- |
- // Attempts to extract a Source from a set of event parameters. Returns |
- // true and writes the result to |source| on success. Returns false and |
- // makes |source| an invalid source on failure. |
- // TODO(mmenke): Long term, we want to remove this. |
- static bool FromEventParameters(base::Value* event_params, Source* source); |
- |
- SourceType type; |
- uint32 id; |
- }; |
- |
- struct NET_EXPORT EntryData { |
- EntryData(EventType type, |
- Source source, |
- EventPhase phase, |
- base::TimeTicks time, |
- const ParametersCallback* parameters_callback); |
- ~EntryData(); |
- |
- const EventType type; |
- const Source source; |
- const EventPhase phase; |
- const base::TimeTicks time; |
- const ParametersCallback* const parameters_callback; |
- }; |
- |
- // An Entry pre-binds EntryData to a LogLevel, so observers will observe the |
- // output of ToValue() and ParametersToValue() at their log level rather than |
- // current maximum. |
- class NET_EXPORT Entry { |
- public: |
- Entry(const EntryData* data, LogLevel log_level); |
- ~Entry(); |
- |
- EventType type() const { return data_->type; } |
- Source source() const { return data_->source; } |
- EventPhase phase() const { return data_->phase; } |
- |
- // Serializes the specified event to a Value. The Value also includes the |
- // current time. Caller takes ownership of returned Value. Takes in a time |
- // to allow back-dating entries. |
- base::Value* ToValue() const; |
- |
- // Returns the parameters as a Value. Returns NULL if there are no |
- // parameters. Caller takes ownership of returned Value. |
- base::Value* ParametersToValue() const; |
- |
- private: |
- const EntryData* const data_; |
- |
- // Log level when the event occurred. |
- const LogLevel log_level_; |
- |
- // It is not safe to copy this class, since |parameters_callback_| may |
- // include pointers that become stale immediately after the event is added, |
- // even if the code were modified to keep its own copy of the callback. |
- DISALLOW_COPY_AND_ASSIGN(Entry); |
- }; |
- |
- // An observer, that must ensure its own thread safety, for events |
- // being added to a NetLog. |
- class NET_EXPORT ThreadSafeObserver { |
- public: |
- // Constructs an observer that wants to see network events, with |
- // the specified minimum event granularity. A ThreadSafeObserver can only |
- // observe a single NetLog at a time. |
- // |
- // Observers will be called on the same thread an entry is added on, |
- // and are responsible for ensuring their own thread safety. |
- // |
- // Observers must stop watching a NetLog before either the Observer or the |
- // NetLog is destroyed. |
- ThreadSafeObserver(); |
- |
- // Returns the minimum log level for events this observer wants to |
- // receive. Must not be called when not watching a NetLog. |
- LogLevel log_level() const; |
- |
- // Returns the NetLog we are currently watching, if any. Returns NULL |
- // otherwise. |
- NetLog* net_log() const; |
- |
- // This method will be called on the thread that the event occurs on. It |
- // is the responsibility of the observer to handle it in a thread safe |
- // manner. |
- // |
- // It is illegal for an Observer to call any NetLog or |
- // NetLog::Observer functions in response to a call to OnAddEntry. |
- virtual void OnAddEntry(const Entry& entry) = 0; |
- |
- protected: |
- virtual ~ThreadSafeObserver(); |
- |
- private: |
- friend class NetLog; |
- |
- void OnAddEntryData(const EntryData& entry_data); |
- |
- // Both of these values are only modified by the NetLog. |
- LogLevel log_level_; |
- NetLog* net_log_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ThreadSafeObserver); |
- }; |
- |
- NetLog(); |
- virtual ~NetLog(); |
- |
- // Emits a global event to the log stream, with its own unique source ID. |
- void AddGlobalEntry(EventType type); |
- void AddGlobalEntry(EventType type, |
- const NetLog::ParametersCallback& parameters_callback); |
- |
- // Returns a unique ID which can be used as a source ID. All returned IDs |
- // will be unique and greater than 0. |
- uint32 NextID(); |
- |
- // Returns the logging level for this NetLog. This is used to avoid computing |
- // and saving expensive log entries. |
- LogLevel GetLogLevel() const; |
- |
- // Adds an observer and sets its log level. The observer must not be |
- // watching any NetLog, including this one, when this is called. |
- // |
- // NetLog implementations must call NetLog::OnAddObserver to update the |
- // observer's internal state. |
- void AddThreadSafeObserver(ThreadSafeObserver* observer, LogLevel log_level); |
- |
- // Sets the log level of |observer| to |log_level|. |observer| must be |
- // watching |this|. NetLog implementations must call |
- // NetLog::OnSetObserverLogLevel to update the observer's internal state. |
- void SetObserverLogLevel(ThreadSafeObserver* observer, LogLevel log_level); |
- |
- // Removes an observer. NetLog implementations must call |
- // NetLog::OnAddObserver to update the observer's internal state. |
- // |
- // For thread safety reasons, it is recommended that this not be called in |
- // an object's destructor. |
- void RemoveThreadSafeObserver(ThreadSafeObserver* observer); |
- |
- // Converts a time to the string format that the NetLog uses to represent |
- // times. Strings are used since integers may overflow. |
- static std::string TickCountToString(const base::TimeTicks& time); |
- |
- // Returns a C-String symbolic name for |event_type|. |
- static const char* EventTypeToString(EventType event_type); |
- |
- // Returns a dictionary that maps event type symbolic names to their enum |
- // values. Caller takes ownership of the returned Value. |
- static base::Value* GetEventTypesAsValue(); |
- |
- // Returns a C-String symbolic name for |source_type|. |
- static const char* SourceTypeToString(SourceType source_type); |
- |
- // Returns a dictionary that maps source type symbolic names to their enum |
- // values. Caller takes ownership of the returned Value. |
- static base::Value* GetSourceTypesAsValue(); |
- |
- // Returns a C-String symbolic name for |event_phase|. |
- static const char* EventPhaseToString(EventPhase event_phase); |
- |
- // Returns true if |log_level| indicates the actual bytes transferred should |
- // be logged. This is only the case when |log_level| is LOG_ALL. |
- static bool IsLoggingBytes(LogLevel log_level); |
- |
- // Returns true if |log_level| indicates that events should be logged. This is |
- // the case when |log_level| is anything other than LOG_NONE. |
- static bool IsLogging(LogLevel log_level); |
- |
- // Creates a ParametersCallback that encapsulates a single integer. |
- // Warning: |name| must remain valid for the life of the callback. |
- // TODO(mmenke): Rename this to be consistent with Int64Callback. |
- static ParametersCallback IntegerCallback(const char* name, int value); |
- |
- // Creates a ParametersCallback that encapsulates a single int64. The |
- // callback will return the value as a StringValue, since IntegerValues |
- // only support 32-bit values. |
- // Warning: |name| must remain valid for the life of the callback. |
- static ParametersCallback Int64Callback(const char* name, int64 value); |
- |
- // Creates a ParametersCallback that encapsulates a single UTF8 string. Takes |
- // |value| as a pointer to avoid copying, and emphasize it must be valid for |
- // the life of the callback. |value| may not be NULL. |
- // Warning: |name| and |value| must remain valid for the life of the callback. |
- static ParametersCallback StringCallback(const char* name, |
- const std::string* value); |
- |
- // Same as above, but takes in a UTF16 string. |
- static ParametersCallback StringCallback(const char* name, |
- const base::string16* value); |
- |
- private: |
- friend class BoundNetLog; |
- |
- void AddEntry(EventType type, |
- const Source& source, |
- EventPhase phase, |
- const NetLog::ParametersCallback* parameters_callback); |
- |
- // Called whenever an observer is added or removed, or has its log level |
- // changed. Must have acquired |lock_| prior to calling. |
- void UpdateLogLevel(); |
- |
- // |lock_| protects access to |observers_|. |
- base::Lock lock_; |
- |
- // Last assigned source ID. Incremented to get the next one. |
- base::subtle::Atomic32 last_id_; |
- |
- // The current log level. |
- base::subtle::Atomic32 effective_log_level_; |
- |
- // |lock_| must be acquired whenever reading or writing to this. |
- ObserverList<ThreadSafeObserver, true> observers_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NetLog); |
-}; |
- |
-// Helper that binds a Source to a NetLog, and exposes convenience methods to |
-// output log messages without needing to pass in the source. |
-class NET_EXPORT BoundNetLog { |
- public: |
- BoundNetLog() : net_log_(NULL) {} |
- |
- // Add a log entry to the NetLog for the bound source. |
- void AddEntry(NetLog::EventType type, NetLog::EventPhase phase) const; |
- void AddEntry(NetLog::EventType type, |
- NetLog::EventPhase phase, |
- const NetLog::ParametersCallback& get_parameters) const; |
- |
- // Convenience methods that call AddEntry with a fixed "capture phase" |
- // (begin, end, or none). |
- void BeginEvent(NetLog::EventType type) const; |
- void BeginEvent(NetLog::EventType type, |
- const NetLog::ParametersCallback& get_parameters) const; |
- |
- void EndEvent(NetLog::EventType type) const; |
- void EndEvent(NetLog::EventType type, |
- const NetLog::ParametersCallback& get_parameters) const; |
- |
- void AddEvent(NetLog::EventType type) const; |
- void AddEvent(NetLog::EventType type, |
- const NetLog::ParametersCallback& get_parameters) const; |
- |
- // Just like AddEvent, except |net_error| is a net error code. A parameter |
- // called "net_error" with the indicated value will be recorded for the event. |
- // |net_error| must be negative, and not ERR_IO_PENDING, as it's not a true |
- // error. |
- void AddEventWithNetErrorCode(NetLog::EventType event_type, |
- int net_error) const; |
- |
- // Just like EndEvent, except |net_error| is a net error code. If it's |
- // negative, a parameter called "net_error" with a value of |net_error| is |
- // associated with the event. Otherwise, the end event has no parameters. |
- // |net_error| must not be ERR_IO_PENDING, as it's not a true error. |
- void EndEventWithNetErrorCode(NetLog::EventType event_type, |
- int net_error) const; |
- |
- // Logs a byte transfer event to the NetLog. Determines whether to log the |
- // received bytes or not based on the current logging level. |
- void AddByteTransferEvent(NetLog::EventType event_type, |
- int byte_count, const char* bytes) const; |
- |
- NetLog::LogLevel GetLogLevel() const; |
- |
- // Shortcut for NetLog::IsLoggingBytes(this->GetLogLevel()). |
- bool IsLoggingBytes() const; |
- |
- // Shortcut for NetLog::IsLogging(this->GetLogLevel()). |
- bool IsLogging() const; |
- |
- // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care |
- // of creating a unique source ID, and handles the case of NULL net_log. |
- static BoundNetLog Make(NetLog* net_log, NetLog::SourceType source_type); |
- |
- const NetLog::Source& source() const { return source_; } |
- NetLog* net_log() const { return net_log_; } |
- |
- private: |
- BoundNetLog(const NetLog::Source& source, NetLog* net_log) |
- : source_(source), net_log_(net_log) { |
- } |
- |
- NetLog::Source source_; |
- NetLog* net_log_; |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_BASE_NET_LOG_H_ |