| Index: webkit/glue/weburlloader_impl.cc
|
| ===================================================================
|
| --- webkit/glue/weburlloader_impl.cc (revision 190428)
|
| +++ webkit/glue/weburlloader_impl.cc (working copy)
|
| @@ -130,8 +130,8 @@
|
| *error_code = net::OK;
|
| // Assure same time for all time fields of data: URLs.
|
| Time now = Time::Now();
|
| - info->load_timing.base_time = now;
|
| - info->load_timing.base_ticks = TimeTicks::Now();
|
| + info->load_timing.request_start = TimeTicks::Now();
|
| + info->load_timing.request_start_time = now;
|
| info->request_time = now;
|
| info->response_time = now;
|
| info->headers = NULL;
|
| @@ -150,6 +150,53 @@
|
|
|
| typedef ResourceDevToolsInfo::HeadersVector HeadersVector;
|
|
|
| +// Given a base time and a second time, returns the time from the base time to
|
| +// the second time, in milliseconds. If the second time is null, returns -1.
|
| +// The base time must not be null.
|
| +int TimeTicksToOffset(base::TimeTicks base_time, base::TimeTicks time) {
|
| + if (time.is_null())
|
| + return -1;
|
| + DCHECK(!base_time.is_null());
|
| + return static_cast<int>((time - base_time).InMillisecondsRoundedUp());
|
| +}
|
| +
|
| +// Converts timing data from |load_timing| to the format used by WebKit.
|
| +void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing,
|
| + WebURLLoadTiming* url_timing) {
|
| + DCHECK(!load_timing.request_start.is_null());
|
| +
|
| + url_timing->initialize();
|
| + url_timing->setRequestTime(
|
| + (load_timing.request_start - TimeTicks()).InSecondsF());
|
| + url_timing->setProxyStart(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.proxy_resolve_start));
|
| + url_timing->setProxyEnd(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.proxy_resolve_end));
|
| + url_timing->setDNSStart(TimeTicksToOffset(
|
| + load_timing.request_start,
|
| + load_timing.connect_timing.dns_start));
|
| + url_timing->setDNSEnd(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.connect_timing.dns_end));
|
| + url_timing->setConnectStart(
|
| + TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.connect_timing.connect_start));
|
| + url_timing->setConnectEnd(
|
| + TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.connect_timing.connect_end));
|
| + url_timing->setSSLStart(
|
| + TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.connect_timing.ssl_start));
|
| + url_timing->setSSLEnd(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.connect_timing.ssl_end));
|
| + url_timing->setSendStart(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.send_start));
|
| + url_timing->setSendEnd(TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.send_end));
|
| + url_timing->setReceiveHeadersEnd(
|
| + TimeTicksToOffset(load_timing.request_start,
|
| + load_timing.receive_headers_end));
|
| +}
|
| +
|
| void PopulateURLResponse(
|
| const GURL& url,
|
| const ResourceResponseInfo& info,
|
| @@ -162,13 +209,13 @@
|
| response->setSecurityInfo(info.security_info);
|
| response->setAppCacheID(info.appcache_id);
|
| response->setAppCacheManifestURL(info.appcache_manifest_url);
|
| - response->setWasCached(!info.load_timing.base_time.is_null() &&
|
| - info.response_time < info.load_timing.base_time);
|
| + response->setWasCached(!info.load_timing.request_start_time.is_null() &&
|
| + info.response_time < info.load_timing.request_start_time);
|
| response->setRemoteIPAddress(
|
| WebString::fromUTF8(info.socket_address.host()));
|
| response->setRemotePort(info.socket_address.port());
|
| - response->setConnectionID(info.connection_id);
|
| - response->setConnectionReused(info.connection_reused);
|
| + response->setConnectionID(info.load_timing.socket_log_id);
|
| + response->setConnectionReused(info.load_timing.socket_reused);
|
| response->setDownloadFilePath(
|
| webkit_base::FilePathToWebString(info.download_file_path));
|
| WebURLResponseExtraDataImpl* extra_data =
|
| @@ -180,22 +227,12 @@
|
| info.was_alternate_protocol_available);
|
| extra_data->set_was_fetched_via_proxy(info.was_fetched_via_proxy);
|
|
|
| - const ResourceLoadTimingInfo& timing_info = info.load_timing;
|
| - if (!timing_info.base_time.is_null()) {
|
| + // If there's no received headers end time, don't set load timing. This is
|
| + // the case for non-HTTP requests, requests that don't go over the wire, and
|
| + // certain error cases.
|
| + if (!info.load_timing.receive_headers_end.is_null()) {
|
| WebURLLoadTiming timing;
|
| - timing.initialize();
|
| - timing.setRequestTime((timing_info.base_ticks - TimeTicks()).InSecondsF());
|
| - timing.setProxyStart(timing_info.proxy_start);
|
| - timing.setProxyEnd(timing_info.proxy_end);
|
| - timing.setDNSStart(timing_info.dns_start);
|
| - timing.setDNSEnd(timing_info.dns_end);
|
| - timing.setConnectStart(timing_info.connect_start);
|
| - timing.setConnectEnd(timing_info.connect_end);
|
| - timing.setSSLStart(timing_info.ssl_start);
|
| - timing.setSSLEnd(timing_info.ssl_end);
|
| - timing.setSendStart(timing_info.send_start);
|
| - timing.setSendEnd(timing_info.send_end);
|
| - timing.setReceiveHeadersEnd(timing_info.receive_headers_end);
|
| + PopulateURLLoadTiming(info.load_timing, &timing);
|
| response->setLoadTiming(timing);
|
| }
|
|
|
|
|