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

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: Response to comments 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
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->setWasFetchedViaSPDY(info.was_fetched_via_spdy); 214 response->setWasFetchedViaSPDY(info.was_fetched_via_spdy);
168 response->setWasNpnNegotiated(info.was_npn_negotiated); 215 response->setWasNpnNegotiated(info.was_npn_negotiated);
169 response->setWasAlternateProtocolAvailable( 216 response->setWasAlternateProtocolAvailable(
170 info.was_alternate_protocol_available); 217 info.was_alternate_protocol_available);
171 response->setWasFetchedViaProxy(info.was_fetched_via_proxy); 218 response->setWasFetchedViaProxy(info.was_fetched_via_proxy);
172 response->setRemoteIPAddress( 219 response->setRemoteIPAddress(
173 WebString::fromUTF8(info.socket_address.host())); 220 WebString::fromUTF8(info.socket_address.host()));
174 response->setRemotePort(info.socket_address.port()); 221 response->setRemotePort(info.socket_address.port());
175 response->setConnectionID(info.connection_id); 222 response->setConnectionID(info.load_timing.socket_log_id);
176 response->setConnectionReused(info.connection_reused); 223 response->setConnectionReused(info.load_timing.socket_reused);
177 response->setDownloadFilePath( 224 response->setDownloadFilePath(
178 webkit_base::FilePathToWebString(info.download_file_path)); 225 webkit_base::FilePathToWebString(info.download_file_path));
179 response->setExtraData(new WebURLResponseExtraDataImpl( 226 response->setExtraData(new WebURLResponseExtraDataImpl(
180 info.npn_negotiated_protocol)); 227 info.npn_negotiated_protocol));
181 228
182 const ResourceLoadTimingInfo& timing_info = info.load_timing; 229 // If there's no received headers end time, don't set load timing. This is
183 if (!timing_info.base_time.is_null()) { 230 // the case for non-HTTP requests, requests that don't go over the wire, and
231 // certain error cases.
232 if (!info.load_timing.receive_headers_end.is_null()) {
184 WebURLLoadTiming timing; 233 WebURLLoadTiming timing;
185 timing.initialize(); 234 PopulateURLLoadTiming(info.load_timing, &timing);
186 timing.setRequestTime((timing_info.base_ticks - TimeTicks()).InSecondsF());
187 timing.setProxyStart(timing_info.proxy_start);
188 timing.setProxyEnd(timing_info.proxy_end);
189 timing.setDNSStart(timing_info.dns_start);
190 timing.setDNSEnd(timing_info.dns_end);
191 timing.setConnectStart(timing_info.connect_start);
192 timing.setConnectEnd(timing_info.connect_end);
193 timing.setSSLStart(timing_info.ssl_start);
194 timing.setSSLEnd(timing_info.ssl_end);
195 timing.setSendStart(timing_info.send_start);
196 timing.setSendEnd(timing_info.send_end);
197 timing.setReceiveHeadersEnd(timing_info.receive_headers_end);
198 response->setLoadTiming(timing); 235 response->setLoadTiming(timing);
199 } 236 }
200 237
201 if (info.devtools_info.get()) { 238 if (info.devtools_info.get()) {
202 WebHTTPLoadInfo load_info; 239 WebHTTPLoadInfo load_info;
203 240
204 load_info.setHTTPStatusCode(info.devtools_info->http_status_code); 241 load_info.setHTTPStatusCode(info.devtools_info->http_status_code);
205 load_info.setHTTPStatusText(WebString::fromUTF8( 242 load_info.setHTTPStatusText(WebString::fromUTF8(
206 info.devtools_info->http_status_text)); 243 info.devtools_info->http_status_text));
207 load_info.setEncodedDataLength(info.encoded_data_length); 244 load_info.setEncodedDataLength(info.encoded_data_length);
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 853
817 void WebURLLoaderImpl::setDefersLoading(bool value) { 854 void WebURLLoaderImpl::setDefersLoading(bool value) {
818 context_->SetDefersLoading(value); 855 context_->SetDefersLoading(value);
819 } 856 }
820 857
821 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { 858 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) {
822 context_->DidChangePriority(new_priority); 859 context_->DidChangePriority(new_priority);
823 } 860 }
824 861
825 } // namespace webkit_glue 862 } // 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