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/child/weburlloader_impl.h" | 7 #include "webkit/child/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 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 GURL* new_first_party_for_cookies) OVERRIDE; | 238 GURL* new_first_party_for_cookies) OVERRIDE; |
239 virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE; | 239 virtual void OnReceivedResponse(const ResourceResponseInfo& info) OVERRIDE; |
240 virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE; | 240 virtual void OnDownloadedData(int len, int encoded_data_length) OVERRIDE; |
241 virtual void OnReceivedData(const char* data, | 241 virtual void OnReceivedData(const char* data, |
242 int data_length, | 242 int data_length, |
243 int encoded_data_length) OVERRIDE; | 243 int encoded_data_length) OVERRIDE; |
244 virtual void OnReceivedCachedMetadata(const char* data, int len) OVERRIDE; | 244 virtual void OnReceivedCachedMetadata(const char* data, int len) OVERRIDE; |
245 virtual void OnCompletedRequest( | 245 virtual void OnCompletedRequest( |
246 int error_code, | 246 int error_code, |
247 bool was_ignored_by_handler, | 247 bool was_ignored_by_handler, |
| 248 bool stale_copy_in_cache, |
248 const std::string& security_info, | 249 const std::string& security_info, |
249 const base::TimeTicks& completion_time) OVERRIDE; | 250 const base::TimeTicks& completion_time) OVERRIDE; |
250 | 251 |
251 private: | 252 private: |
252 friend class base::RefCounted<Context>; | 253 friend class base::RefCounted<Context>; |
253 virtual ~Context() {} | 254 virtual ~Context() {} |
254 | 255 |
255 // We can optimize the handling of data URLs in most cases. | 256 // We can optimize the handling of data URLs in most cases. |
256 bool CanHandleDataURL(const GURL& url) const; | 257 bool CanHandleDataURL(const GURL& url) const; |
257 void HandleDataURL(); | 258 void HandleDataURL(); |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 | 595 |
595 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( | 596 void WebURLLoaderImpl::Context::OnReceivedCachedMetadata( |
596 const char* data, int len) { | 597 const char* data, int len) { |
597 if (client_) | 598 if (client_) |
598 client_->didReceiveCachedMetadata(loader_, data, len); | 599 client_->didReceiveCachedMetadata(loader_, data, len); |
599 } | 600 } |
600 | 601 |
601 void WebURLLoaderImpl::Context::OnCompletedRequest( | 602 void WebURLLoaderImpl::Context::OnCompletedRequest( |
602 int error_code, | 603 int error_code, |
603 bool was_ignored_by_handler, | 604 bool was_ignored_by_handler, |
| 605 bool stale_copy_in_cache, |
604 const std::string& security_info, | 606 const std::string& security_info, |
605 const base::TimeTicks& completion_time) { | 607 const base::TimeTicks& completion_time) { |
606 if (ftp_listing_delegate_) { | 608 if (ftp_listing_delegate_) { |
607 ftp_listing_delegate_->OnCompletedRequest(); | 609 ftp_listing_delegate_->OnCompletedRequest(); |
608 ftp_listing_delegate_.reset(NULL); | 610 ftp_listing_delegate_.reset(NULL); |
609 } else if (multipart_delegate_) { | 611 } else if (multipart_delegate_) { |
610 multipart_delegate_->OnCompletedRequest(); | 612 multipart_delegate_->OnCompletedRequest(); |
611 multipart_delegate_.reset(NULL); | 613 multipart_delegate_.reset(NULL); |
612 } | 614 } |
613 | 615 |
614 // Prevent any further IPC to the browser now that we're complete, but | 616 // Prevent any further IPC to the browser now that we're complete, but |
615 // don't delete it to keep any downloaded temp files alive. | 617 // don't delete it to keep any downloaded temp files alive. |
616 DCHECK(!completed_bridge_.get()); | 618 DCHECK(!completed_bridge_.get()); |
617 completed_bridge_.swap(bridge_); | 619 completed_bridge_.swap(bridge_); |
618 | 620 |
619 if (client_) { | 621 if (client_) { |
620 if (error_code != net::OK) { | 622 if (error_code != net::OK) { |
621 client_->didFail(loader_, CreateError(request_.url(), error_code)); | 623 client_->didFail(loader_, CreateError(request_.url(), |
| 624 stale_copy_in_cache, |
| 625 error_code)); |
622 } else { | 626 } else { |
623 client_->didFinishLoading( | 627 client_->didFinishLoading( |
624 loader_, (completion_time - TimeTicks()).InSecondsF()); | 628 loader_, (completion_time - TimeTicks()).InSecondsF()); |
625 } | 629 } |
626 } | 630 } |
627 | 631 |
628 // We are done with the bridge now, and so we need to release the reference | 632 // We are done with the bridge now, and so we need to release the reference |
629 // to ourselves that we took on behalf of the bridge. This may cause our | 633 // to ourselves that we took on behalf of the bridge. This may cause our |
630 // destruction. | 634 // destruction. |
631 Release(); | 635 Release(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 ResourceResponseInfo info; | 669 ResourceResponseInfo info; |
666 int error_code; | 670 int error_code; |
667 std::string data; | 671 std::string data; |
668 | 672 |
669 if (GetInfoFromDataURL(request_.url(), &info, &data, &error_code)) { | 673 if (GetInfoFromDataURL(request_.url(), &info, &data, &error_code)) { |
670 OnReceivedResponse(info); | 674 OnReceivedResponse(info); |
671 if (!data.empty()) | 675 if (!data.empty()) |
672 OnReceivedData(data.data(), data.size(), 0); | 676 OnReceivedData(data.data(), data.size(), 0); |
673 } | 677 } |
674 | 678 |
675 OnCompletedRequest(error_code, false, info.security_info, | 679 OnCompletedRequest(error_code, false, false, info.security_info, |
676 base::TimeTicks::Now()); | 680 base::TimeTicks::Now()); |
677 } | 681 } |
678 | 682 |
679 // WebURLLoaderImpl ----------------------------------------------------------- | 683 // WebURLLoaderImpl ----------------------------------------------------------- |
680 | 684 |
681 WebURLLoaderImpl::WebURLLoaderImpl(WebKitPlatformSupportImpl* platform) | 685 WebURLLoaderImpl::WebURLLoaderImpl(WebKitPlatformSupportImpl* platform) |
682 : context_(new Context(this)), | 686 : context_(new Context(this)), |
683 platform_(platform) { | 687 platform_(platform) { |
684 } | 688 } |
685 | 689 |
686 WebURLLoaderImpl::~WebURLLoaderImpl() { | 690 WebURLLoaderImpl::~WebURLLoaderImpl() { |
687 cancel(); | 691 cancel(); |
688 } | 692 } |
689 | 693 |
690 WebURLError WebURLLoaderImpl::CreateError(const WebURL& unreachable_url, | 694 WebURLError WebURLLoaderImpl::CreateError(const WebURL& unreachable_url, |
| 695 bool stale_copy_in_cache, |
691 int reason) { | 696 int reason) { |
692 WebURLError error; | 697 WebURLError error; |
693 error.domain = WebString::fromUTF8(net::kErrorDomain); | 698 error.domain = WebString::fromUTF8(net::kErrorDomain); |
694 error.reason = reason; | 699 error.reason = reason; |
695 error.unreachableURL = unreachable_url; | 700 error.unreachableURL = unreachable_url; |
| 701 error.staleCopyInCache = stale_copy_in_cache; |
696 if (reason == net::ERR_ABORTED) { | 702 if (reason == net::ERR_ABORTED) { |
697 error.isCancellation = true; | 703 error.isCancellation = true; |
698 } else if (reason == net::ERR_TEMPORARILY_THROTTLED) { | 704 } else if (reason == net::ERR_TEMPORARILY_THROTTLED) { |
699 error.localizedDescription = WebString::fromUTF8( | 705 error.localizedDescription = WebString::fromUTF8( |
700 kThrottledErrorDescription); | 706 kThrottledErrorDescription); |
701 } else { | 707 } else { |
702 error.localizedDescription = WebString::fromUTF8( | 708 error.localizedDescription = WebString::fromUTF8( |
703 net::ErrorToString(reason)); | 709 net::ErrorToString(reason)); |
704 } | 710 } |
705 return error; | 711 return error; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
853 | 859 |
854 void WebURLLoaderImpl::setDefersLoading(bool value) { | 860 void WebURLLoaderImpl::setDefersLoading(bool value) { |
855 context_->SetDefersLoading(value); | 861 context_->SetDefersLoading(value); |
856 } | 862 } |
857 | 863 |
858 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { | 864 void WebURLLoaderImpl::didChangePriority(WebURLRequest::Priority new_priority) { |
859 context_->DidChangePriority(new_priority); | 865 context_->DidChangePriority(new_priority); |
860 } | 866 } |
861 | 867 |
862 } // namespace webkit_glue | 868 } // namespace webkit_glue |
OLD | NEW |