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() : last_id_(0) { |
201 } | 201 } |
202 | 202 |
203 NetLog::~NetLog() { | 203 NetLog::~NetLog() { |
204 } | 204 } |
205 | 205 |
206 void NetLog::AddGlobalEntry(EventType type) { | 206 void NetLog::AddGlobalEntry(EventType type) { |
207 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), | 207 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), |
208 net::NetLog::PHASE_NONE, NULL); | 208 net::NetLog::PHASE_NONE, NULL); |
209 } | 209 } |
210 | 210 |
211 void NetLog::AddGlobalEntry( | 211 void NetLog::AddGlobalEntry( |
212 EventType type, | 212 EventType type, |
213 const NetLog::ParametersCallback& parameters_callback) { | 213 const NetLog::ParametersCallback& parameters_callback) { |
214 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), | 214 AddEntry(type, Source(net::NetLog::SOURCE_NONE, NextID()), |
215 net::NetLog::PHASE_NONE, ¶meters_callback); | 215 net::NetLog::PHASE_NONE, ¶meters_callback); |
216 } | 216 } |
217 | 217 |
218 uint32 NetLog::NextID() { | 218 uint32 NetLog::NextID() { |
219 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); | 219 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); |
220 } | 220 } |
221 | 221 |
222 NetLog::LogLevel NetLog::GetLogLevel() const { | 222 NetLogCaptureMode NetLog::GetCaptureMode() const { |
223 base::subtle::Atomic32 log_level = | 223 base::subtle::Atomic32 capture_mode_level = |
224 base::subtle::NoBarrier_Load(&effective_log_level_); | 224 base::subtle::NoBarrier_Load(&effective_capture_mode_level_); |
225 return static_cast<net::NetLog::LogLevel>(log_level); | 225 return NetLogCaptureMode( |
226 static_cast<NetLogCaptureMode::Level>(capture_mode_level)); | |
226 } | 227 } |
227 | 228 |
228 void NetLog::DeprecatedAddObserver(net::NetLog::ThreadSafeObserver* observer, | 229 void NetLog::DeprecatedAddObserver(net::NetLog::ThreadSafeObserver* observer, |
229 LogLevel log_level) { | 230 NetLogCaptureMode capture_mode) { |
230 DCHECK_NE(LOG_NONE, log_level); | 231 DCHECK(capture_mode.enabled()); |
232 | |
231 base::AutoLock lock(lock_); | 233 base::AutoLock lock(lock_); |
232 | 234 |
233 DCHECK(!observer->net_log_); | 235 DCHECK(!observer->net_log_); |
234 DCHECK_EQ(LOG_NONE, observer->log_level_); | 236 DCHECK(observer->capture_mode().enabled()); |
235 observers_.AddObserver(observer); | 237 observers_.AddObserver(observer); |
236 observer->net_log_ = this; | 238 observer->net_log_ = this; |
237 observer->log_level_ = log_level; | 239 observer->capture_mode_ = capture_mode; |
238 UpdateLogLevel(); | 240 UpdateCaptureMode(); |
239 } | 241 } |
240 | 242 |
241 void NetLog::SetObserverLogLevel(net::NetLog::ThreadSafeObserver* observer, | 243 void NetLog::SetObserverCaptureMode(net::NetLog::ThreadSafeObserver* observer, |
242 LogLevel log_level) { | 244 NetLogCaptureMode capture_mode) { |
243 DCHECK_NE(LOG_NONE, log_level); | 245 DCHECK(capture_mode.enabled()); |
244 base::AutoLock lock(lock_); | 246 base::AutoLock lock(lock_); |
245 | 247 |
246 DCHECK(observers_.HasObserver(observer)); | 248 DCHECK(observers_.HasObserver(observer)); |
247 DCHECK_EQ(this, observer->net_log_); | 249 DCHECK_EQ(this, observer->net_log_); |
248 DCHECK_NE(LOG_NONE, observer->log_level_); | 250 DCHECK(observer->capture_mode().enabled()); |
249 observer->log_level_ = log_level; | 251 observer->capture_mode_ = capture_mode; |
250 UpdateLogLevel(); | 252 UpdateCaptureMode(); |
251 } | 253 } |
252 | 254 |
253 void NetLog::DeprecatedRemoveObserver( | 255 void NetLog::DeprecatedRemoveObserver( |
254 net::NetLog::ThreadSafeObserver* observer) { | 256 net::NetLog::ThreadSafeObserver* observer) { |
255 base::AutoLock lock(lock_); | 257 base::AutoLock lock(lock_); |
256 | 258 |
257 DCHECK(observers_.HasObserver(observer)); | 259 DCHECK(observers_.HasObserver(observer)); |
258 DCHECK_EQ(this, observer->net_log_); | 260 DCHECK_EQ(this, observer->net_log_); |
259 DCHECK_NE(LOG_NONE, observer->log_level_); | 261 DCHECK(observer->capture_mode().enabled()); |
260 observers_.RemoveObserver(observer); | 262 observers_.RemoveObserver(observer); |
261 observer->net_log_ = NULL; | 263 observer->net_log_ = NULL; |
262 observer->log_level_ = LOG_NONE; | 264 observer->capture_mode_ = NetLogCaptureMode(); |
263 UpdateLogLevel(); | 265 UpdateCaptureMode(); |
264 } | 266 } |
265 | 267 |
266 void NetLog::UpdateLogLevel() { | 268 void NetLog::UpdateCaptureMode() { |
267 lock_.AssertAcquired(); | 269 lock_.AssertAcquired(); |
268 | 270 |
269 // Look through all the observers and find the finest granularity | 271 // Accumulate the capture mode of all the observers to find the maximum level. |
eroman
2015/04/09 00:08:19
changes here
| |
270 // log level (higher values of the enum imply *lower* log levels). | 272 NetLogCaptureMode new_capture_mode; |
271 LogLevel new_effective_log_level = LOG_NONE; | |
272 ObserverListBase<ThreadSafeObserver>::Iterator it(&observers_); | 273 ObserverListBase<ThreadSafeObserver>::Iterator it(&observers_); |
273 ThreadSafeObserver* observer; | 274 ThreadSafeObserver* observer; |
274 while ((observer = it.GetNext()) != NULL) { | 275 while ((observer = it.GetNext()) != NULL) { |
275 new_effective_log_level = | 276 new_capture_mode.AddMode(observer->capture_mode()); |
276 std::min(new_effective_log_level, observer->log_level()); | |
277 } | 277 } |
278 base::subtle::NoBarrier_Store(&effective_log_level_, new_effective_log_level); | 278 base::subtle::NoBarrier_Store(&effective_capture_mode_level_, |
279 new_capture_mode.level()); | |
279 } | 280 } |
280 | 281 |
281 // static | 282 // static |
282 std::string NetLog::TickCountToString(const base::TimeTicks& time) { | 283 std::string NetLog::TickCountToString(const base::TimeTicks& time) { |
283 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); | 284 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); |
284 return base::Int64ToString(delta_time); | 285 return base::Int64ToString(delta_time); |
285 } | 286 } |
286 | 287 |
287 // static | 288 // static |
288 const char* NetLog::EventTypeToString(EventType event) { | 289 const char* NetLog::EventTypeToString(EventType event) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
338 case PHASE_END: | 339 case PHASE_END: |
339 return "PHASE_END"; | 340 return "PHASE_END"; |
340 case PHASE_NONE: | 341 case PHASE_NONE: |
341 return "PHASE_NONE"; | 342 return "PHASE_NONE"; |
342 } | 343 } |
343 NOTREACHED(); | 344 NOTREACHED(); |
344 return NULL; | 345 return NULL; |
345 } | 346 } |
346 | 347 |
347 // static | 348 // 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, | 349 NetLog::ParametersCallback NetLog::IntegerCallback(const char* name, |
359 int value) { | 350 int value) { |
360 return base::Bind(&NetLogIntegerCallback, name, value); | 351 return base::Bind(&NetLogIntegerCallback, name, value); |
361 } | 352 } |
362 | 353 |
363 // static | 354 // static |
364 NetLog::ParametersCallback NetLog::Int64Callback(const char* name, | 355 NetLog::ParametersCallback NetLog::Int64Callback(const char* name, |
365 int64 value) { | 356 int64 value) { |
366 return base::Bind(&NetLogInt64Callback, name, value); | 357 return base::Bind(&NetLogInt64Callback, name, value); |
367 } | 358 } |
368 | 359 |
369 // static | 360 // static |
370 NetLog::ParametersCallback NetLog::StringCallback(const char* name, | 361 NetLog::ParametersCallback NetLog::StringCallback(const char* name, |
371 const std::string* value) { | 362 const std::string* value) { |
372 DCHECK(value); | 363 DCHECK(value); |
373 return base::Bind(&NetLogStringCallback, name, value); | 364 return base::Bind(&NetLogStringCallback, name, value); |
374 } | 365 } |
375 | 366 |
376 // static | 367 // static |
377 NetLog::ParametersCallback NetLog::StringCallback(const char* name, | 368 NetLog::ParametersCallback NetLog::StringCallback(const char* name, |
378 const base::string16* value) { | 369 const base::string16* value) { |
379 DCHECK(value); | 370 DCHECK(value); |
380 return base::Bind(&NetLogString16Callback, name, value); | 371 return base::Bind(&NetLogString16Callback, name, value); |
381 } | 372 } |
382 | 373 |
383 void NetLog::AddEntry(EventType type, | 374 void NetLog::AddEntry(EventType type, |
384 const Source& source, | 375 const Source& source, |
385 EventPhase phase, | 376 EventPhase phase, |
386 const NetLog::ParametersCallback* parameters_callback) { | 377 const NetLog::ParametersCallback* parameters_callback) { |
387 if (GetLogLevel() == LOG_NONE) | 378 if (!GetCaptureMode().enabled()) |
388 return; | 379 return; |
389 EntryData entry_data(type, source, phase, base::TimeTicks::Now(), | 380 EntryData entry_data(type, source, phase, base::TimeTicks::Now(), |
390 parameters_callback); | 381 parameters_callback); |
391 | 382 |
392 // Notify all of the log observers. | 383 // Notify all of the log observers. |
393 base::AutoLock lock(lock_); | 384 base::AutoLock lock(lock_); |
394 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); | 385 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); |
395 } | 386 } |
396 | 387 |
397 BoundNetLog::~BoundNetLog() { | 388 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)); | 458 EndEvent(event_type, NetLog::IntegerCallback("net_error", net_error)); |
468 } | 459 } |
469 } | 460 } |
470 | 461 |
471 void BoundNetLog::AddByteTransferEvent(NetLog::EventType event_type, | 462 void BoundNetLog::AddByteTransferEvent(NetLog::EventType event_type, |
472 int byte_count, | 463 int byte_count, |
473 const char* bytes) const { | 464 const char* bytes) const { |
474 AddEvent(event_type, base::Bind(BytesTransferredCallback, byte_count, bytes)); | 465 AddEvent(event_type, base::Bind(BytesTransferredCallback, byte_count, bytes)); |
475 } | 466 } |
476 | 467 |
477 NetLog::LogLevel BoundNetLog::GetLogLevel() const { | 468 NetLogCaptureMode BoundNetLog::GetCaptureMode() const { |
478 CrashIfInvalid(); | 469 CrashIfInvalid(); |
479 | 470 |
480 if (net_log_) | 471 if (net_log_) |
481 return net_log_->GetLogLevel(); | 472 return net_log_->GetCaptureMode(); |
482 return NetLog::LOG_NONE; | 473 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 } | 474 } |
492 | 475 |
493 // static | 476 // static |
494 BoundNetLog BoundNetLog::Make(NetLog* net_log, NetLog::SourceType source_type) { | 477 BoundNetLog BoundNetLog::Make(NetLog* net_log, NetLog::SourceType source_type) { |
495 if (!net_log) | 478 if (!net_log) |
496 return BoundNetLog(); | 479 return BoundNetLog(); |
497 | 480 |
498 NetLog::Source source(source_type, net_log->NextID()); | 481 NetLog::Source source(source_type, net_log->NextID()); |
499 return BoundNetLog(source, net_log); | 482 return BoundNetLog(source, net_log); |
500 } | 483 } |
501 | 484 |
502 void BoundNetLog::CrashIfInvalid() const { | 485 void BoundNetLog::CrashIfInvalid() const { |
503 Liveness liveness = liveness_; | 486 Liveness liveness = liveness_; |
504 | 487 |
505 if (liveness == ALIVE) | 488 if (liveness == ALIVE) |
506 return; | 489 return; |
507 | 490 |
508 base::debug::Alias(&liveness); | 491 base::debug::Alias(&liveness); |
509 CHECK_EQ(ALIVE, liveness); | 492 CHECK_EQ(ALIVE, liveness); |
510 } | 493 } |
511 | 494 |
512 } // namespace net | 495 } // namespace net |
OLD | NEW |