OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "net/log/net_log.h" | 5 #include "net/log/net_log.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/alias.h" | 8 #include "base/debug/alias.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "net/base/net_errors.h" | 14 #include "net/base/net_errors.h" |
15 | 15 |
16 namespace net { | 16 namespace net { |
17 | 17 |
18 namespace { | 18 namespace { |
19 | 19 |
20 // Returns parameters for logging data transferred events. Includes number of | 20 // Returns parameters for logging data transferred events. At a minum includes |
21 // bytes transferred and, if the log level indicates bytes should be logged and | 21 // the number of bytes transferred. If the capture mode allows logging byte |
22 // |byte_count| > 0, the bytes themselves. The bytes are hex-encoded, since | 22 // contents and |byte_count| > 0, then will include the actual bytes. The |
23 // base::StringValue only supports UTF-8. | 23 // bytes are hex-encoded, since base::StringValue only supports UTF-8. |
24 base::Value* BytesTransferredCallback(int byte_count, | 24 base::Value* BytesTransferredCallback(int byte_count, |
25 const char* bytes, | 25 const char* bytes, |
26 NetLog::LogLevel log_level) { | 26 NetLogCaptureMode capture_mode) { |
27 base::DictionaryValue* dict = new base::DictionaryValue(); | 27 base::DictionaryValue* dict = new base::DictionaryValue(); |
28 dict->SetInteger("byte_count", byte_count); | 28 dict->SetInteger("byte_count", byte_count); |
29 if (NetLog::IsLoggingBytes(log_level) && byte_count > 0) | 29 if (capture_mode.include_socket_bytes() && byte_count > 0) |
30 dict->SetString("hex_encoded_bytes", base::HexEncode(bytes, byte_count)); | 30 dict->SetString("hex_encoded_bytes", base::HexEncode(bytes, byte_count)); |
31 return dict; | 31 return dict; |
32 } | 32 } |
33 | 33 |
34 base::Value* SourceEventParametersCallback(const NetLog::Source source, | 34 base::Value* SourceEventParametersCallback( |
35 NetLog::LogLevel /* log_level */) { | 35 const NetLog::Source source, |
| 36 NetLogCaptureMode /* capture_mode */) { |
36 if (!source.IsValid()) | 37 if (!source.IsValid()) |
37 return NULL; | 38 return NULL; |
38 base::DictionaryValue* event_params = new base::DictionaryValue(); | 39 base::DictionaryValue* event_params = new base::DictionaryValue(); |
39 source.AddToEventParameters(event_params); | 40 source.AddToEventParameters(event_params); |
40 return event_params; | 41 return event_params; |
41 } | 42 } |
42 | 43 |
43 base::Value* NetLogIntegerCallback(const char* name, | 44 base::Value* NetLogIntegerCallback(const char* name, |
44 int value, | 45 int value, |
45 NetLog::LogLevel /* log_level */) { | 46 NetLogCaptureMode /* capture_mode */) { |
46 base::DictionaryValue* event_params = new base::DictionaryValue(); | 47 base::DictionaryValue* event_params = new base::DictionaryValue(); |
47 event_params->SetInteger(name, value); | 48 event_params->SetInteger(name, value); |
48 return event_params; | 49 return event_params; |
49 } | 50 } |
50 | 51 |
51 base::Value* NetLogInt64Callback(const char* name, | 52 base::Value* NetLogInt64Callback(const char* name, |
52 int64 value, | 53 int64 value, |
53 NetLog::LogLevel /* log_level */) { | 54 NetLogCaptureMode /* capture_mode */) { |
54 base::DictionaryValue* event_params = new base::DictionaryValue(); | 55 base::DictionaryValue* event_params = new base::DictionaryValue(); |
55 event_params->SetString(name, base::Int64ToString(value)); | 56 event_params->SetString(name, base::Int64ToString(value)); |
56 return event_params; | 57 return event_params; |
57 } | 58 } |
58 | 59 |
59 base::Value* NetLogStringCallback(const char* name, | 60 base::Value* NetLogStringCallback(const char* name, |
60 const std::string* value, | 61 const std::string* value, |
61 NetLog::LogLevel /* log_level */) { | 62 NetLogCaptureMode /* capture_mode */) { |
62 base::DictionaryValue* event_params = new base::DictionaryValue(); | 63 base::DictionaryValue* event_params = new base::DictionaryValue(); |
63 event_params->SetString(name, *value); | 64 event_params->SetString(name, *value); |
64 return event_params; | 65 return event_params; |
65 } | 66 } |
66 | 67 |
67 base::Value* NetLogString16Callback(const char* name, | 68 base::Value* NetLogString16Callback(const char* name, |
68 const base::string16* value, | 69 const base::string16* value, |
69 NetLog::LogLevel /* log_level */) { | 70 NetLogCaptureMode /* capture_mode */) { |
70 base::DictionaryValue* event_params = new base::DictionaryValue(); | 71 base::DictionaryValue* event_params = new base::DictionaryValue(); |
71 event_params->SetString(name, *value); | 72 event_params->SetString(name, *value); |
72 return event_params; | 73 return event_params; |
73 } | 74 } |
74 | 75 |
75 } // namespace | 76 } // namespace |
76 | 77 |
77 // LoadTimingInfo requires this be 0. | 78 // LoadTimingInfo requires this be 0. |
78 const uint32 NetLog::Source::kInvalidId = 0; | 79 const uint32 NetLog::Source::kInvalidId = 0; |
79 | 80 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 source_dict->SetInteger("id", data_->source.id); | 131 source_dict->SetInteger("id", data_->source.id); |
131 source_dict->SetInteger("type", static_cast<int>(data_->source.type)); | 132 source_dict->SetInteger("type", static_cast<int>(data_->source.type)); |
132 entry_dict->Set("source", source_dict); | 133 entry_dict->Set("source", source_dict); |
133 | 134 |
134 // Set the event info. | 135 // Set the event info. |
135 entry_dict->SetInteger("type", static_cast<int>(data_->type)); | 136 entry_dict->SetInteger("type", static_cast<int>(data_->type)); |
136 entry_dict->SetInteger("phase", static_cast<int>(data_->phase)); | 137 entry_dict->SetInteger("phase", static_cast<int>(data_->phase)); |
137 | 138 |
138 // Set the event-specific parameters. | 139 // Set the event-specific parameters. |
139 if (data_->parameters_callback) { | 140 if (data_->parameters_callback) { |
140 base::Value* value = data_->parameters_callback->Run(log_level_); | 141 base::Value* value = data_->parameters_callback->Run(capture_mode_); |
141 if (value) | 142 if (value) |
142 entry_dict->Set("params", value); | 143 entry_dict->Set("params", value); |
143 } | 144 } |
144 | 145 |
145 return entry_dict; | 146 return entry_dict; |
146 } | 147 } |
147 | 148 |
148 base::Value* NetLog::Entry::ParametersToValue() const { | 149 base::Value* NetLog::Entry::ParametersToValue() const { |
149 if (data_->parameters_callback) | 150 if (data_->parameters_callback) |
150 return data_->parameters_callback->Run(log_level_); | 151 return data_->parameters_callback->Run(capture_mode_); |
151 return NULL; | 152 return NULL; |
152 } | 153 } |
153 | 154 |
154 NetLog::EntryData::EntryData(EventType type, | 155 NetLog::EntryData::EntryData(EventType type, |
155 Source source, | 156 Source source, |
156 EventPhase phase, | 157 EventPhase phase, |
157 base::TimeTicks time, | 158 base::TimeTicks time, |
158 const ParametersCallback* parameters_callback) | 159 const ParametersCallback* parameters_callback) |
159 : type(type), | 160 : type(type), |
160 source(source), | 161 source(source), |
161 phase(phase), | 162 phase(phase), |
162 time(time), | 163 time(time), |
163 parameters_callback(parameters_callback) { | 164 parameters_callback(parameters_callback) { |
164 } | 165 } |
165 | 166 |
166 NetLog::EntryData::~EntryData() { | 167 NetLog::EntryData::~EntryData() { |
167 } | 168 } |
168 | 169 |
169 NetLog::Entry::Entry(const EntryData* data, LogLevel log_level) | 170 NetLog::Entry::Entry(const EntryData* data, NetLogCaptureMode capture_mode) |
170 : data_(data), log_level_(log_level) { | 171 : data_(data), capture_mode_(capture_mode) { |
171 } | 172 } |
172 | 173 |
173 NetLog::Entry::~Entry() { | 174 NetLog::Entry::~Entry() { |
174 } | 175 } |
175 | 176 |
176 NetLog::ThreadSafeObserver::ThreadSafeObserver() | 177 NetLog::ThreadSafeObserver::ThreadSafeObserver() : net_log_(NULL) { |
177 : log_level_(LOG_NONE), net_log_(NULL) { | |
178 } | 178 } |
179 | 179 |
180 NetLog::ThreadSafeObserver::~ThreadSafeObserver() { | 180 NetLog::ThreadSafeObserver::~ThreadSafeObserver() { |
181 // Make sure we aren't watching a NetLog on destruction. Because the NetLog | 181 // Make sure we aren't watching a NetLog on destruction. Because the NetLog |
182 // may pass events to each observer on multiple threads, we cannot safely | 182 // may pass events to each observer on multiple threads, we cannot safely |
183 // stop watching a NetLog automatically from a parent class. | 183 // stop watching a NetLog automatically from a parent class. |
184 DCHECK(!net_log_); | 184 DCHECK(!net_log_); |
185 } | 185 } |
186 | 186 |
187 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const { | 187 NetLogCaptureMode NetLog::ThreadSafeObserver::capture_mode() const { |
188 DCHECK(net_log_); | 188 DCHECK(net_log_); |
189 return log_level_; | 189 return capture_mode_; |
190 } | 190 } |
191 | 191 |
192 NetLog* NetLog::ThreadSafeObserver::net_log() const { | 192 NetLog* NetLog::ThreadSafeObserver::net_log() const { |
193 return net_log_; | 193 return net_log_; |
194 } | 194 } |
195 | 195 |
196 void NetLog::ThreadSafeObserver::OnAddEntryData(const EntryData& entry_data) { | 196 void NetLog::ThreadSafeObserver::OnAddEntryData(const EntryData& entry_data) { |
197 OnAddEntry(Entry(&entry_data, log_level())); | 197 OnAddEntry(Entry(&entry_data, capture_mode())); |
198 } | 198 } |
199 | 199 |
200 NetLog::NetLog() : last_id_(0), effective_log_level_(LOG_NONE) { | 200 NetLog::NetLog() |
| 201 : last_id_(0), |
| 202 effective_capture_mode_int32_( |
| 203 NetLogCaptureMode::None().ToInternalValue()) { |
201 } | 204 } |
202 | 205 |
203 NetLog::~NetLog() { | 206 NetLog::~NetLog() { |
204 } | 207 } |
205 | 208 |
206 void NetLog::AddGlobalEntry(EventType type) { | 209 void NetLog::AddGlobalEntry(EventType type) { |
207 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), | 210 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), |
208 net::NetLog::PHASE_NONE, NULL); | 211 net::NetLog::PHASE_NONE, NULL); |
209 } | 212 } |
210 | 213 |
211 void NetLog::AddGlobalEntry( | 214 void NetLog::AddGlobalEntry( |
212 EventType type, | 215 EventType type, |
213 const NetLog::ParametersCallback& parameters_callback) { | 216 const NetLog::ParametersCallback& parameters_callback) { |
214 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), | 217 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), |
215 net::NetLog::PHASE_NONE, ¶meters_callback); | 218 net::NetLog::PHASE_NONE, ¶meters_callback); |
216 } | 219 } |
217 | 220 |
218 uint32 NetLog::NextID() { | 221 uint32 NetLog::NextID() { |
219 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); | 222 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); |
220 } | 223 } |
221 | 224 |
222 NetLog::LogLevel NetLog::GetLogLevel() const { | 225 NetLogCaptureMode NetLog::GetCaptureMode() const { |
223 base::subtle::Atomic32 log_level = | 226 base::subtle::Atomic32 capture_mode = |
224 base::subtle::NoBarrier_Load(&effective_log_level_); | 227 base::subtle::NoBarrier_Load(&effective_capture_mode_int32_); |
225 return static_cast<net::NetLog::LogLevel>(log_level); | 228 return NetLogCaptureMode::FromInternalValue(capture_mode); |
226 } | 229 } |
227 | 230 |
228 void NetLog::DeprecatedAddObserver(net::NetLog::ThreadSafeObserver* observer, | 231 void NetLog::DeprecatedAddObserver(net::NetLog::ThreadSafeObserver* observer, |
229 LogLevel log_level) { | 232 NetLogCaptureMode capture_mode) { |
230 DCHECK_NE(LOG_NONE, log_level); | 233 DCHECK(capture_mode.enabled()); |
| 234 |
231 base::AutoLock lock(lock_); | 235 base::AutoLock lock(lock_); |
232 | 236 |
233 DCHECK(!observer->net_log_); | 237 DCHECK(!observer->net_log_); |
234 DCHECK_EQ(LOG_NONE, observer->log_level_); | 238 DCHECK(!observer->capture_mode_.enabled()); |
235 observers_.AddObserver(observer); | 239 observers_.AddObserver(observer); |
236 observer->net_log_ = this; | 240 observer->net_log_ = this; |
237 observer->log_level_ = log_level; | 241 observer->capture_mode_ = capture_mode; |
238 UpdateLogLevel(); | 242 UpdateCaptureMode(); |
239 } | 243 } |
240 | 244 |
241 void NetLog::SetObserverLogLevel(net::NetLog::ThreadSafeObserver* observer, | 245 void NetLog::SetObserverCaptureMode(net::NetLog::ThreadSafeObserver* observer, |
242 LogLevel log_level) { | 246 NetLogCaptureMode capture_mode) { |
243 DCHECK_NE(LOG_NONE, log_level); | 247 DCHECK(capture_mode.enabled()); |
244 base::AutoLock lock(lock_); | 248 base::AutoLock lock(lock_); |
245 | 249 |
246 DCHECK(observers_.HasObserver(observer)); | 250 DCHECK(observers_.HasObserver(observer)); |
247 DCHECK_EQ(this, observer->net_log_); | 251 DCHECK_EQ(this, observer->net_log_); |
248 DCHECK_NE(LOG_NONE, observer->log_level_); | 252 DCHECK(observer->capture_mode_.enabled()); |
249 observer->log_level_ = log_level; | 253 observer->capture_mode_ = capture_mode; |
250 UpdateLogLevel(); | 254 UpdateCaptureMode(); |
251 } | 255 } |
252 | 256 |
253 void NetLog::DeprecatedRemoveObserver( | 257 void NetLog::DeprecatedRemoveObserver( |
254 net::NetLog::ThreadSafeObserver* observer) { | 258 net::NetLog::ThreadSafeObserver* observer) { |
255 base::AutoLock lock(lock_); | 259 base::AutoLock lock(lock_); |
256 | 260 |
257 DCHECK(observers_.HasObserver(observer)); | 261 DCHECK(observers_.HasObserver(observer)); |
258 DCHECK_EQ(this, observer->net_log_); | 262 DCHECK_EQ(this, observer->net_log_); |
259 DCHECK_NE(LOG_NONE, observer->log_level_); | 263 DCHECK(observer->capture_mode_.enabled()); |
260 observers_.RemoveObserver(observer); | 264 observers_.RemoveObserver(observer); |
261 observer->net_log_ = NULL; | 265 observer->net_log_ = NULL; |
262 observer->log_level_ = LOG_NONE; | 266 observer->capture_mode_ = NetLogCaptureMode(); |
263 UpdateLogLevel(); | 267 UpdateCaptureMode(); |
264 } | 268 } |
265 | 269 |
266 void NetLog::UpdateLogLevel() { | 270 void NetLog::UpdateCaptureMode() { |
267 lock_.AssertAcquired(); | 271 lock_.AssertAcquired(); |
268 | 272 |
269 // Look through all the observers and find the finest granularity | 273 // Accumulate the capture mode of all the observers to find the maximum level. |
270 // log level (higher values of the enum imply *lower* log levels). | 274 NetLogCaptureMode new_capture_mode = NetLogCaptureMode::None(); |
271 LogLevel new_effective_log_level = LOG_NONE; | |
272 ObserverListBase<ThreadSafeObserver>::Iterator it(&observers_); | 275 ObserverListBase<ThreadSafeObserver>::Iterator it(&observers_); |
273 ThreadSafeObserver* observer; | 276 ThreadSafeObserver* observer; |
274 while ((observer = it.GetNext()) != NULL) { | 277 while ((observer = it.GetNext()) != NULL) { |
275 new_effective_log_level = | 278 new_capture_mode = |
276 std::min(new_effective_log_level, observer->log_level()); | 279 NetLogCaptureMode::Max(new_capture_mode, observer->capture_mode()); |
277 } | 280 } |
278 base::subtle::NoBarrier_Store(&effective_log_level_, new_effective_log_level); | 281 base::subtle::NoBarrier_Store(&effective_capture_mode_int32_, |
| 282 new_capture_mode.ToInternalValue()); |
279 } | 283 } |
280 | 284 |
281 // static | 285 // static |
282 std::string NetLog::TickCountToString(const base::TimeTicks& time) { | 286 std::string NetLog::TickCountToString(const base::TimeTicks& time) { |
283 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); | 287 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); |
284 return base::Int64ToString(delta_time); | 288 return base::Int64ToString(delta_time); |
285 } | 289 } |
286 | 290 |
287 // static | 291 // static |
288 const char* NetLog::EventTypeToString(EventType event) { | 292 const char* NetLog::EventTypeToString(EventType event) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 case PHASE_END: | 342 case PHASE_END: |
339 return "PHASE_END"; | 343 return "PHASE_END"; |
340 case PHASE_NONE: | 344 case PHASE_NONE: |
341 return "PHASE_NONE"; | 345 return "PHASE_NONE"; |
342 } | 346 } |
343 NOTREACHED(); | 347 NOTREACHED(); |
344 return NULL; | 348 return NULL; |
345 } | 349 } |
346 | 350 |
347 // static | 351 // static |
348 bool NetLog::IsLoggingBytes(LogLevel log_level) { | |
349 return log_level == NetLog::LOG_ALL; | |
350 } | |
351 | |
352 // static | |
353 bool NetLog::IsLogging(LogLevel log_level) { | |
354 return log_level < NetLog::LOG_NONE; | |
355 } | |
356 | |
357 // static | |
358 NetLog::ParametersCallback NetLog::IntegerCallback(const char* name, | 352 NetLog::ParametersCallback NetLog::IntegerCallback(const char* name, |
359 int value) { | 353 int value) { |
360 return base::Bind(&NetLogIntegerCallback, name, value); | 354 return base::Bind(&NetLogIntegerCallback, name, value); |
361 } | 355 } |
362 | 356 |
363 // static | 357 // static |
364 NetLog::ParametersCallback NetLog::Int64Callback(const char* name, | 358 NetLog::ParametersCallback NetLog::Int64Callback(const char* name, |
365 int64 value) { | 359 int64 value) { |
366 return base::Bind(&NetLogInt64Callback, name, value); | 360 return base::Bind(&NetLogInt64Callback, name, value); |
367 } | 361 } |
368 | 362 |
369 // static | 363 // static |
370 NetLog::ParametersCallback NetLog::StringCallback(const char* name, | 364 NetLog::ParametersCallback NetLog::StringCallback(const char* name, |
371 const std::string* value) { | 365 const std::string* value) { |
372 DCHECK(value); | 366 DCHECK(value); |
373 return base::Bind(&NetLogStringCallback, name, value); | 367 return base::Bind(&NetLogStringCallback, name, value); |
374 } | 368 } |
375 | 369 |
376 // static | 370 // static |
377 NetLog::ParametersCallback NetLog::StringCallback(const char* name, | 371 NetLog::ParametersCallback NetLog::StringCallback(const char* name, |
378 const base::string16* value) { | 372 const base::string16* value) { |
379 DCHECK(value); | 373 DCHECK(value); |
380 return base::Bind(&NetLogString16Callback, name, value); | 374 return base::Bind(&NetLogString16Callback, name, value); |
381 } | 375 } |
382 | 376 |
383 void NetLog::AddEntry(EventType type, | 377 void NetLog::AddEntry(EventType type, |
384 const Source& source, | 378 const Source& source, |
385 EventPhase phase, | 379 EventPhase phase, |
386 const NetLog::ParametersCallback* parameters_callback) { | 380 const NetLog::ParametersCallback* parameters_callback) { |
387 if (GetLogLevel() == LOG_NONE) | 381 if (!GetCaptureMode().enabled()) |
388 return; | 382 return; |
389 EntryData entry_data(type, source, phase, base::TimeTicks::Now(), | 383 EntryData entry_data(type, source, phase, base::TimeTicks::Now(), |
390 parameters_callback); | 384 parameters_callback); |
391 | 385 |
392 // Notify all of the log observers. | 386 // Notify all of the log observers. |
393 base::AutoLock lock(lock_); | 387 base::AutoLock lock(lock_); |
394 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); | 388 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); |
395 } | 389 } |
396 | 390 |
397 BoundNetLog::~BoundNetLog() { | 391 BoundNetLog::~BoundNetLog() { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 EndEvent(event_type, NetLog::IntegerCallback("net_error", net_error)); | 461 EndEvent(event_type, NetLog::IntegerCallback("net_error", net_error)); |
468 } | 462 } |
469 } | 463 } |
470 | 464 |
471 void BoundNetLog::AddByteTransferEvent(NetLog::EventType event_type, | 465 void BoundNetLog::AddByteTransferEvent(NetLog::EventType event_type, |
472 int byte_count, | 466 int byte_count, |
473 const char* bytes) const { | 467 const char* bytes) const { |
474 AddEvent(event_type, base::Bind(BytesTransferredCallback, byte_count, bytes)); | 468 AddEvent(event_type, base::Bind(BytesTransferredCallback, byte_count, bytes)); |
475 } | 469 } |
476 | 470 |
477 NetLog::LogLevel BoundNetLog::GetLogLevel() const { | 471 NetLogCaptureMode BoundNetLog::GetCaptureMode() const { |
478 CrashIfInvalid(); | 472 CrashIfInvalid(); |
479 | 473 |
480 if (net_log_) | 474 if (net_log_) |
481 return net_log_->GetLogLevel(); | 475 return net_log_->GetCaptureMode(); |
482 return NetLog::LOG_NONE; | 476 return NetLogCaptureMode(); |
483 } | |
484 | |
485 bool BoundNetLog::IsLoggingBytes() const { | |
486 return NetLog::IsLoggingBytes(GetLogLevel()); | |
487 } | |
488 | |
489 bool BoundNetLog::IsLogging() const { | |
490 return NetLog::IsLogging(GetLogLevel()); | |
491 } | 477 } |
492 | 478 |
493 // static | 479 // static |
494 BoundNetLog BoundNetLog::Make(NetLog* net_log, NetLog::SourceType source_type) { | 480 BoundNetLog BoundNetLog::Make(NetLog* net_log, NetLog::SourceType source_type) { |
495 if (!net_log) | 481 if (!net_log) |
496 return BoundNetLog(); | 482 return BoundNetLog(); |
497 | 483 |
498 NetLog::Source source(source_type, net_log->NextID()); | 484 NetLog::Source source(source_type, net_log->NextID()); |
499 return BoundNetLog(source, net_log); | 485 return BoundNetLog(source, net_log); |
500 } | 486 } |
501 | 487 |
502 void BoundNetLog::CrashIfInvalid() const { | 488 void BoundNetLog::CrashIfInvalid() const { |
503 Liveness liveness = liveness_; | 489 Liveness liveness = liveness_; |
504 | 490 |
505 if (liveness == ALIVE) | 491 if (liveness == ALIVE) |
506 return; | 492 return; |
507 | 493 |
508 base::debug::Alias(&liveness); | 494 base::debug::Alias(&liveness); |
509 CHECK_EQ(ALIVE, liveness); | 495 CHECK_EQ(ALIVE, liveness); |
510 } | 496 } |
511 | 497 |
512 } // namespace net | 498 } // namespace net |
OLD | NEW |