Chromium Code Reviews| 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 // An implementation of WebURLLoader in terms of ResourceLoaderBridge. | 5 // An implementation of WebURLLoader in terms of ResourceLoaderBridge. |
| 6 | 6 |
| 7 #include "webkit/glue/weburlloader_impl.h" | 7 #include "webkit/glue/weburlloader_impl.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 bool GetInfoFromDataURL(const GURL& url, | 123 bool GetInfoFromDataURL(const GURL& url, |
| 124 ResourceResponseInfo* info, | 124 ResourceResponseInfo* info, |
| 125 std::string* data, | 125 std::string* data, |
| 126 int* error_code) { | 126 int* error_code) { |
| 127 std::string mime_type; | 127 std::string mime_type; |
| 128 std::string charset; | 128 std::string charset; |
| 129 if (net::DataURL::Parse(url, &mime_type, &charset, data)) { | 129 if (net::DataURL::Parse(url, &mime_type, &charset, data)) { |
| 130 *error_code = net::OK; | 130 *error_code = net::OK; |
| 131 // Assure same time for all time fields of data: URLs. | 131 // Assure same time for all time fields of data: URLs. |
| 132 Time now = Time::Now(); | 132 Time now = Time::Now(); |
| 133 info->load_timing.base_time = now; | 133 info->load_timing.request_start = TimeTicks::Now(); |
| 134 info->load_timing.base_ticks = TimeTicks::Now(); | 134 info->load_timing.request_start_time = now; |
| 135 info->request_time = now; | 135 info->request_time = now; |
| 136 info->response_time = now; | 136 info->response_time = now; |
| 137 info->headers = NULL; | 137 info->headers = NULL; |
| 138 info->mime_type.swap(mime_type); | 138 info->mime_type.swap(mime_type); |
| 139 info->charset.swap(charset); | 139 info->charset.swap(charset); |
| 140 info->security_info.clear(); | 140 info->security_info.clear(); |
| 141 info->content_length = data->length(); | 141 info->content_length = data->length(); |
| 142 info->encoded_data_length = 0; | 142 info->encoded_data_length = 0; |
| 143 | 143 |
| 144 return true; | 144 return true; |
| 145 } | 145 } |
| 146 | 146 |
| 147 *error_code = net::ERR_INVALID_URL; | 147 *error_code = net::ERR_INVALID_URL; |
| 148 return false; | 148 return false; |
| 149 } | 149 } |
| 150 | 150 |
| 151 typedef ResourceDevToolsInfo::HeadersVector HeadersVector; | 151 typedef ResourceDevToolsInfo::HeadersVector HeadersVector; |
| 152 | 152 |
| 153 // Given a base time and a second time, returns the time from the base time to | |
| 154 // the second time, in milliseconds. If the second time is null, returns -1. | |
| 155 // The base time must not be null. | |
| 156 int TimeTicksToOffset(base::TimeTicks base_time, base::TimeTicks time) { | |
| 157 if (time.is_null()) | |
| 158 return -1; | |
|
eroman
2013/02/13 02:07:20
are downstream consumers expecting this -1?
mmenke
2013/02/13 02:26:46
-1 looks to be correct, looking at https://code.go
| |
| 159 DCHECK(!base_time.is_null()); | |
| 160 return static_cast<int>((time - base_time).InMillisecondsRoundedUp()); | |
| 161 } | |
| 162 | |
| 153 void PopulateURLResponse( | 163 void PopulateURLResponse( |
| 154 const GURL& url, | 164 const GURL& url, |
| 155 const ResourceResponseInfo& info, | 165 const ResourceResponseInfo& info, |
| 156 WebURLResponse* response) { | 166 WebURLResponse* response) { |
| 167 const net::LoadTimingInfo& load_timing = info.load_timing; | |
| 168 | |
| 157 response->setURL(url); | 169 response->setURL(url); |
| 158 response->setResponseTime(info.response_time.ToDoubleT()); | 170 response->setResponseTime(info.response_time.ToDoubleT()); |
| 159 response->setMIMEType(WebString::fromUTF8(info.mime_type)); | 171 response->setMIMEType(WebString::fromUTF8(info.mime_type)); |
| 160 response->setTextEncodingName(WebString::fromUTF8(info.charset)); | 172 response->setTextEncodingName(WebString::fromUTF8(info.charset)); |
| 161 response->setExpectedContentLength(info.content_length); | 173 response->setExpectedContentLength(info.content_length); |
| 162 response->setSecurityInfo(info.security_info); | 174 response->setSecurityInfo(info.security_info); |
| 163 response->setAppCacheID(info.appcache_id); | 175 response->setAppCacheID(info.appcache_id); |
| 164 response->setAppCacheManifestURL(info.appcache_manifest_url); | 176 response->setAppCacheManifestURL(info.appcache_manifest_url); |
| 165 response->setWasCached(!info.load_timing.base_time.is_null() && | 177 response->setWasCached(!info.load_timing.request_start_time.is_null() && |
| 166 info.response_time < info.load_timing.base_time); | 178 info.response_time < info.load_timing.request_start_time); |
| 167 response->setWasFetchedViaSPDY(info.was_fetched_via_spdy); | 179 response->setWasFetchedViaSPDY(info.was_fetched_via_spdy); |
| 168 response->setWasNpnNegotiated(info.was_npn_negotiated); | 180 response->setWasNpnNegotiated(info.was_npn_negotiated); |
| 169 response->setWasAlternateProtocolAvailable( | 181 response->setWasAlternateProtocolAvailable( |
| 170 info.was_alternate_protocol_available); | 182 info.was_alternate_protocol_available); |
| 171 response->setWasFetchedViaProxy(info.was_fetched_via_proxy); | 183 response->setWasFetchedViaProxy(info.was_fetched_via_proxy); |
| 172 response->setRemoteIPAddress( | 184 response->setRemoteIPAddress( |
| 173 WebString::fromUTF8(info.socket_address.host())); | 185 WebString::fromUTF8(info.socket_address.host())); |
| 174 response->setRemotePort(info.socket_address.port()); | 186 response->setRemotePort(info.socket_address.port()); |
| 175 response->setConnectionID(info.connection_id); | 187 response->setConnectionID(load_timing.socket_log_id); |
| 176 response->setConnectionReused(info.connection_reused); | 188 response->setConnectionReused(load_timing.socket_reused); |
| 177 response->setDownloadFilePath( | 189 response->setDownloadFilePath( |
| 178 webkit_base::FilePathToWebString(info.download_file_path)); | 190 webkit_base::FilePathToWebString(info.download_file_path)); |
| 179 response->setExtraData(new WebURLResponseExtraDataImpl( | 191 response->setExtraData(new WebURLResponseExtraDataImpl( |
| 180 info.npn_negotiated_protocol)); | 192 info.npn_negotiated_protocol)); |
| 181 | 193 |
| 182 const ResourceLoadTimingInfo& timing_info = info.load_timing; | 194 // If there's no received headers end time, don't set load timing. This is |
| 183 if (!timing_info.base_time.is_null()) { | 195 // the case for non-HTTP requests, requests that don't go over the wire, and |
| 196 // certain error cases. | |
| 197 if (!load_timing.receive_headers_end.is_null()) { | |
| 198 DCHECK(!load_timing.request_start.is_null()); | |
| 199 | |
| 184 WebURLLoadTiming timing; | 200 WebURLLoadTiming timing; |
| 185 timing.initialize(); | 201 timing.initialize(); |
| 186 timing.setRequestTime((timing_info.base_ticks - TimeTicks()).InSecondsF()); | 202 timing.setRequestTime( |
| 187 timing.setProxyStart(timing_info.proxy_start); | 203 (load_timing.request_start - TimeTicks()).InSecondsF()); |
| 188 timing.setProxyEnd(timing_info.proxy_end); | 204 timing.setProxyStart(TimeTicksToOffset(load_timing.request_start, |
| 189 timing.setDNSStart(timing_info.dns_start); | 205 load_timing.proxy_resolve_start)); |
| 190 timing.setDNSEnd(timing_info.dns_end); | 206 timing.setProxyEnd(TimeTicksToOffset(load_timing.request_start, |
| 191 timing.setConnectStart(timing_info.connect_start); | 207 load_timing.proxy_resolve_end)); |
| 192 timing.setConnectEnd(timing_info.connect_end); | 208 timing.setDNSStart(TimeTicksToOffset(load_timing.request_start, |
| 193 timing.setSSLStart(timing_info.ssl_start); | 209 load_timing.connect_timing.dns_start)); |
| 194 timing.setSSLEnd(timing_info.ssl_end); | 210 timing.setDNSEnd(TimeTicksToOffset(load_timing.request_start, |
| 195 timing.setSendStart(timing_info.send_start); | 211 load_timing.connect_timing.dns_end)); |
| 196 timing.setSendEnd(timing_info.send_end); | 212 timing.setConnectStart( |
| 197 timing.setReceiveHeadersEnd(timing_info.receive_headers_end); | 213 TimeTicksToOffset(load_timing.request_start, |
| 214 load_timing.connect_timing.connect_start)); | |
| 215 timing.setConnectEnd( | |
| 216 TimeTicksToOffset(load_timing.request_start, | |
| 217 load_timing.connect_timing.connect_end)); | |
| 218 timing.setSSLStart(TimeTicksToOffset(load_timing.request_start, | |
| 219 load_timing.connect_timing.ssl_start)); | |
| 220 timing.setSSLEnd(TimeTicksToOffset(load_timing.request_start, | |
| 221 load_timing.connect_timing.ssl_end)); | |
| 222 timing.setSendStart(TimeTicksToOffset(load_timing.request_start, | |
| 223 load_timing.send_start)); | |
| 224 timing.setSendEnd(TimeTicksToOffset(load_timing.request_start, | |
| 225 load_timing.send_end)); | |
| 226 timing.setReceiveHeadersEnd( | |
| 227 TimeTicksToOffset(load_timing.request_start, | |
| 228 load_timing.receive_headers_end)); | |
| 198 response->setLoadTiming(timing); | 229 response->setLoadTiming(timing); |
| 199 } | 230 } |
| 200 | 231 |
| 201 if (info.devtools_info.get()) { | 232 if (info.devtools_info.get()) { |
| 202 WebHTTPLoadInfo load_info; | 233 WebHTTPLoadInfo load_info; |
| 203 | 234 |
| 204 load_info.setHTTPStatusCode(info.devtools_info->http_status_code); | 235 load_info.setHTTPStatusCode(info.devtools_info->http_status_code); |
| 205 load_info.setHTTPStatusText(WebString::fromUTF8( | 236 load_info.setHTTPStatusText(WebString::fromUTF8( |
| 206 info.devtools_info->http_status_text)); | 237 info.devtools_info->http_status_text)); |
| 207 load_info.setEncodedDataLength(info.encoded_data_length); | 238 load_info.setEncodedDataLength(info.encoded_data_length); |
| (...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 778 | 809 |
| 779 void WebURLLoaderImpl::cancel() { | 810 void WebURLLoaderImpl::cancel() { |
| 780 context_->Cancel(); | 811 context_->Cancel(); |
| 781 } | 812 } |
| 782 | 813 |
| 783 void WebURLLoaderImpl::setDefersLoading(bool value) { | 814 void WebURLLoaderImpl::setDefersLoading(bool value) { |
| 784 context_->SetDefersLoading(value); | 815 context_->SetDefersLoading(value); |
| 785 } | 816 } |
| 786 | 817 |
| 787 } // namespace webkit_glue | 818 } // namespace webkit_glue |
| OLD | NEW |