| 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 |