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 | |
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( |
darin (slow to review)
2013/02/28 16:57:35
nit: How about breaking this out into its own help
mmenke
2013/02/28 17:36:55
Done.
| |
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 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
816 | 847 |
817 void WebURLLoaderImpl::setDefersLoading(bool value) { | 848 void WebURLLoaderImpl::setDefersLoading(bool value) { |
818 context_->SetDefersLoading(value); | 849 context_->SetDefersLoading(value); |
819 } | 850 } |
820 | 851 |
821 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { | 852 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { |
822 context_->DidChangePriority(new_priority); | 853 context_->DidChangePriority(new_priority); |
823 } | 854 } |
824 | 855 |
825 } // namespace webkit_glue | 856 } // namespace webkit_glue |
OLD | NEW |