| 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/base/net_log.h" | 5 #include "net/base/net_log.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "base/time.h" | 11 #include "base/time.h" |
| 12 #include "base/values.h" | 12 #include "base/values.h" |
| 13 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 14 | 14 |
| 15 namespace net { | 15 namespace net { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 // Returns parameters for logging data transferred events. Includes number of | 19 // Returns parameters for logging data transferred events. Includes number of |
| 20 // bytes transferred and, if the log level indicates bytes should be logged and | 20 // bytes transferred and, if the log level indicates bytes should be logged and |
| 21 // |byte_count| > 0, the bytes themselves. The bytes are hex-encoded, since | 21 // |byte_count| > 0, the bytes themselves. The bytes are hex-encoded, since |
| 22 // base::StringValue only supports UTF-8. | 22 // base::StringValue only supports UTF-8. |
| 23 Value* BytesTransferredCallback(int byte_count, | 23 base::Value* BytesTransferredCallback(int byte_count, |
| 24 const char* bytes, | 24 const char* bytes, |
| 25 NetLog::LogLevel log_level) { | 25 NetLog::LogLevel log_level) { |
| 26 DictionaryValue* dict = new DictionaryValue(); | 26 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 27 dict->SetInteger("byte_count", byte_count); | 27 dict->SetInteger("byte_count", byte_count); |
| 28 if (NetLog::IsLoggingBytes(log_level) && byte_count > 0) | 28 if (NetLog::IsLoggingBytes(log_level) && byte_count > 0) |
| 29 dict->SetString("hex_encoded_bytes", base::HexEncode(bytes, byte_count)); | 29 dict->SetString("hex_encoded_bytes", base::HexEncode(bytes, byte_count)); |
| 30 return dict; | 30 return dict; |
| 31 } | 31 } |
| 32 | 32 |
| 33 Value* SourceEventParametersCallback(const NetLog::Source source, | 33 base::Value* SourceEventParametersCallback(const NetLog::Source source, |
| 34 NetLog::LogLevel /* log_level */) { | 34 NetLog::LogLevel /* log_level */) { |
| 35 if (!source.IsValid()) | 35 if (!source.IsValid()) |
| 36 return NULL; | 36 return NULL; |
| 37 DictionaryValue* event_params = new DictionaryValue(); | 37 base::DictionaryValue* event_params = new base::DictionaryValue(); |
| 38 source.AddToEventParameters(event_params); | 38 source.AddToEventParameters(event_params); |
| 39 return event_params; | 39 return event_params; |
| 40 } | 40 } |
| 41 | 41 |
| 42 Value* NetLogIntegerCallback(const char* name, | 42 base::Value* NetLogIntegerCallback(const char* name, |
| 43 int value, | 43 int value, |
| 44 NetLog::LogLevel /* log_level */) { | 44 NetLog::LogLevel /* log_level */) { |
| 45 DictionaryValue* event_params = new DictionaryValue(); | 45 base::DictionaryValue* event_params = new base::DictionaryValue(); |
| 46 event_params->SetInteger(name, value); | 46 event_params->SetInteger(name, value); |
| 47 return event_params; | 47 return event_params; |
| 48 } | 48 } |
| 49 | 49 |
| 50 Value* NetLogInt64Callback(const char* name, | 50 base::Value* NetLogInt64Callback(const char* name, |
| 51 int64 value, | 51 int64 value, |
| 52 NetLog::LogLevel /* log_level */) { | 52 NetLog::LogLevel /* log_level */) { |
| 53 DictionaryValue* event_params = new DictionaryValue(); | 53 base::DictionaryValue* event_params = new base::DictionaryValue(); |
| 54 event_params->SetString(name, base::Int64ToString(value)); | 54 event_params->SetString(name, base::Int64ToString(value)); |
| 55 return event_params; | 55 return event_params; |
| 56 } | 56 } |
| 57 | 57 |
| 58 Value* NetLogStringCallback(const char* name, | 58 base::Value* NetLogStringCallback(const char* name, |
| 59 const std::string* value, | 59 const std::string* value, |
| 60 NetLog::LogLevel /* log_level */) { | 60 NetLog::LogLevel /* log_level */) { |
| 61 DictionaryValue* event_params = new DictionaryValue(); | 61 base::DictionaryValue* event_params = new base::DictionaryValue(); |
| 62 event_params->SetString(name, *value); | 62 event_params->SetString(name, *value); |
| 63 return event_params; | 63 return event_params; |
| 64 } | 64 } |
| 65 | 65 |
| 66 Value* NetLogString16Callback(const char* name, | 66 base::Value* NetLogString16Callback(const char* name, |
| 67 const base::string16* value, | 67 const base::string16* value, |
| 68 NetLog::LogLevel /* log_level */) { | 68 NetLog::LogLevel /* log_level */) { |
| 69 DictionaryValue* event_params = new DictionaryValue(); | 69 base::DictionaryValue* event_params = new base::DictionaryValue(); |
| 70 event_params->SetString(name, *value); | 70 event_params->SetString(name, *value); |
| 71 return event_params; | 71 return event_params; |
| 72 } | 72 } |
| 73 | 73 |
| 74 } // namespace | 74 } // namespace |
| 75 | 75 |
| 76 // LoadTimingInfo requires this be 0. | 76 // LoadTimingInfo requires this be 0. |
| 77 const uint32 NetLog::Source::kInvalidId = 0; | 77 const uint32 NetLog::Source::kInvalidId = 0; |
| 78 | 78 |
| 79 NetLog::Source::Source() : type(SOURCE_NONE), id(kInvalidId) { | 79 NetLog::Source::Source() : type(SOURCE_NONE), id(kInvalidId) { |
| 80 } | 80 } |
| 81 | 81 |
| 82 NetLog::Source::Source(SourceType type, uint32 id) : type(type), id(id) { | 82 NetLog::Source::Source(SourceType type, uint32 id) : type(type), id(id) { |
| 83 } | 83 } |
| 84 | 84 |
| 85 bool NetLog::Source::IsValid() const { | 85 bool NetLog::Source::IsValid() const { |
| 86 return id != kInvalidId; | 86 return id != kInvalidId; |
| 87 } | 87 } |
| 88 | 88 |
| 89 void NetLog::Source::AddToEventParameters(DictionaryValue* event_params) const { | 89 void NetLog::Source::AddToEventParameters( |
| 90 DictionaryValue* dict = new DictionaryValue(); | 90 base::DictionaryValue* event_params) const { |
| 91 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 91 dict->SetInteger("type", static_cast<int>(type)); | 92 dict->SetInteger("type", static_cast<int>(type)); |
| 92 dict->SetInteger("id", static_cast<int>(id)); | 93 dict->SetInteger("id", static_cast<int>(id)); |
| 93 event_params->Set("source_dependency", dict); | 94 event_params->Set("source_dependency", dict); |
| 94 } | 95 } |
| 95 | 96 |
| 96 NetLog::ParametersCallback NetLog::Source::ToEventParametersCallback() const { | 97 NetLog::ParametersCallback NetLog::Source::ToEventParametersCallback() const { |
| 97 return base::Bind(&SourceEventParametersCallback, *this); | 98 return base::Bind(&SourceEventParametersCallback, *this); |
| 98 } | 99 } |
| 99 | 100 |
| 100 // static | 101 // static |
| 101 bool NetLog::Source::FromEventParameters(Value* event_params, Source* source) { | 102 bool NetLog::Source::FromEventParameters(Value* event_params, Source* source) { |
| 102 DictionaryValue* dict; | 103 base::DictionaryValue* dict; |
| 103 DictionaryValue* source_dict; | 104 base::DictionaryValue* source_dict; |
| 104 int source_id; | 105 int source_id; |
| 105 int source_type; | 106 int source_type; |
| 106 if (!event_params || | 107 if (!event_params || |
| 107 !event_params->GetAsDictionary(&dict) || | 108 !event_params->GetAsDictionary(&dict) || |
| 108 !dict->GetDictionary("source_dependency", &source_dict) || | 109 !dict->GetDictionary("source_dependency", &source_dict) || |
| 109 !source_dict->GetInteger("id", &source_id) || | 110 !source_dict->GetInteger("id", &source_id) || |
| 110 !source_dict->GetInteger("type", &source_type)) { | 111 !source_dict->GetInteger("type", &source_type)) { |
| 111 *source = Source(); | 112 *source = Source(); |
| 112 return false; | 113 return false; |
| 113 } | 114 } |
| 114 | 115 |
| 115 DCHECK_LE(0, source_id); | 116 DCHECK_LE(0, source_id); |
| 116 DCHECK_LT(source_type, NetLog::SOURCE_COUNT); | 117 DCHECK_LT(source_type, NetLog::SOURCE_COUNT); |
| 117 *source = Source(static_cast<SourceType>(source_type), source_id); | 118 *source = Source(static_cast<SourceType>(source_type), source_id); |
| 118 return true; | 119 return true; |
| 119 } | 120 } |
| 120 | 121 |
| 121 Value* NetLog::Entry::ToValue() const { | 122 base::Value* NetLog::Entry::ToValue() const { |
| 122 DictionaryValue* entry_dict(new DictionaryValue()); | 123 base::DictionaryValue* entry_dict(new base::DictionaryValue()); |
| 123 | 124 |
| 124 entry_dict->SetString("time", TickCountToString(time_)); | 125 entry_dict->SetString("time", TickCountToString(time_)); |
| 125 | 126 |
| 126 // Set the entry source. | 127 // Set the entry source. |
| 127 DictionaryValue* source_dict = new DictionaryValue(); | 128 base::DictionaryValue* source_dict = new base::DictionaryValue(); |
| 128 source_dict->SetInteger("id", source_.id); | 129 source_dict->SetInteger("id", source_.id); |
| 129 source_dict->SetInteger("type", static_cast<int>(source_.type)); | 130 source_dict->SetInteger("type", static_cast<int>(source_.type)); |
| 130 entry_dict->Set("source", source_dict); | 131 entry_dict->Set("source", source_dict); |
| 131 | 132 |
| 132 // Set the event info. | 133 // Set the event info. |
| 133 entry_dict->SetInteger("type", static_cast<int>(type_)); | 134 entry_dict->SetInteger("type", static_cast<int>(type_)); |
| 134 entry_dict->SetInteger("phase", static_cast<int>(phase_)); | 135 entry_dict->SetInteger("phase", static_cast<int>(phase_)); |
| 135 | 136 |
| 136 // Set the event-specific parameters. | 137 // Set the event-specific parameters. |
| 137 if (parameters_callback_) { | 138 if (parameters_callback_) { |
| 138 Value* value = parameters_callback_->Run(log_level_); | 139 Value* value = parameters_callback_->Run(log_level_); |
| 139 if (value) | 140 if (value) |
| 140 entry_dict->Set("params", value); | 141 entry_dict->Set("params", value); |
| 141 } | 142 } |
| 142 | 143 |
| 143 return entry_dict; | 144 return entry_dict; |
| 144 } | 145 } |
| 145 | 146 |
| 146 Value* NetLog::Entry::ParametersToValue() const { | 147 base::Value* NetLog::Entry::ParametersToValue() const { |
| 147 if (parameters_callback_) | 148 if (parameters_callback_) |
| 148 return parameters_callback_->Run(log_level_); | 149 return parameters_callback_->Run(log_level_); |
| 149 return NULL; | 150 return NULL; |
| 150 } | 151 } |
| 151 | 152 |
| 152 NetLog::Entry::Entry( | 153 NetLog::Entry::Entry( |
| 153 EventType type, | 154 EventType type, |
| 154 Source source, | 155 Source source, |
| 155 EventPhase phase, | 156 EventPhase phase, |
| 156 base::TimeTicks time, | 157 base::TimeTicks time, |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 #include "net/base/net_log_event_type_list.h" | 293 #include "net/base/net_log_event_type_list.h" |
| 293 #undef EVENT_TYPE | 294 #undef EVENT_TYPE |
| 294 default: | 295 default: |
| 295 NOTREACHED(); | 296 NOTREACHED(); |
| 296 return NULL; | 297 return NULL; |
| 297 } | 298 } |
| 298 } | 299 } |
| 299 | 300 |
| 300 // static | 301 // static |
| 301 base::Value* NetLog::GetEventTypesAsValue() { | 302 base::Value* NetLog::GetEventTypesAsValue() { |
| 302 DictionaryValue* dict = new DictionaryValue(); | 303 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 303 for (int i = 0; i < EVENT_COUNT; ++i) { | 304 for (int i = 0; i < EVENT_COUNT; ++i) { |
| 304 dict->SetInteger(EventTypeToString(static_cast<EventType>(i)), i); | 305 dict->SetInteger(EventTypeToString(static_cast<EventType>(i)), i); |
| 305 } | 306 } |
| 306 return dict; | 307 return dict; |
| 307 } | 308 } |
| 308 | 309 |
| 309 // static | 310 // static |
| 310 const char* NetLog::SourceTypeToString(SourceType source) { | 311 const char* NetLog::SourceTypeToString(SourceType source) { |
| 311 switch (source) { | 312 switch (source) { |
| 312 #define SOURCE_TYPE(label) case SOURCE_ ## label: return #label; | 313 #define SOURCE_TYPE(label) case SOURCE_ ## label: return #label; |
| 313 #include "net/base/net_log_source_type_list.h" | 314 #include "net/base/net_log_source_type_list.h" |
| 314 #undef SOURCE_TYPE | 315 #undef SOURCE_TYPE |
| 315 default: | 316 default: |
| 316 NOTREACHED(); | 317 NOTREACHED(); |
| 317 return NULL; | 318 return NULL; |
| 318 } | 319 } |
| 319 } | 320 } |
| 320 | 321 |
| 321 // static | 322 // static |
| 322 base::Value* NetLog::GetSourceTypesAsValue() { | 323 base::Value* NetLog::GetSourceTypesAsValue() { |
| 323 DictionaryValue* dict = new DictionaryValue(); | 324 base::DictionaryValue* dict = new base::DictionaryValue(); |
| 324 for (int i = 0; i < SOURCE_COUNT; ++i) { | 325 for (int i = 0; i < SOURCE_COUNT; ++i) { |
| 325 dict->SetInteger(SourceTypeToString(static_cast<SourceType>(i)), i); | 326 dict->SetInteger(SourceTypeToString(static_cast<SourceType>(i)), i); |
| 326 } | 327 } |
| 327 return dict; | 328 return dict; |
| 328 } | 329 } |
| 329 | 330 |
| 330 // static | 331 // static |
| 331 const char* NetLog::EventPhaseToString(EventPhase phase) { | 332 const char* NetLog::EventPhaseToString(EventPhase phase) { |
| 332 switch (phase) { | 333 switch (phase) { |
| 333 case PHASE_BEGIN: | 334 case PHASE_BEGIN: |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 BoundNetLog BoundNetLog::Make(NetLog* net_log, | 483 BoundNetLog BoundNetLog::Make(NetLog* net_log, |
| 483 NetLog::SourceType source_type) { | 484 NetLog::SourceType source_type) { |
| 484 if (!net_log) | 485 if (!net_log) |
| 485 return BoundNetLog(); | 486 return BoundNetLog(); |
| 486 | 487 |
| 487 NetLog::Source source(source_type, net_log->NextID()); | 488 NetLog::Source source(source_type, net_log->NextID()); |
| 488 return BoundNetLog(source, net_log); | 489 return BoundNetLog(source, net_log); |
| 489 } | 490 } |
| 490 | 491 |
| 491 } // namespace net | 492 } // namespace net |
| OLD | NEW |