OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef NET_BASE_NET_LOG_H_ | 5 #ifndef NET_BASE_NET_LOG_H_ |
6 #define NET_BASE_NET_LOG_H_ | 6 #define NET_BASE_NET_LOG_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/ref_counted.h" | 12 #include "base/ref_counted.h" |
13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
14 #include "base/time.h" | 14 #include "base/time.h" |
15 #include "net/base/net_log.h" | 15 #include "net/base/net_log.h" |
16 | 16 |
| 17 class Value; |
| 18 |
17 namespace net { | 19 namespace net { |
18 | 20 |
19 // NetLog is the destination for log messages generated by the network stack. | 21 // NetLog is the destination for log messages generated by the network stack. |
20 // Each log message has a "source" field which identifies the specific entity | 22 // Each log message has a "source" field which identifies the specific entity |
21 // that generated the message (for example, which URLRequest or which | 23 // that generated the message (for example, which URLRequest or which |
22 // SocketStream). | 24 // SocketStream). |
23 // | 25 // |
24 // To avoid needing to pass in the "source id" to the logging functions, NetLog | 26 // To avoid needing to pass in the "source id" to the logging functions, NetLog |
25 // is usually accessed through a BoundNetLog, which will always pass in a | 27 // is usually accessed through a BoundNetLog, which will always pass in a |
26 // specific source ID. | 28 // specific source ID. |
27 // | 29 // |
28 // Note that NetLog is NOT THREADSAFE. | 30 // Note that NetLog is NOT THREADSAFE. |
29 // | 31 // |
30 // ******** The NetLog (and associated logging) is a work in progress ******** | 32 // ******** The NetLog (and associated logging) is a work in progress ******** |
31 // | 33 // |
32 // TODO(eroman): Remove the 'const' qualitifer from the BoundNetLog methods. | 34 // TODO(eroman): Remove the 'const' qualitifer from the BoundNetLog methods. |
33 // TODO(eroman): Remove the AddString() and AddStringLiteral() methods. | |
34 // These are a carry-over from old approach. Really, consumers | |
35 // should be calling AddEventWithParameters(), and passing a | |
36 // custom EventParameters* object that encapsulates all of the | |
37 // interesting state. | |
38 // TODO(eroman): Remove NetLogUtil. Pretty printing should only be done from | 35 // TODO(eroman): Remove NetLogUtil. Pretty printing should only be done from |
39 // javascript, and should be very context-aware. | 36 // javascript, and should be very context-aware. |
40 // TODO(eroman): Move Capturing*NetLog to its own file. (And eventually remove | 37 // TODO(eroman): Move Capturing*NetLog to its own file. (And eventually remove |
41 // all the consumers of it). | 38 // all the consumers of it). |
42 // TODO(eroman): Make the DNS jobs emit directly into the NetLog. | 39 // TODO(eroman): Make the DNS jobs emit directly into the NetLog. |
43 // TODO(eroman): Start a new Source each time URLRequest redirects | 40 // TODO(eroman): Start a new Source each time URLRequest redirects |
44 // (simpler to reason about each as a separate entity). | 41 // (simpler to reason about each as a separate entity). |
45 // TODO(eroman): Add the URLRequest load flags to the start entry. | 42 // TODO(eroman): Add the URLRequest load flags to the start entry. |
46 | 43 |
47 class NetLog { | 44 class NetLog { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 }; | 82 }; |
86 | 83 |
87 // Base class for associating additional parameters with an event. Log | 84 // Base class for associating additional parameters with an event. Log |
88 // observers need to know what specific derivations of EventParameters a | 85 // observers need to know what specific derivations of EventParameters a |
89 // particular EventType uses, in order to get at the individual components. | 86 // particular EventType uses, in order to get at the individual components. |
90 class EventParameters : public base::RefCounted<EventParameters> { | 87 class EventParameters : public base::RefCounted<EventParameters> { |
91 public: | 88 public: |
92 EventParameters() {} | 89 EventParameters() {} |
93 virtual ~EventParameters() {} | 90 virtual ~EventParameters() {} |
94 | 91 |
95 // Serializes the parameters to a string representation (this should be a | 92 // Serializes the parameters to a Value tree. This is intended to be a |
96 // lossless conversion). | 93 // lossless conversion, which is used to serialize the parameters to JSON. |
97 virtual std::string ToString() const = 0; | 94 // The caller takes ownership of the returned Value*. |
| 95 virtual Value* ToValue() const = 0; |
98 | 96 |
99 private: | 97 private: |
100 DISALLOW_COPY_AND_ASSIGN(EventParameters); | 98 DISALLOW_COPY_AND_ASSIGN(EventParameters); |
101 }; | 99 }; |
102 | 100 |
103 NetLog() {} | 101 NetLog() {} |
104 virtual ~NetLog() {} | 102 virtual ~NetLog() {} |
105 | 103 |
106 // Emits an event to the log stream. | 104 // Emits an event to the log stream. |
107 // |type| - The type of the event. | 105 // |type| - The type of the event. |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 // Convenience methods that call through to the NetLog, passing in the | 161 // Convenience methods that call through to the NetLog, passing in the |
164 // currently bound source. | 162 // currently bound source. |
165 void AddEvent(NetLog::EventType event_type) const; | 163 void AddEvent(NetLog::EventType event_type) const; |
166 void AddEventWithParameters(NetLog::EventType event_type, | 164 void AddEventWithParameters(NetLog::EventType event_type, |
167 NetLog::EventParameters* params) const; | 165 NetLog::EventParameters* params) const; |
168 bool HasListener() const; | 166 bool HasListener() const; |
169 void BeginEvent(NetLog::EventType event_type) const; | 167 void BeginEvent(NetLog::EventType event_type) const; |
170 void BeginEventWithParameters(NetLog::EventType event_type, | 168 void BeginEventWithParameters(NetLog::EventType event_type, |
171 NetLog::EventParameters* params) const; | 169 NetLog::EventParameters* params) const; |
172 void BeginEventWithString(NetLog::EventType event_type, | 170 void BeginEventWithString(NetLog::EventType event_type, |
173 const std::string& string) const; | 171 const char* name, const std::string& value) const; |
174 void BeginEventWithInteger(NetLog::EventType event_type, int integer) const; | 172 void BeginEventWithInteger(NetLog::EventType event_type, |
175 void AddEventWithInteger(NetLog::EventType event_type, int integer) const; | 173 const char* name, int value) const; |
| 174 void AddEventWithInteger(NetLog::EventType event_type, |
| 175 const char* name, int value) const; |
| 176 void AddEventWithString(NetLog::EventType event_type, |
| 177 const char* name, const std::string& value) const; |
176 void EndEvent(NetLog::EventType event_type) const; | 178 void EndEvent(NetLog::EventType event_type) const; |
177 void EndEventWithParameters(NetLog::EventType event_type, | 179 void EndEventWithParameters(NetLog::EventType event_type, |
178 NetLog::EventParameters* params) const; | 180 NetLog::EventParameters* params) const; |
179 void EndEventWithInteger(NetLog::EventType event_type, int integer) const; | 181 void EndEventWithInteger(NetLog::EventType event_type, |
180 | 182 const char* name, int value) const; |
181 // Deprecated: Don't add new dependencies that use these methods. Instead, use | |
182 // AddEventWithParameters(). | |
183 void AddString(const std::string& string) const; | |
184 void AddStringLiteral(const char* literal) const; | |
185 | 183 |
186 // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care | 184 // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care |
187 // of creating a unique source ID, and handles the case of NULL net_log. | 185 // of creating a unique source ID, and handles the case of NULL net_log. |
188 static BoundNetLog Make(NetLog* net_log, NetLog::SourceType source_type); | 186 static BoundNetLog Make(NetLog* net_log, NetLog::SourceType source_type); |
189 | 187 |
190 const NetLog::Source& source() const { return source_; } | 188 const NetLog::Source& source() const { return source_; } |
191 NetLog* net_log() const { return net_log_; } | 189 NetLog* net_log() const { return net_log_; } |
192 | 190 |
193 private: | 191 private: |
194 NetLog::Source source_; | 192 NetLog::Source source_; |
195 NetLog* net_log_; | 193 NetLog* net_log_; |
196 }; | 194 }; |
197 | 195 |
198 // NetLogStringParameter is a subclass of EventParameters that encapsulates a | 196 // NetLogStringParameter is a subclass of EventParameters that encapsulates a |
199 // single std::string parameter. | 197 // single std::string parameter. |
200 class NetLogStringParameter : public NetLog::EventParameters { | 198 class NetLogStringParameter : public NetLog::EventParameters { |
201 public: | 199 public: |
202 explicit NetLogStringParameter(const std::string& value); | 200 // |name| must be a string literal. |
| 201 NetLogStringParameter(const char* name, const std::string& value); |
203 | 202 |
204 const std::string& value() const { | 203 const std::string& value() const { |
205 return value_; | 204 return value_; |
206 } | 205 } |
207 | 206 |
208 virtual std::string ToString() const { | 207 virtual Value* ToValue() const; |
209 return value_; | |
210 } | |
211 | 208 |
212 private: | 209 private: |
213 std::string value_; | 210 const char* const name_; |
| 211 const std::string value_; |
214 }; | 212 }; |
215 | 213 |
216 // NetLogIntegerParameter is a subclass of EventParameters that encapsulates a | 214 // NetLogIntegerParameter is a subclass of EventParameters that encapsulates a |
217 // single integer parameter. | 215 // single integer parameter. |
218 class NetLogIntegerParameter : public NetLog::EventParameters { | 216 class NetLogIntegerParameter : public NetLog::EventParameters { |
219 public: | 217 public: |
220 explicit NetLogIntegerParameter(int value) : value_(value) {} | 218 // |name| must be a string literal. |
| 219 NetLogIntegerParameter(const char* name, int value) |
| 220 : name_(name), value_(value) {} |
221 | 221 |
222 int value() const { | 222 int value() const { |
223 return value_; | 223 return value_; |
224 } | 224 } |
225 | 225 |
226 virtual std::string ToString() const; | 226 virtual Value* ToValue() const; |
227 | 227 |
228 private: | 228 private: |
| 229 const char* name_; |
229 const int value_; | 230 const int value_; |
230 }; | 231 }; |
231 | 232 |
232 // NetLogStringLiteralParameter is a subclass of EventParameters that | |
233 // encapsulates a single string literal parameter. | |
234 class NetLogStringLiteralParameter : public NetLog::EventParameters { | |
235 public: | |
236 explicit NetLogStringLiteralParameter(const char* value) : value_(value) {} | |
237 | |
238 const char* const value() const { | |
239 return value_; | |
240 } | |
241 | |
242 virtual std::string ToString() const; | |
243 | |
244 private: | |
245 const char* const value_; | |
246 }; | |
247 | |
248 | |
249 // CapturingNetLog is an implementation of NetLog that saves messages to a | 233 // CapturingNetLog is an implementation of NetLog that saves messages to a |
250 // bounded buffer. | 234 // bounded buffer. |
251 class CapturingNetLog : public NetLog { | 235 class CapturingNetLog : public NetLog { |
252 public: | 236 public: |
253 struct Entry { | 237 struct Entry { |
254 Entry(EventType type, | 238 Entry(EventType type, |
255 const base::TimeTicks& time, | 239 const base::TimeTicks& time, |
256 Source source, | 240 Source source, |
257 EventPhase phase, | 241 EventPhase phase, |
258 EventParameters* extra_parameters) | 242 EventParameters* extra_parameters) |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 private: | 316 private: |
333 NetLog::Source source_; | 317 NetLog::Source source_; |
334 scoped_ptr<CapturingNetLog> capturing_net_log_; | 318 scoped_ptr<CapturingNetLog> capturing_net_log_; |
335 | 319 |
336 DISALLOW_COPY_AND_ASSIGN(CapturingBoundNetLog); | 320 DISALLOW_COPY_AND_ASSIGN(CapturingBoundNetLog); |
337 }; | 321 }; |
338 | 322 |
339 } // namespace net | 323 } // namespace net |
340 | 324 |
341 #endif // NET_BASE_NET_LOG_H_ | 325 #endif // NET_BASE_NET_LOG_H_ |
OLD | NEW |