Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: webkit/glue/weburlloader_impl.cc

Issue 12094085: LoadTiming in net part 7: Hooking it all up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Sync Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« content/common/resource_dispatcher.cc ('K') | « webkit/glue/resource_loader_bridge.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698