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

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
« no previous file with comments | « webkit/glue/resource_loader_bridge.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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->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
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
OLDNEW
« no previous file with comments | « webkit/glue/resource_loader_bridge.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698