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

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

Issue 7602023: Use a monotonic clock (TimeTicks) to report network times to WebCore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 9 years, 4 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/file_path.h" 9 #include "base/file_path.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 ResourceResponseInfo* info, 113 ResourceResponseInfo* info,
114 std::string* data, 114 std::string* data,
115 net::URLRequestStatus* status) { 115 net::URLRequestStatus* status) {
116 std::string mime_type; 116 std::string mime_type;
117 std::string charset; 117 std::string charset;
118 if (net::DataURL::Parse(url, &mime_type, &charset, data)) { 118 if (net::DataURL::Parse(url, &mime_type, &charset, data)) {
119 *status = net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0); 119 *status = net::URLRequestStatus(net::URLRequestStatus::SUCCESS, 0);
120 // Assure same time for all time fields of data: URLs. 120 // Assure same time for all time fields of data: URLs.
121 Time now = Time::Now(); 121 Time now = Time::Now();
122 info->load_timing.base_time = now; 122 info->load_timing.base_time = now;
123 info->load_timing.base_ticks = base::TimeTicks::Now().ToInternalValue();
123 info->request_time = now; 124 info->request_time = now;
124 info->response_time = now; 125 info->response_time = now;
125 info->headers = NULL; 126 info->headers = NULL;
126 info->mime_type.swap(mime_type); 127 info->mime_type.swap(mime_type);
127 info->charset.swap(charset); 128 info->charset.swap(charset);
128 info->security_info.clear(); 129 info->security_info.clear();
129 info->content_length = -1; 130 info->content_length = -1;
130 info->encoded_data_length = 0; 131 info->encoded_data_length = 0;
131 132
132 return true; 133 return true;
(...skipping 29 matching lines...) Expand all
162 WebString::fromUTF8(info.socket_address.host())); 163 WebString::fromUTF8(info.socket_address.host()));
163 response->setRemotePort(info.socket_address.port()); 164 response->setRemotePort(info.socket_address.port());
164 response->setConnectionID(info.connection_id); 165 response->setConnectionID(info.connection_id);
165 response->setConnectionReused(info.connection_reused); 166 response->setConnectionReused(info.connection_reused);
166 response->setDownloadFilePath(FilePathToWebString(info.download_file_path)); 167 response->setDownloadFilePath(FilePathToWebString(info.download_file_path));
167 168
168 const ResourceLoadTimingInfo& timing_info = info.load_timing; 169 const ResourceLoadTimingInfo& timing_info = info.load_timing;
169 if (!timing_info.base_time.is_null()) { 170 if (!timing_info.base_time.is_null()) {
170 WebURLLoadTiming timing; 171 WebURLLoadTiming timing;
171 timing.initialize(); 172 timing.initialize();
172 timing.setRequestTime(timing_info.base_time.ToDoubleT()); 173 timing.setRequestTime(
174 timing_info.base_ticks /
175 static_cast<double>(base::Time::kMicrosecondsPerSecond));
173 timing.setProxyStart(timing_info.proxy_start); 176 timing.setProxyStart(timing_info.proxy_start);
174 timing.setProxyEnd(timing_info.proxy_end); 177 timing.setProxyEnd(timing_info.proxy_end);
175 timing.setDNSStart(timing_info.dns_start); 178 timing.setDNSStart(timing_info.dns_start);
176 timing.setDNSEnd(timing_info.dns_end); 179 timing.setDNSEnd(timing_info.dns_end);
177 timing.setConnectStart(timing_info.connect_start); 180 timing.setConnectStart(timing_info.connect_start);
178 timing.setConnectEnd(timing_info.connect_end); 181 timing.setConnectEnd(timing_info.connect_end);
179 timing.setSSLStart(timing_info.ssl_start); 182 timing.setSSLStart(timing_info.ssl_start);
180 timing.setSSLEnd(timing_info.ssl_end); 183 timing.setSSLEnd(timing_info.ssl_end);
181 timing.setSendStart(timing_info.send_start); 184 timing.setSendStart(timing_info.send_start);
182 timing.setSendEnd(timing_info.send_end); 185 timing.setSendEnd(timing_info.send_end);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 bool* has_new_first_party_for_cookies, 275 bool* has_new_first_party_for_cookies,
273 GURL* new_first_party_for_cookies); 276 GURL* new_first_party_for_cookies);
274 virtual void OnReceivedResponse(const ResourceResponseInfo& info); 277 virtual void OnReceivedResponse(const ResourceResponseInfo& info);
275 virtual void OnDownloadedData(int len); 278 virtual void OnDownloadedData(int len);
276 virtual void OnReceivedData(const char* data, 279 virtual void OnReceivedData(const char* data,
277 int data_length, 280 int data_length,
278 int encoded_data_length); 281 int encoded_data_length);
279 virtual void OnReceivedCachedMetadata(const char* data, int len); 282 virtual void OnReceivedCachedMetadata(const char* data, int len);
280 virtual void OnCompletedRequest(const net::URLRequestStatus& status, 283 virtual void OnCompletedRequest(const net::URLRequestStatus& status,
281 const std::string& security_info, 284 const std::string& security_info,
282 const base::Time& completion_time); 285 const base::TimeTicks& completion_time);
283 286
284 private: 287 private:
285 friend class base::RefCounted<Context>; 288 friend class base::RefCounted<Context>;
286 ~Context() {} 289 ~Context() {}
287 290
288 // We can optimize the handling of data URLs in most cases. 291 // We can optimize the handling of data URLs in most cases.
289 bool CanHandleDataURL(const GURL& url) const; 292 bool CanHandleDataURL(const GURL& url) const;
290 void HandleDataURL(); 293 void HandleDataURL();
291 294
292 WebURLLoaderImpl* loader_; 295 WebURLLoaderImpl* loader_;
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 590
588 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( 591 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata(
589 const char* data, int len) { 592 const char* data, int len) {
590 if (client_) 593 if (client_)
591 client_->didReceiveCachedMetadata(loader_, data, len); 594 client_->didReceiveCachedMetadata(loader_, data, len);
592 } 595 }
593 596
594 void WebURLLoaderImpl::Context::OnCompletedRequest( 597 void WebURLLoaderImpl::Context::OnCompletedRequest(
595 const net::URLRequestStatus& status, 598 const net::URLRequestStatus& status,
596 const std::string& security_info, 599 const std::string& security_info,
597 const base::Time& completion_time) { 600 const base::TimeTicks& completion_time) {
598 if (ftp_listing_delegate_.get()) { 601 if (ftp_listing_delegate_.get()) {
599 ftp_listing_delegate_->OnCompletedRequest(); 602 ftp_listing_delegate_->OnCompletedRequest();
600 ftp_listing_delegate_.reset(NULL); 603 ftp_listing_delegate_.reset(NULL);
601 } else if (multipart_delegate_.get()) { 604 } else if (multipart_delegate_.get()) {
602 multipart_delegate_->OnCompletedRequest(); 605 multipart_delegate_->OnCompletedRequest();
603 multipart_delegate_.reset(NULL); 606 multipart_delegate_.reset(NULL);
604 } 607 }
605 608
606 // Prevent any further IPC to the browser now that we're complete, but 609 // Prevent any further IPC to the browser now that we're complete, but
607 // don't delete it to keep any downloaded temp files alive. 610 // don't delete it to keep any downloaded temp files alive.
(...skipping 11 matching lines...) Expand all
619 error_code = status.os_error(); 622 error_code = status.os_error();
620 } 623 }
621 WebURLError error; 624 WebURLError error;
622 if (error_code == net::ERR_ABORTED) 625 if (error_code == net::ERR_ABORTED)
623 error.isCancellation = true; 626 error.isCancellation = true;
624 error.domain = WebString::fromUTF8(net::kErrorDomain); 627 error.domain = WebString::fromUTF8(net::kErrorDomain);
625 error.reason = error_code; 628 error.reason = error_code;
626 error.unreachableURL = request_.url(); 629 error.unreachableURL = request_.url();
627 client_->didFail(loader_, error); 630 client_->didFail(loader_, error);
628 } else { 631 } else {
629 client_->didFinishLoading(loader_, completion_time.ToDoubleT()); 632 client_->didFinishLoading(
pfeldman 2011/08/26 16:08:01 What is your plan on landing this? Are you going t
James Simonsen 2011/08/26 18:57:18 I plan to make a best-effort coordinated landing.
633 loader_, completion_time.ToInternalValue() /
634 static_cast<double>(base::Time::kMicrosecondsPerSecond));
630 } 635 }
631 } 636 }
632 637
633 // We are done with the bridge now, and so we need to release the reference 638 // We are done with the bridge now, and so we need to release the reference
634 // to ourselves that we took on behalf of the bridge. This may cause our 639 // to ourselves that we took on behalf of the bridge. This may cause our
635 // destruction. 640 // destruction.
636 Release(); 641 Release();
637 } 642 }
638 643
639 bool WebURLLoaderImpl::Context::CanHandleDataURL(const GURL& url) const { 644 bool WebURLLoaderImpl::Context::CanHandleDataURL(const GURL& url) const {
(...skipping 23 matching lines...) Expand all
663 ResourceResponseInfo info; 668 ResourceResponseInfo info;
664 net::URLRequestStatus status; 669 net::URLRequestStatus status;
665 std::string data; 670 std::string data;
666 671
667 if (GetInfoFromDataURL(request_.url(), &info, &data, &status)) { 672 if (GetInfoFromDataURL(request_.url(), &info, &data, &status)) {
668 OnReceivedResponse(info); 673 OnReceivedResponse(info);
669 if (!data.empty()) 674 if (!data.empty())
670 OnReceivedData(data.data(), data.size(), 0); 675 OnReceivedData(data.data(), data.size(), 0);
671 } 676 }
672 677
673 OnCompletedRequest(status, info.security_info, base::Time::Now()); 678 OnCompletedRequest(status, info.security_info, base::TimeTicks::Now());
674 } 679 }
675 680
676 // WebURLLoaderImpl ----------------------------------------------------------- 681 // WebURLLoaderImpl -----------------------------------------------------------
677 682
678 WebURLLoaderImpl::WebURLLoaderImpl() 683 WebURLLoaderImpl::WebURLLoaderImpl()
679 : ALLOW_THIS_IN_INITIALIZER_LIST(context_(new Context(this))) { 684 : ALLOW_THIS_IN_INITIALIZER_LIST(context_(new Context(this))) {
680 } 685 }
681 686
682 WebURLLoaderImpl::~WebURLLoaderImpl() { 687 WebURLLoaderImpl::~WebURLLoaderImpl() {
683 cancel(); 688 cancel();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 730
726 void WebURLLoaderImpl::setDefersLoading(bool value) { 731 void WebURLLoaderImpl::setDefersLoading(bool value) {
727 context_->SetDefersLoading(value); 732 context_->SetDefersLoading(value);
728 } 733 }
729 734
730 void WebURLLoaderImpl::UpdateRoutingId(int new_routing_id) { 735 void WebURLLoaderImpl::UpdateRoutingId(int new_routing_id) {
731 context_->UpdateRoutingId(new_routing_id); 736 context_->UpdateRoutingId(new_routing_id);
732 } 737 }
733 738
734 } // namespace webkit_glue 739 } // namespace webkit_glue
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698