| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_util.h" | 5 #include "net/log/net_log_util.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> |
| 9 #include <vector> | 10 #include <vector> |
| 10 | 11 |
| 11 #include "base/bind.h" | 12 #include "base/bind.h" |
| 12 #include "base/logging.h" | 13 #include "base/logging.h" |
| 13 #include "base/metrics/field_trial.h" | 14 #include "base/metrics/field_trial.h" |
| 14 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/strings/string_split.h" | 16 #include "base/strings/string_split.h" |
| 16 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 17 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 18 #include "base/values.h" | 19 #include "base/values.h" |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 constants_dict->Set("logEventTypes", NetLog::GetEventTypesAsValue()); | 147 constants_dict->Set("logEventTypes", NetLog::GetEventTypesAsValue()); |
| 147 | 148 |
| 148 // Add a dictionary with information about the relationship between CertStatus | 149 // Add a dictionary with information about the relationship between CertStatus |
| 149 // flags and their symbolic names. | 150 // flags and their symbolic names. |
| 150 { | 151 { |
| 151 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 152 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 152 | 153 |
| 153 for (size_t i = 0; i < arraysize(kCertStatusFlags); i++) | 154 for (size_t i = 0; i < arraysize(kCertStatusFlags); i++) |
| 154 dict->SetInteger(kCertStatusFlags[i].name, kCertStatusFlags[i].constant); | 155 dict->SetInteger(kCertStatusFlags[i].name, kCertStatusFlags[i].constant); |
| 155 | 156 |
| 156 constants_dict->Set("certStatusFlag", dict.Pass()); | 157 constants_dict->Set("certStatusFlag", std::move(dict)); |
| 157 } | 158 } |
| 158 | 159 |
| 159 // Add a dictionary with information about the relationship between load flag | 160 // Add a dictionary with information about the relationship between load flag |
| 160 // enums and their symbolic names. | 161 // enums and their symbolic names. |
| 161 { | 162 { |
| 162 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 163 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 163 | 164 |
| 164 for (size_t i = 0; i < arraysize(kLoadFlags); i++) | 165 for (size_t i = 0; i < arraysize(kLoadFlags); i++) |
| 165 dict->SetInteger(kLoadFlags[i].name, kLoadFlags[i].constant); | 166 dict->SetInteger(kLoadFlags[i].name, kLoadFlags[i].constant); |
| 166 | 167 |
| 167 constants_dict->Set("loadFlag", dict.Pass()); | 168 constants_dict->Set("loadFlag", std::move(dict)); |
| 168 } | 169 } |
| 169 | 170 |
| 170 // Add a dictionary with information about the relationship between load state | 171 // Add a dictionary with information about the relationship between load state |
| 171 // enums and their symbolic names. | 172 // enums and their symbolic names. |
| 172 { | 173 { |
| 173 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 174 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 174 | 175 |
| 175 for (size_t i = 0; i < arraysize(kLoadStateTable); i++) | 176 for (size_t i = 0; i < arraysize(kLoadStateTable); i++) |
| 176 dict->SetInteger(kLoadStateTable[i].name, kLoadStateTable[i].constant); | 177 dict->SetInteger(kLoadStateTable[i].name, kLoadStateTable[i].constant); |
| 177 | 178 |
| 178 constants_dict->Set("loadState", dict.Pass()); | 179 constants_dict->Set("loadState", std::move(dict)); |
| 179 } | 180 } |
| 180 | 181 |
| 181 { | 182 { |
| 182 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 183 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 183 #define NET_INFO_SOURCE(label, string, value) \ | 184 #define NET_INFO_SOURCE(label, string, value) \ |
| 184 dict->SetInteger(string, NET_INFO_##label); | 185 dict->SetInteger(string, NET_INFO_##label); |
| 185 #include "net/base/net_info_source_list.h" | 186 #include "net/base/net_info_source_list.h" |
| 186 #undef NET_INFO_SOURCE | 187 #undef NET_INFO_SOURCE |
| 187 constants_dict->Set("netInfoSources", dict.Pass()); | 188 constants_dict->Set("netInfoSources", std::move(dict)); |
| 188 } | 189 } |
| 189 | 190 |
| 190 // Add information on the relationship between net error codes and their | 191 // Add information on the relationship between net error codes and their |
| 191 // symbolic names. | 192 // symbolic names. |
| 192 { | 193 { |
| 193 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 194 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 194 | 195 |
| 195 for (size_t i = 0; i < arraysize(kNetErrors); i++) | 196 for (size_t i = 0; i < arraysize(kNetErrors); i++) |
| 196 dict->SetInteger(ErrorToShortString(kNetErrors[i]), kNetErrors[i]); | 197 dict->SetInteger(ErrorToShortString(kNetErrors[i]), kNetErrors[i]); |
| 197 | 198 |
| 198 constants_dict->Set("netError", dict.Pass()); | 199 constants_dict->Set("netError", std::move(dict)); |
| 199 } | 200 } |
| 200 | 201 |
| 201 // Add information on the relationship between QUIC error codes and their | 202 // Add information on the relationship between QUIC error codes and their |
| 202 // symbolic names. | 203 // symbolic names. |
| 203 { | 204 { |
| 204 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 205 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 205 | 206 |
| 206 for (QuicErrorCode error = QUIC_NO_ERROR; error < QUIC_LAST_ERROR; | 207 for (QuicErrorCode error = QUIC_NO_ERROR; error < QUIC_LAST_ERROR; |
| 207 error = static_cast<QuicErrorCode>(error + 1)) { | 208 error = static_cast<QuicErrorCode>(error + 1)) { |
| 208 dict->SetInteger(QuicUtils::ErrorToString(error), | 209 dict->SetInteger(QuicUtils::ErrorToString(error), |
| 209 static_cast<int>(error)); | 210 static_cast<int>(error)); |
| 210 } | 211 } |
| 211 | 212 |
| 212 constants_dict->Set("quicError", dict.Pass()); | 213 constants_dict->Set("quicError", std::move(dict)); |
| 213 } | 214 } |
| 214 | 215 |
| 215 // Add information on the relationship between QUIC RST_STREAM error codes | 216 // Add information on the relationship between QUIC RST_STREAM error codes |
| 216 // and their symbolic names. | 217 // and their symbolic names. |
| 217 { | 218 { |
| 218 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 219 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 219 | 220 |
| 220 for (QuicRstStreamErrorCode error = QUIC_STREAM_NO_ERROR; | 221 for (QuicRstStreamErrorCode error = QUIC_STREAM_NO_ERROR; |
| 221 error < QUIC_STREAM_LAST_ERROR; | 222 error < QUIC_STREAM_LAST_ERROR; |
| 222 error = static_cast<QuicRstStreamErrorCode>(error + 1)) { | 223 error = static_cast<QuicRstStreamErrorCode>(error + 1)) { |
| 223 dict->SetInteger(QuicUtils::StreamErrorToString(error), | 224 dict->SetInteger(QuicUtils::StreamErrorToString(error), |
| 224 static_cast<int>(error)); | 225 static_cast<int>(error)); |
| 225 } | 226 } |
| 226 | 227 |
| 227 constants_dict->Set("quicRstStreamError", dict.Pass()); | 228 constants_dict->Set("quicRstStreamError", std::move(dict)); |
| 228 } | 229 } |
| 229 | 230 |
| 230 // Add information on the relationship between SDCH problem codes and their | 231 // Add information on the relationship between SDCH problem codes and their |
| 231 // symbolic names. | 232 // symbolic names. |
| 232 { | 233 { |
| 233 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 234 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 234 | 235 |
| 235 for (size_t i = 0; i < arraysize(kSdchProblems); i++) | 236 for (size_t i = 0; i < arraysize(kSdchProblems); i++) |
| 236 dict->SetInteger(kSdchProblems[i].name, kSdchProblems[i].constant); | 237 dict->SetInteger(kSdchProblems[i].name, kSdchProblems[i].constant); |
| 237 | 238 |
| 238 constants_dict->Set("sdchProblemCode", dict.Pass()); | 239 constants_dict->Set("sdchProblemCode", std::move(dict)); |
| 239 } | 240 } |
| 240 | 241 |
| 241 // Information about the relationship between event phase enums and their | 242 // Information about the relationship between event phase enums and their |
| 242 // symbolic names. | 243 // symbolic names. |
| 243 { | 244 { |
| 244 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 245 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 245 | 246 |
| 246 dict->SetInteger("PHASE_BEGIN", NetLog::PHASE_BEGIN); | 247 dict->SetInteger("PHASE_BEGIN", NetLog::PHASE_BEGIN); |
| 247 dict->SetInteger("PHASE_END", NetLog::PHASE_END); | 248 dict->SetInteger("PHASE_END", NetLog::PHASE_END); |
| 248 dict->SetInteger("PHASE_NONE", NetLog::PHASE_NONE); | 249 dict->SetInteger("PHASE_NONE", NetLog::PHASE_NONE); |
| 249 | 250 |
| 250 constants_dict->Set("logEventPhase", dict.Pass()); | 251 constants_dict->Set("logEventPhase", std::move(dict)); |
| 251 } | 252 } |
| 252 | 253 |
| 253 // Information about the relationship between source type enums and | 254 // Information about the relationship between source type enums and |
| 254 // their symbolic names. | 255 // their symbolic names. |
| 255 constants_dict->Set("logSourceType", NetLog::GetSourceTypesAsValue()); | 256 constants_dict->Set("logSourceType", NetLog::GetSourceTypesAsValue()); |
| 256 | 257 |
| 257 // TODO(eroman): This is here for compatibility in loading new log files with | 258 // TODO(eroman): This is here for compatibility in loading new log files with |
| 258 // older builds of Chrome. Safe to remove this once M45 is on the stable | 259 // older builds of Chrome. Safe to remove this once M45 is on the stable |
| 259 // channel. | 260 // channel. |
| 260 constants_dict->Set("logLevelType", new base::DictionaryValue()); | 261 constants_dict->Set("logLevelType", new base::DictionaryValue()); |
| 261 | 262 |
| 262 // Information about the relationship between address family enums and | 263 // Information about the relationship between address family enums and |
| 263 // their symbolic names. | 264 // their symbolic names. |
| 264 { | 265 { |
| 265 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 266 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 266 | 267 |
| 267 dict->SetInteger("ADDRESS_FAMILY_UNSPECIFIED", ADDRESS_FAMILY_UNSPECIFIED); | 268 dict->SetInteger("ADDRESS_FAMILY_UNSPECIFIED", ADDRESS_FAMILY_UNSPECIFIED); |
| 268 dict->SetInteger("ADDRESS_FAMILY_IPV4", ADDRESS_FAMILY_IPV4); | 269 dict->SetInteger("ADDRESS_FAMILY_IPV4", ADDRESS_FAMILY_IPV4); |
| 269 dict->SetInteger("ADDRESS_FAMILY_IPV6", ADDRESS_FAMILY_IPV6); | 270 dict->SetInteger("ADDRESS_FAMILY_IPV6", ADDRESS_FAMILY_IPV6); |
| 270 | 271 |
| 271 constants_dict->Set("addressFamily", dict.Pass()); | 272 constants_dict->Set("addressFamily", std::move(dict)); |
| 272 } | 273 } |
| 273 | 274 |
| 274 // Information about how the "time ticks" values we have given it relate to | 275 // Information about how the "time ticks" values we have given it relate to |
| 275 // actual system times. Time ticks are used throughout since they are stable | 276 // actual system times. Time ticks are used throughout since they are stable |
| 276 // across system clock changes. | 277 // across system clock changes. |
| 277 { | 278 { |
| 278 int64_t tick_to_unix_time_ms = | 279 int64_t tick_to_unix_time_ms = |
| 279 (base::TimeTicks() - base::TimeTicks::UnixEpoch()).InMilliseconds(); | 280 (base::TimeTicks() - base::TimeTicks::UnixEpoch()).InMilliseconds(); |
| 280 | 281 |
| 281 // Pass it as a string, since it may be too large to fit in an integer. | 282 // Pass it as a string, since it may be too large to fit in an integer. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 293 base::FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | 294 base::FieldTrialList::GetActiveFieldTrialGroups(&active_groups); |
| 294 base::ListValue* field_trial_groups = new base::ListValue(); | 295 base::ListValue* field_trial_groups = new base::ListValue(); |
| 295 for (base::FieldTrial::ActiveGroups::const_iterator it = | 296 for (base::FieldTrial::ActiveGroups::const_iterator it = |
| 296 active_groups.begin(); | 297 active_groups.begin(); |
| 297 it != active_groups.end(); ++it) { | 298 it != active_groups.end(); ++it) { |
| 298 field_trial_groups->AppendString(it->trial_name + ":" + it->group_name); | 299 field_trial_groups->AppendString(it->trial_name + ":" + it->group_name); |
| 299 } | 300 } |
| 300 constants_dict->Set("activeFieldTrialGroups", field_trial_groups); | 301 constants_dict->Set("activeFieldTrialGroups", field_trial_groups); |
| 301 } | 302 } |
| 302 | 303 |
| 303 return constants_dict.Pass(); | 304 return constants_dict; |
| 304 } | 305 } |
| 305 | 306 |
| 306 NET_EXPORT scoped_ptr<base::DictionaryValue> GetNetInfo( | 307 NET_EXPORT scoped_ptr<base::DictionaryValue> GetNetInfo( |
| 307 URLRequestContext* context, | 308 URLRequestContext* context, |
| 308 int info_sources) { | 309 int info_sources) { |
| 309 // May only be called on the context's thread. | 310 // May only be called on the context's thread. |
| 310 DCHECK(context->CalledOnValidThread()); | 311 DCHECK(context->CalledOnValidThread()); |
| 311 | 312 |
| 312 scoped_ptr<base::DictionaryValue> net_info_dict(new base::DictionaryValue()); | 313 scoped_ptr<base::DictionaryValue> net_info_dict(new base::DictionaryValue()); |
| 313 | 314 |
| 314 // TODO(mmenke): The code for most of these sources should probably be moved | 315 // TODO(mmenke): The code for most of these sources should probably be moved |
| 315 // into the sources themselves. | 316 // into the sources themselves. |
| 316 if (info_sources & NET_INFO_PROXY_SETTINGS) { | 317 if (info_sources & NET_INFO_PROXY_SETTINGS) { |
| 317 ProxyService* proxy_service = context->proxy_service(); | 318 ProxyService* proxy_service = context->proxy_service(); |
| 318 | 319 |
| 319 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 320 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 320 if (proxy_service->fetched_config().is_valid()) | 321 if (proxy_service->fetched_config().is_valid()) |
| 321 dict->Set("original", proxy_service->fetched_config().ToValue()); | 322 dict->Set("original", proxy_service->fetched_config().ToValue()); |
| 322 if (proxy_service->config().is_valid()) | 323 if (proxy_service->config().is_valid()) |
| 323 dict->Set("effective", proxy_service->config().ToValue()); | 324 dict->Set("effective", proxy_service->config().ToValue()); |
| 324 | 325 |
| 325 net_info_dict->Set(NetInfoSourceToString(NET_INFO_PROXY_SETTINGS), | 326 net_info_dict->Set(NetInfoSourceToString(NET_INFO_PROXY_SETTINGS), |
| 326 dict.Pass()); | 327 std::move(dict)); |
| 327 } | 328 } |
| 328 | 329 |
| 329 if (info_sources & NET_INFO_BAD_PROXIES) { | 330 if (info_sources & NET_INFO_BAD_PROXIES) { |
| 330 const ProxyRetryInfoMap& bad_proxies_map = | 331 const ProxyRetryInfoMap& bad_proxies_map = |
| 331 context->proxy_service()->proxy_retry_info(); | 332 context->proxy_service()->proxy_retry_info(); |
| 332 | 333 |
| 333 base::ListValue* list = new base::ListValue(); | 334 base::ListValue* list = new base::ListValue(); |
| 334 | 335 |
| 335 for (ProxyRetryInfoMap::const_iterator it = bad_proxies_map.begin(); | 336 for (ProxyRetryInfoMap::const_iterator it = bad_proxies_map.begin(); |
| 336 it != bad_proxies_map.end(); ++it) { | 337 it != bad_proxies_map.end(); ++it) { |
| 337 const std::string& proxy_uri = it->first; | 338 const std::string& proxy_uri = it->first; |
| 338 const ProxyRetryInfo& retry_info = it->second; | 339 const ProxyRetryInfo& retry_info = it->second; |
| 339 | 340 |
| 340 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); | 341 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 341 dict->SetString("proxy_uri", proxy_uri); | 342 dict->SetString("proxy_uri", proxy_uri); |
| 342 dict->SetString("bad_until", | 343 dict->SetString("bad_until", |
| 343 NetLog::TickCountToString(retry_info.bad_until)); | 344 NetLog::TickCountToString(retry_info.bad_until)); |
| 344 | 345 |
| 345 list->Append(dict.Pass()); | 346 list->Append(std::move(dict)); |
| 346 } | 347 } |
| 347 | 348 |
| 348 net_info_dict->Set(NetInfoSourceToString(NET_INFO_BAD_PROXIES), list); | 349 net_info_dict->Set(NetInfoSourceToString(NET_INFO_BAD_PROXIES), list); |
| 349 } | 350 } |
| 350 | 351 |
| 351 if (info_sources & NET_INFO_HOST_RESOLVER) { | 352 if (info_sources & NET_INFO_HOST_RESOLVER) { |
| 352 HostResolver* host_resolver = context->host_resolver(); | 353 HostResolver* host_resolver = context->host_resolver(); |
| 353 DCHECK(host_resolver); | 354 DCHECK(host_resolver); |
| 354 HostCache* cache = host_resolver->GetHostCache(); | 355 HostCache* cache = host_resolver->GetHostCache(); |
| 355 if (cache) { | 356 if (cache) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 } | 389 } |
| 389 entry_dict->Set("addresses", address_list); | 390 entry_dict->Set("addresses", address_list); |
| 390 } | 391 } |
| 391 | 392 |
| 392 entry_list->Append(entry_dict); | 393 entry_list->Append(entry_dict); |
| 393 } | 394 } |
| 394 | 395 |
| 395 cache_info_dict->Set("entries", entry_list); | 396 cache_info_dict->Set("entries", entry_list); |
| 396 dict->Set("cache", cache_info_dict); | 397 dict->Set("cache", cache_info_dict); |
| 397 net_info_dict->Set(NetInfoSourceToString(NET_INFO_HOST_RESOLVER), | 398 net_info_dict->Set(NetInfoSourceToString(NET_INFO_HOST_RESOLVER), |
| 398 dict.Pass()); | 399 std::move(dict)); |
| 399 } | 400 } |
| 400 } | 401 } |
| 401 | 402 |
| 402 HttpNetworkSession* http_network_session = | 403 HttpNetworkSession* http_network_session = |
| 403 context->http_transaction_factory()->GetSession(); | 404 context->http_transaction_factory()->GetSession(); |
| 404 | 405 |
| 405 if (info_sources & NET_INFO_SOCKET_POOL) { | 406 if (info_sources & NET_INFO_SOCKET_POOL) { |
| 406 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SOCKET_POOL), | 407 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SOCKET_POOL), |
| 407 http_network_session->SocketPoolInfoToValue()); | 408 http_network_session->SocketPoolInfoToValue()); |
| 408 } | 409 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 } | 483 } |
| 483 | 484 |
| 484 if (info_sources & NET_INFO_SDCH) { | 485 if (info_sources & NET_INFO_SDCH) { |
| 485 scoped_ptr<base::Value> info_dict; | 486 scoped_ptr<base::Value> info_dict; |
| 486 SdchManager* sdch_manager = context->sdch_manager(); | 487 SdchManager* sdch_manager = context->sdch_manager(); |
| 487 if (sdch_manager) { | 488 if (sdch_manager) { |
| 488 info_dict = sdch_manager->SdchInfoToValue(); | 489 info_dict = sdch_manager->SdchInfoToValue(); |
| 489 } else { | 490 } else { |
| 490 info_dict.reset(new base::DictionaryValue()); | 491 info_dict.reset(new base::DictionaryValue()); |
| 491 } | 492 } |
| 492 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SDCH), info_dict.Pass()); | 493 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SDCH), |
| 494 std::move(info_dict)); |
| 493 } | 495 } |
| 494 | 496 |
| 495 return net_info_dict.Pass(); | 497 return net_info_dict; |
| 496 } | 498 } |
| 497 | 499 |
| 498 NET_EXPORT void CreateNetLogEntriesForActiveObjects( | 500 NET_EXPORT void CreateNetLogEntriesForActiveObjects( |
| 499 const std::set<URLRequestContext*>& contexts, | 501 const std::set<URLRequestContext*>& contexts, |
| 500 NetLog::ThreadSafeObserver* observer) { | 502 NetLog::ThreadSafeObserver* observer) { |
| 501 // Put together the list of all requests. | 503 // Put together the list of all requests. |
| 502 std::vector<const URLRequest*> requests; | 504 std::vector<const URLRequest*> requests; |
| 503 for (const auto& context : contexts) { | 505 for (const auto& context : contexts) { |
| 504 // May only be called on the context's thread. | 506 // May only be called on the context's thread. |
| 505 DCHECK(context->CalledOnValidThread()); | 507 DCHECK(context->CalledOnValidThread()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 522 // fine, since GetRequestStateAsValue() ignores the capture mode. | 524 // fine, since GetRequestStateAsValue() ignores the capture mode. |
| 523 NetLog::EntryData entry_data( | 525 NetLog::EntryData entry_data( |
| 524 NetLog::TYPE_REQUEST_ALIVE, request->net_log().source(), | 526 NetLog::TYPE_REQUEST_ALIVE, request->net_log().source(), |
| 525 NetLog::PHASE_BEGIN, request->creation_time(), &callback); | 527 NetLog::PHASE_BEGIN, request->creation_time(), &callback); |
| 526 NetLog::Entry entry(&entry_data, NetLogCaptureMode::Default()); | 528 NetLog::Entry entry(&entry_data, NetLogCaptureMode::Default()); |
| 527 observer->OnAddEntry(entry); | 529 observer->OnAddEntry(entry); |
| 528 } | 530 } |
| 529 } | 531 } |
| 530 | 532 |
| 531 } // namespace net | 533 } // namespace net |
| OLD | NEW |