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 <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 return true; | 121 return true; |
122 if (request1->creation_time() > request2->creation_time()) | 122 if (request1->creation_time() > request2->creation_time()) |
123 return false; | 123 return false; |
124 // If requests were created at the same time, sort by ID. Mostly matters for | 124 // If requests were created at the same time, sort by ID. Mostly matters for |
125 // testing purposes. | 125 // testing purposes. |
126 return request1->identifier() < request2->identifier(); | 126 return request1->identifier() < request2->identifier(); |
127 } | 127 } |
128 | 128 |
129 // Returns a Value representing the state of a pre-existing URLRequest when | 129 // Returns a Value representing the state of a pre-existing URLRequest when |
130 // net-internals was opened. | 130 // net-internals was opened. |
131 base::Value* GetRequestStateAsValue(const net::URLRequest* request, | 131 scoped_ptr<base::Value> GetRequestStateAsValue(const net::URLRequest* request, |
132 NetLogCaptureMode capture_mode) { | 132 NetLogCaptureMode capture_mode) { |
133 return request->GetStateAsValue().release(); | 133 return request->GetStateAsValue(); |
134 } | 134 } |
135 | 135 |
136 } // namespace | 136 } // namespace |
137 | 137 |
138 scoped_ptr<base::DictionaryValue> GetNetConstants() { | 138 scoped_ptr<base::DictionaryValue> GetNetConstants() { |
139 scoped_ptr<base::DictionaryValue> constants_dict(new base::DictionaryValue()); | 139 scoped_ptr<base::DictionaryValue> constants_dict(new base::DictionaryValue()); |
140 | 140 |
141 // Version of the file format. | 141 // Version of the file format. |
142 constants_dict->SetInteger("logFormatVersion", kLogFormatVersion); | 142 constants_dict->SetInteger("logFormatVersion", kLogFormatVersion); |
143 | 143 |
144 // Add a dictionary with information on the relationship between event type | 144 // Add a dictionary with information on the relationship between event type |
145 // enums and their symbolic names. | 145 // enums and their symbolic names. |
146 constants_dict->Set("logEventTypes", NetLog::GetEventTypesAsValue()); | 146 constants_dict->Set("logEventTypes", NetLog::GetEventTypesAsValue()); |
147 | 147 |
148 // Add a dictionary with information about the relationship between CertStatus | 148 // Add a dictionary with information about the relationship between CertStatus |
149 // flags and their symbolic names. | 149 // flags and their symbolic names. |
150 { | 150 { |
151 base::DictionaryValue* dict = new base::DictionaryValue(); | 151 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
152 | 152 |
153 for (size_t i = 0; i < arraysize(kCertStatusFlags); i++) | 153 for (size_t i = 0; i < arraysize(kCertStatusFlags); i++) |
154 dict->SetInteger(kCertStatusFlags[i].name, kCertStatusFlags[i].constant); | 154 dict->SetInteger(kCertStatusFlags[i].name, kCertStatusFlags[i].constant); |
155 | 155 |
156 constants_dict->Set("certStatusFlag", dict); | 156 constants_dict->Set("certStatusFlag", dict.Pass()); |
157 } | 157 } |
158 | 158 |
159 // Add a dictionary with information about the relationship between load flag | 159 // Add a dictionary with information about the relationship between load flag |
160 // enums and their symbolic names. | 160 // enums and their symbolic names. |
161 { | 161 { |
162 base::DictionaryValue* dict = new base::DictionaryValue(); | 162 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
163 | 163 |
164 for (size_t i = 0; i < arraysize(kLoadFlags); i++) | 164 for (size_t i = 0; i < arraysize(kLoadFlags); i++) |
165 dict->SetInteger(kLoadFlags[i].name, kLoadFlags[i].constant); | 165 dict->SetInteger(kLoadFlags[i].name, kLoadFlags[i].constant); |
166 | 166 |
167 constants_dict->Set("loadFlag", dict); | 167 constants_dict->Set("loadFlag", dict.Pass()); |
168 } | 168 } |
169 | 169 |
170 // Add a dictionary with information about the relationship between load state | 170 // Add a dictionary with information about the relationship between load state |
171 // enums and their symbolic names. | 171 // enums and their symbolic names. |
172 { | 172 { |
173 base::DictionaryValue* dict = new base::DictionaryValue(); | 173 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
174 | 174 |
175 for (size_t i = 0; i < arraysize(kLoadStateTable); i++) | 175 for (size_t i = 0; i < arraysize(kLoadStateTable); i++) |
176 dict->SetInteger(kLoadStateTable[i].name, kLoadStateTable[i].constant); | 176 dict->SetInteger(kLoadStateTable[i].name, kLoadStateTable[i].constant); |
177 | 177 |
178 constants_dict->Set("loadState", dict); | 178 constants_dict->Set("loadState", dict.Pass()); |
179 } | 179 } |
180 | 180 |
181 { | 181 { |
182 base::DictionaryValue* dict = new base::DictionaryValue(); | 182 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
183 #define NET_INFO_SOURCE(label, string, value) \ | 183 #define NET_INFO_SOURCE(label, string, value) \ |
184 dict->SetInteger(string, NET_INFO_##label); | 184 dict->SetInteger(string, NET_INFO_##label); |
185 #include "net/base/net_info_source_list.h" | 185 #include "net/base/net_info_source_list.h" |
186 #undef NET_INFO_SOURCE | 186 #undef NET_INFO_SOURCE |
187 constants_dict->Set("netInfoSources", dict); | 187 constants_dict->Set("netInfoSources", dict.Pass()); |
188 } | 188 } |
189 | 189 |
190 // Add information on the relationship between net error codes and their | 190 // Add information on the relationship between net error codes and their |
191 // symbolic names. | 191 // symbolic names. |
192 { | 192 { |
193 base::DictionaryValue* dict = new base::DictionaryValue(); | 193 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
194 | 194 |
195 for (size_t i = 0; i < arraysize(kNetErrors); i++) | 195 for (size_t i = 0; i < arraysize(kNetErrors); i++) |
196 dict->SetInteger(ErrorToShortString(kNetErrors[i]), kNetErrors[i]); | 196 dict->SetInteger(ErrorToShortString(kNetErrors[i]), kNetErrors[i]); |
197 | 197 |
198 constants_dict->Set("netError", dict); | 198 constants_dict->Set("netError", dict.Pass()); |
199 } | 199 } |
200 | 200 |
201 // Add information on the relationship between QUIC error codes and their | 201 // Add information on the relationship between QUIC error codes and their |
202 // symbolic names. | 202 // symbolic names. |
203 { | 203 { |
204 base::DictionaryValue* dict = new base::DictionaryValue(); | 204 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
205 | 205 |
206 for (QuicErrorCode error = QUIC_NO_ERROR; error < QUIC_LAST_ERROR; | 206 for (QuicErrorCode error = QUIC_NO_ERROR; error < QUIC_LAST_ERROR; |
207 error = static_cast<QuicErrorCode>(error + 1)) { | 207 error = static_cast<QuicErrorCode>(error + 1)) { |
208 dict->SetInteger(QuicUtils::ErrorToString(error), | 208 dict->SetInteger(QuicUtils::ErrorToString(error), |
209 static_cast<int>(error)); | 209 static_cast<int>(error)); |
210 } | 210 } |
211 | 211 |
212 constants_dict->Set("quicError", dict); | 212 constants_dict->Set("quicError", dict.Pass()); |
213 } | 213 } |
214 | 214 |
215 // Add information on the relationship between QUIC RST_STREAM error codes | 215 // Add information on the relationship between QUIC RST_STREAM error codes |
216 // and their symbolic names. | 216 // and their symbolic names. |
217 { | 217 { |
218 base::DictionaryValue* dict = new base::DictionaryValue(); | 218 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
219 | 219 |
220 for (QuicRstStreamErrorCode error = QUIC_STREAM_NO_ERROR; | 220 for (QuicRstStreamErrorCode error = QUIC_STREAM_NO_ERROR; |
221 error < QUIC_STREAM_LAST_ERROR; | 221 error < QUIC_STREAM_LAST_ERROR; |
222 error = static_cast<QuicRstStreamErrorCode>(error + 1)) { | 222 error = static_cast<QuicRstStreamErrorCode>(error + 1)) { |
223 dict->SetInteger(QuicUtils::StreamErrorToString(error), | 223 dict->SetInteger(QuicUtils::StreamErrorToString(error), |
224 static_cast<int>(error)); | 224 static_cast<int>(error)); |
225 } | 225 } |
226 | 226 |
227 constants_dict->Set("quicRstStreamError", dict); | 227 constants_dict->Set("quicRstStreamError", dict.Pass()); |
228 } | 228 } |
229 | 229 |
230 // Add information on the relationship between SDCH problem codes and their | 230 // Add information on the relationship between SDCH problem codes and their |
231 // symbolic names. | 231 // symbolic names. |
232 { | 232 { |
233 base::DictionaryValue* dict = new base::DictionaryValue(); | 233 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
234 | 234 |
235 for (size_t i = 0; i < arraysize(kSdchProblems); i++) | 235 for (size_t i = 0; i < arraysize(kSdchProblems); i++) |
236 dict->SetInteger(kSdchProblems[i].name, kSdchProblems[i].constant); | 236 dict->SetInteger(kSdchProblems[i].name, kSdchProblems[i].constant); |
237 | 237 |
238 constants_dict->Set("sdchProblemCode", dict); | 238 constants_dict->Set("sdchProblemCode", dict.Pass()); |
239 } | 239 } |
240 | 240 |
241 // Information about the relationship between event phase enums and their | 241 // Information about the relationship between event phase enums and their |
242 // symbolic names. | 242 // symbolic names. |
243 { | 243 { |
244 base::DictionaryValue* dict = new base::DictionaryValue(); | 244 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
245 | 245 |
246 dict->SetInteger("PHASE_BEGIN", NetLog::PHASE_BEGIN); | 246 dict->SetInteger("PHASE_BEGIN", NetLog::PHASE_BEGIN); |
247 dict->SetInteger("PHASE_END", NetLog::PHASE_END); | 247 dict->SetInteger("PHASE_END", NetLog::PHASE_END); |
248 dict->SetInteger("PHASE_NONE", NetLog::PHASE_NONE); | 248 dict->SetInteger("PHASE_NONE", NetLog::PHASE_NONE); |
249 | 249 |
250 constants_dict->Set("logEventPhase", dict); | 250 constants_dict->Set("logEventPhase", dict.Pass()); |
251 } | 251 } |
252 | 252 |
253 // Information about the relationship between source type enums and | 253 // Information about the relationship between source type enums and |
254 // their symbolic names. | 254 // their symbolic names. |
255 constants_dict->Set("logSourceType", NetLog::GetSourceTypesAsValue()); | 255 constants_dict->Set("logSourceType", NetLog::GetSourceTypesAsValue()); |
256 | 256 |
257 // TODO(eroman): This is here for compatibility in loading new log files with | 257 // 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 | 258 // older builds of Chrome. Safe to remove this once M45 is on the stable |
259 // channel. | 259 // channel. |
260 constants_dict->Set("logLevelType", new base::DictionaryValue()); | 260 constants_dict->Set("logLevelType", new base::DictionaryValue()); |
261 | 261 |
262 // Information about the relationship between address family enums and | 262 // Information about the relationship between address family enums and |
263 // their symbolic names. | 263 // their symbolic names. |
264 { | 264 { |
265 base::DictionaryValue* dict = new base::DictionaryValue(); | 265 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
266 | 266 |
267 dict->SetInteger("ADDRESS_FAMILY_UNSPECIFIED", ADDRESS_FAMILY_UNSPECIFIED); | 267 dict->SetInteger("ADDRESS_FAMILY_UNSPECIFIED", ADDRESS_FAMILY_UNSPECIFIED); |
268 dict->SetInteger("ADDRESS_FAMILY_IPV4", ADDRESS_FAMILY_IPV4); | 268 dict->SetInteger("ADDRESS_FAMILY_IPV4", ADDRESS_FAMILY_IPV4); |
269 dict->SetInteger("ADDRESS_FAMILY_IPV6", ADDRESS_FAMILY_IPV6); | 269 dict->SetInteger("ADDRESS_FAMILY_IPV6", ADDRESS_FAMILY_IPV6); |
270 | 270 |
271 constants_dict->Set("addressFamily", dict); | 271 constants_dict->Set("addressFamily", dict.Pass()); |
272 } | 272 } |
273 | 273 |
274 // Information about how the "time ticks" values we have given it relate to | 274 // 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 | 275 // actual system times. Time ticks are used throughout since they are stable |
276 // across system clock changes. | 276 // across system clock changes. |
277 { | 277 { |
278 int64 tick_to_unix_time_ms = | 278 int64 tick_to_unix_time_ms = |
279 (base::TimeTicks() - base::TimeTicks::UnixEpoch()).InMilliseconds(); | 279 (base::TimeTicks() - base::TimeTicks::UnixEpoch()).InMilliseconds(); |
280 | 280 |
281 // Pass it as a string, since it may be too large to fit in an integer. | 281 // Pass it as a string, since it may be too large to fit in an integer. |
(...skipping 27 matching lines...) Expand all Loading... |
309 // May only be called on the context's thread. | 309 // May only be called on the context's thread. |
310 DCHECK(context->CalledOnValidThread()); | 310 DCHECK(context->CalledOnValidThread()); |
311 | 311 |
312 scoped_ptr<base::DictionaryValue> net_info_dict(new base::DictionaryValue()); | 312 scoped_ptr<base::DictionaryValue> net_info_dict(new base::DictionaryValue()); |
313 | 313 |
314 // TODO(mmenke): The code for most of these sources should probably be moved | 314 // TODO(mmenke): The code for most of these sources should probably be moved |
315 // into the sources themselves. | 315 // into the sources themselves. |
316 if (info_sources & NET_INFO_PROXY_SETTINGS) { | 316 if (info_sources & NET_INFO_PROXY_SETTINGS) { |
317 ProxyService* proxy_service = context->proxy_service(); | 317 ProxyService* proxy_service = context->proxy_service(); |
318 | 318 |
319 base::DictionaryValue* dict = new base::DictionaryValue(); | 319 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
320 if (proxy_service->fetched_config().is_valid()) | 320 if (proxy_service->fetched_config().is_valid()) |
321 dict->Set("original", proxy_service->fetched_config().ToValue()); | 321 dict->Set("original", proxy_service->fetched_config().ToValue()); |
322 if (proxy_service->config().is_valid()) | 322 if (proxy_service->config().is_valid()) |
323 dict->Set("effective", proxy_service->config().ToValue()); | 323 dict->Set("effective", proxy_service->config().ToValue()); |
324 | 324 |
325 net_info_dict->Set(NetInfoSourceToString(NET_INFO_PROXY_SETTINGS), dict); | 325 net_info_dict->Set(NetInfoSourceToString(NET_INFO_PROXY_SETTINGS), |
| 326 dict.Pass()); |
326 } | 327 } |
327 | 328 |
328 if (info_sources & NET_INFO_BAD_PROXIES) { | 329 if (info_sources & NET_INFO_BAD_PROXIES) { |
329 const ProxyRetryInfoMap& bad_proxies_map = | 330 const ProxyRetryInfoMap& bad_proxies_map = |
330 context->proxy_service()->proxy_retry_info(); | 331 context->proxy_service()->proxy_retry_info(); |
331 | 332 |
332 base::ListValue* list = new base::ListValue(); | 333 base::ListValue* list = new base::ListValue(); |
333 | 334 |
334 for (ProxyRetryInfoMap::const_iterator it = bad_proxies_map.begin(); | 335 for (ProxyRetryInfoMap::const_iterator it = bad_proxies_map.begin(); |
335 it != bad_proxies_map.end(); ++it) { | 336 it != bad_proxies_map.end(); ++it) { |
336 const std::string& proxy_uri = it->first; | 337 const std::string& proxy_uri = it->first; |
337 const ProxyRetryInfo& retry_info = it->second; | 338 const ProxyRetryInfo& retry_info = it->second; |
338 | 339 |
339 base::DictionaryValue* dict = new base::DictionaryValue(); | 340 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
340 dict->SetString("proxy_uri", proxy_uri); | 341 dict->SetString("proxy_uri", proxy_uri); |
341 dict->SetString("bad_until", | 342 dict->SetString("bad_until", |
342 NetLog::TickCountToString(retry_info.bad_until)); | 343 NetLog::TickCountToString(retry_info.bad_until)); |
343 | 344 |
344 list->Append(dict); | 345 list->Append(dict.Pass()); |
345 } | 346 } |
346 | 347 |
347 net_info_dict->Set(NetInfoSourceToString(NET_INFO_BAD_PROXIES), list); | 348 net_info_dict->Set(NetInfoSourceToString(NET_INFO_BAD_PROXIES), list); |
348 } | 349 } |
349 | 350 |
350 if (info_sources & NET_INFO_HOST_RESOLVER) { | 351 if (info_sources & NET_INFO_HOST_RESOLVER) { |
351 HostResolver* host_resolver = context->host_resolver(); | 352 HostResolver* host_resolver = context->host_resolver(); |
352 DCHECK(host_resolver); | 353 DCHECK(host_resolver); |
353 HostCache* cache = host_resolver->GetHostCache(); | 354 HostCache* cache = host_resolver->GetHostCache(); |
354 if (cache) { | 355 if (cache) { |
355 base::DictionaryValue* dict = new base::DictionaryValue(); | 356 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
356 base::Value* dns_config = host_resolver->GetDnsConfigAsValue(); | 357 base::Value* dns_config = host_resolver->GetDnsConfigAsValue(); |
357 if (dns_config) | 358 if (dns_config) |
358 dict->Set("dns_config", dns_config); | 359 dict->Set("dns_config", dns_config); |
359 | 360 |
360 dict->SetInteger( | 361 dict->SetInteger( |
361 "default_address_family", | 362 "default_address_family", |
362 static_cast<int>(host_resolver->GetDefaultAddressFamily())); | 363 static_cast<int>(host_resolver->GetDefaultAddressFamily())); |
363 | 364 |
364 base::DictionaryValue* cache_info_dict = new base::DictionaryValue(); | 365 base::DictionaryValue* cache_info_dict = new base::DictionaryValue(); |
365 | 366 |
(...skipping 24 matching lines...) Expand all Loading... |
390 address_list->AppendString(entry.addrlist[i].ToStringWithoutPort()); | 391 address_list->AppendString(entry.addrlist[i].ToStringWithoutPort()); |
391 } | 392 } |
392 entry_dict->Set("addresses", address_list); | 393 entry_dict->Set("addresses", address_list); |
393 } | 394 } |
394 | 395 |
395 entry_list->Append(entry_dict); | 396 entry_list->Append(entry_dict); |
396 } | 397 } |
397 | 398 |
398 cache_info_dict->Set("entries", entry_list); | 399 cache_info_dict->Set("entries", entry_list); |
399 dict->Set("cache", cache_info_dict); | 400 dict->Set("cache", cache_info_dict); |
400 net_info_dict->Set(NetInfoSourceToString(NET_INFO_HOST_RESOLVER), dict); | 401 net_info_dict->Set(NetInfoSourceToString(NET_INFO_HOST_RESOLVER), |
| 402 dict.Pass()); |
401 } | 403 } |
402 } | 404 } |
403 | 405 |
404 HttpNetworkSession* http_network_session = | 406 HttpNetworkSession* http_network_session = |
405 context->http_transaction_factory()->GetSession(); | 407 context->http_transaction_factory()->GetSession(); |
406 | 408 |
407 if (info_sources & NET_INFO_SOCKET_POOL) { | 409 if (info_sources & NET_INFO_SOCKET_POOL) { |
408 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SOCKET_POOL), | 410 net_info_dict->Set(NetInfoSourceToString(NET_INFO_SOCKET_POOL), |
409 http_network_session->SocketPoolInfoToValue()); | 411 http_network_session->SocketPoolInfoToValue()); |
410 } | 412 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 // fine, since GetRequestStateAsValue() ignores the capture mode. | 515 // fine, since GetRequestStateAsValue() ignores the capture mode. |
514 NetLog::EntryData entry_data( | 516 NetLog::EntryData entry_data( |
515 NetLog::TYPE_REQUEST_ALIVE, request->net_log().source(), | 517 NetLog::TYPE_REQUEST_ALIVE, request->net_log().source(), |
516 NetLog::PHASE_BEGIN, request->creation_time(), &callback); | 518 NetLog::PHASE_BEGIN, request->creation_time(), &callback); |
517 NetLog::Entry entry(&entry_data, NetLogCaptureMode::Default()); | 519 NetLog::Entry entry(&entry_data, NetLogCaptureMode::Default()); |
518 observer->OnAddEntry(entry); | 520 observer->OnAddEntry(entry); |
519 } | 521 } |
520 } | 522 } |
521 | 523 |
522 } // namespace net | 524 } // namespace net |
OLD | NEW |