| 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/files/file_path.h" | 10 #include "base/files/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; |
| 159 DCHECK(!base_time.is_null()); |
| 160 return static_cast<int>((time - base_time).InMillisecondsRoundedUp()); |
| 161 } |
| 162 |
| 163 // Converts timing data from |load_timing| to the format used by WebKit. |
| 164 void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing, |
| 165 WebURLLoadTiming* url_timing) { |
| 166 DCHECK(!load_timing.request_start.is_null()); |
| 167 |
| 168 url_timing->initialize(); |
| 169 url_timing->setRequestTime( |
| 170 (load_timing.request_start - TimeTicks()).InSecondsF()); |
| 171 url_timing->setProxyStart(TimeTicksToOffset(load_timing.request_start, |
| 172 load_timing.proxy_resolve_start)); |
| 173 url_timing->setProxyEnd(TimeTicksToOffset(load_timing.request_start, |
| 174 load_timing.proxy_resolve_end)); |
| 175 url_timing->setDNSStart(TimeTicksToOffset( |
| 176 load_timing.request_start, |
| 177 load_timing.connect_timing.dns_start)); |
| 178 url_timing->setDNSEnd(TimeTicksToOffset(load_timing.request_start, |
| 179 load_timing.connect_timing.dns_end)); |
| 180 url_timing->setConnectStart( |
| 181 TimeTicksToOffset(load_timing.request_start, |
| 182 load_timing.connect_timing.connect_start)); |
| 183 url_timing->setConnectEnd( |
| 184 TimeTicksToOffset(load_timing.request_start, |
| 185 load_timing.connect_timing.connect_end)); |
| 186 url_timing->setSSLStart( |
| 187 TimeTicksToOffset(load_timing.request_start, |
| 188 load_timing.connect_timing.ssl_start)); |
| 189 url_timing->setSSLEnd(TimeTicksToOffset(load_timing.request_start, |
| 190 load_timing.connect_timing.ssl_end)); |
| 191 url_timing->setSendStart(TimeTicksToOffset(load_timing.request_start, |
| 192 load_timing.send_start)); |
| 193 url_timing->setSendEnd(TimeTicksToOffset(load_timing.request_start, |
| 194 load_timing.send_end)); |
| 195 url_timing->setReceiveHeadersEnd( |
| 196 TimeTicksToOffset(load_timing.request_start, |
| 197 load_timing.receive_headers_end)); |
| 198 } |
| 199 |
| 153 void PopulateURLResponse( | 200 void PopulateURLResponse( |
| 154 const GURL& url, | 201 const GURL& url, |
| 155 const ResourceResponseInfo& info, | 202 const ResourceResponseInfo& info, |
| 156 WebURLResponse* response) { | 203 WebURLResponse* response) { |
| 157 response->setURL(url); | 204 response->setURL(url); |
| 158 response->setResponseTime(info.response_time.ToDoubleT()); | 205 response->setResponseTime(info.response_time.ToDoubleT()); |
| 159 response->setMIMEType(WebString::fromUTF8(info.mime_type)); | 206 response->setMIMEType(WebString::fromUTF8(info.mime_type)); |
| 160 response->setTextEncodingName(WebString::fromUTF8(info.charset)); | 207 response->setTextEncodingName(WebString::fromUTF8(info.charset)); |
| 161 response->setExpectedContentLength(info.content_length); | 208 response->setExpectedContentLength(info.content_length); |
| 162 response->setSecurityInfo(info.security_info); | 209 response->setSecurityInfo(info.security_info); |
| 163 response->setAppCacheID(info.appcache_id); | 210 response->setAppCacheID(info.appcache_id); |
| 164 response->setAppCacheManifestURL(info.appcache_manifest_url); | 211 response->setAppCacheManifestURL(info.appcache_manifest_url); |
| 165 response->setWasCached(!info.load_timing.base_time.is_null() && | 212 response->setWasCached(!info.load_timing.request_start_time.is_null() && |
| 166 info.response_time < info.load_timing.base_time); | 213 info.response_time < info.load_timing.request_start_time); |
| 167 response->setRemoteIPAddress( | 214 response->setRemoteIPAddress( |
| 168 WebString::fromUTF8(info.socket_address.host())); | 215 WebString::fromUTF8(info.socket_address.host())); |
| 169 response->setRemotePort(info.socket_address.port()); | 216 response->setRemotePort(info.socket_address.port()); |
| 170 response->setConnectionID(info.connection_id); | 217 response->setConnectionID(info.load_timing.socket_log_id); |
| 171 response->setConnectionReused(info.connection_reused); | 218 response->setConnectionReused(info.load_timing.socket_reused); |
| 172 response->setDownloadFilePath( | 219 response->setDownloadFilePath( |
| 173 webkit_base::FilePathToWebString(info.download_file_path)); | 220 webkit_base::FilePathToWebString(info.download_file_path)); |
| 174 WebURLResponseExtraDataImpl* extra_data = | 221 WebURLResponseExtraDataImpl* extra_data = |
| 175 new WebURLResponseExtraDataImpl(info.npn_negotiated_protocol); | 222 new WebURLResponseExtraDataImpl(info.npn_negotiated_protocol); |
| 176 response->setExtraData(extra_data); | 223 response->setExtraData(extra_data); |
| 177 extra_data->set_was_fetched_via_spdy(info.was_fetched_via_spdy); | 224 extra_data->set_was_fetched_via_spdy(info.was_fetched_via_spdy); |
| 178 extra_data->set_was_npn_negotiated(info.was_npn_negotiated); | 225 extra_data->set_was_npn_negotiated(info.was_npn_negotiated); |
| 179 extra_data->set_was_alternate_protocol_available( | 226 extra_data->set_was_alternate_protocol_available( |
| 180 info.was_alternate_protocol_available); | 227 info.was_alternate_protocol_available); |
| 181 extra_data->set_was_fetched_via_proxy(info.was_fetched_via_proxy); | 228 extra_data->set_was_fetched_via_proxy(info.was_fetched_via_proxy); |
| 182 | 229 |
| 183 const ResourceLoadTimingInfo& timing_info = info.load_timing; | 230 // If there's no received headers end time, don't set load timing. This is |
| 184 if (!timing_info.base_time.is_null()) { | 231 // the case for non-HTTP requests, requests that don't go over the wire, and |
| 232 // certain error cases. |
| 233 if (!info.load_timing.receive_headers_end.is_null()) { |
| 185 WebURLLoadTiming timing; | 234 WebURLLoadTiming timing; |
| 186 timing.initialize(); | 235 PopulateURLLoadTiming(info.load_timing, &timing); |
| 187 timing.setRequestTime((timing_info.base_ticks - TimeTicks()).InSecondsF()); | |
| 188 timing.setProxyStart(timing_info.proxy_start); | |
| 189 timing.setProxyEnd(timing_info.proxy_end); | |
| 190 timing.setDNSStart(timing_info.dns_start); | |
| 191 timing.setDNSEnd(timing_info.dns_end); | |
| 192 timing.setConnectStart(timing_info.connect_start); | |
| 193 timing.setConnectEnd(timing_info.connect_end); | |
| 194 timing.setSSLStart(timing_info.ssl_start); | |
| 195 timing.setSSLEnd(timing_info.ssl_end); | |
| 196 timing.setSendStart(timing_info.send_start); | |
| 197 timing.setSendEnd(timing_info.send_end); | |
| 198 timing.setReceiveHeadersEnd(timing_info.receive_headers_end); | |
| 199 response->setLoadTiming(timing); | 236 response->setLoadTiming(timing); |
| 200 } | 237 } |
| 201 | 238 |
| 202 if (info.devtools_info.get()) { | 239 if (info.devtools_info.get()) { |
| 203 WebHTTPLoadInfo load_info; | 240 WebHTTPLoadInfo load_info; |
| 204 | 241 |
| 205 load_info.setHTTPStatusCode(info.devtools_info->http_status_code); | 242 load_info.setHTTPStatusCode(info.devtools_info->http_status_code); |
| 206 load_info.setHTTPStatusText(WebString::fromUTF8( | 243 load_info.setHTTPStatusText(WebString::fromUTF8( |
| 207 info.devtools_info->http_status_text)); | 244 info.devtools_info->http_status_text)); |
| 208 load_info.setEncodedDataLength(info.encoded_data_length); | 245 load_info.setEncodedDataLength(info.encoded_data_length); |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 | 854 |
| 818 void WebURLLoaderImpl::setDefersLoading(bool value) { | 855 void WebURLLoaderImpl::setDefersLoading(bool value) { |
| 819 context_->SetDefersLoading(value); | 856 context_->SetDefersLoading(value); |
| 820 } | 857 } |
| 821 | 858 |
| 822 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { | 859 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { |
| 823 context_->DidChangePriority(new_priority); | 860 context_->DidChangePriority(new_priority); |
| 824 } | 861 } |
| 825 | 862 |
| 826 } // namespace webkit_glue | 863 } // namespace webkit_glue |
| OLD | NEW |