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 #include "net/url_request/url_request.h" | 5 #include "net/url_request/url_request.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 referrer_.clear(); | 651 referrer_.clear(); |
652 std::string source("delegate"); | 652 std::string source("delegate"); |
653 net_log_.AddEvent(NetLog::TYPE_CANCELLED, | 653 net_log_.AddEvent(NetLog::TYPE_CANCELLED, |
654 NetLog::StringCallback("source", &source)); | 654 NetLog::StringCallback("source", &source)); |
655 RestartWithJob(new URLRequestErrorJob( | 655 RestartWithJob(new URLRequestErrorJob( |
656 this, network_delegate_, ERR_BLOCKED_BY_CLIENT)); | 656 this, network_delegate_, ERR_BLOCKED_BY_CLIENT)); |
657 return; | 657 return; |
658 } | 658 } |
659 } | 659 } |
660 | 660 |
661 // Don't allow errors to be sent from within Start(). | 661 // Start() always completes asynchronously. |
662 // TODO(brettw) this may cause NotifyDone to be sent synchronously, | 662 // |
663 // we probably don't want this: they should be sent asynchronously so | 663 // Status is generally set by URLRequestJob itself, but Start() calls |
664 // the caller does not get reentered. | 664 // directly into the URLRequestJob subclass, so URLRequestJob can't set it |
| 665 // here. |
| 666 // TODO(mmenke): Make the URLRequest manage its own status. |
| 667 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
665 job_->Start(); | 668 job_->Start(); |
666 } | 669 } |
667 | 670 |
668 void URLRequest::Restart() { | 671 void URLRequest::Restart() { |
669 // Should only be called if the original job didn't make any progress. | 672 // Should only be called if the original job didn't make any progress. |
670 DCHECK(job_.get() && !job_->has_response_started()); | 673 DCHECK(job_.get() && !job_->has_response_started()); |
671 RestartWithJob( | 674 RestartWithJob( |
672 URLRequestJobManager::GetInstance()->CreateJob(this, network_delegate_)); | 675 URLRequestJobManager::GetInstance()->CreateJob(this, network_delegate_)); |
673 } | 676 } |
674 | 677 |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 NotifyRequestCompleted(); | 851 NotifyRequestCompleted(); |
849 | 852 |
850 OnCallToDelegate(); | 853 OnCallToDelegate(); |
851 delegate_->OnResponseStarted(this); | 854 delegate_->OnResponseStarted(this); |
852 // Nothing may appear below this line as OnResponseStarted may delete | 855 // Nothing may appear below this line as OnResponseStarted may delete |
853 // |this|. | 856 // |this|. |
854 } | 857 } |
855 } | 858 } |
856 | 859 |
857 void URLRequest::FollowDeferredRedirect() { | 860 void URLRequest::FollowDeferredRedirect() { |
858 CHECK(job_.get()); | 861 DCHECK(job_.get()); |
859 CHECK(status_.is_success()); | 862 DCHECK(status_.is_success()); |
860 | 863 |
| 864 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
861 job_->FollowDeferredRedirect(); | 865 job_->FollowDeferredRedirect(); |
862 } | 866 } |
863 | 867 |
864 void URLRequest::SetAuth(const AuthCredentials& credentials) { | 868 void URLRequest::SetAuth(const AuthCredentials& credentials) { |
865 DCHECK(job_.get()); | 869 DCHECK(job_.get()); |
866 DCHECK(job_->NeedsAuth()); | 870 DCHECK(job_->NeedsAuth()); |
867 | 871 |
| 872 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
868 job_->SetAuth(credentials); | 873 job_->SetAuth(credentials); |
869 } | 874 } |
870 | 875 |
871 void URLRequest::CancelAuth() { | 876 void URLRequest::CancelAuth() { |
872 DCHECK(job_.get()); | 877 DCHECK(job_.get()); |
873 DCHECK(job_->NeedsAuth()); | 878 DCHECK(job_->NeedsAuth()); |
874 | 879 |
| 880 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
875 job_->CancelAuth(); | 881 job_->CancelAuth(); |
876 } | 882 } |
877 | 883 |
878 void URLRequest::ContinueWithCertificate(X509Certificate* client_cert, | 884 void URLRequest::ContinueWithCertificate(X509Certificate* client_cert, |
879 SSLPrivateKey* client_private_key) { | 885 SSLPrivateKey* client_private_key) { |
880 DCHECK(job_.get()); | 886 DCHECK(job_.get()); |
881 | 887 |
| 888 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
882 job_->ContinueWithCertificate(client_cert, client_private_key); | 889 job_->ContinueWithCertificate(client_cert, client_private_key); |
883 } | 890 } |
884 | 891 |
885 void URLRequest::ContinueDespiteLastError() { | 892 void URLRequest::ContinueDespiteLastError() { |
886 DCHECK(job_.get()); | 893 DCHECK(job_.get()); |
887 | 894 |
| 895 status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
888 job_->ContinueDespiteLastError(); | 896 job_->ContinueDespiteLastError(); |
889 } | 897 } |
890 | 898 |
891 void URLRequest::PrepareToRestart() { | 899 void URLRequest::PrepareToRestart() { |
892 DCHECK(job_.get()); | 900 DCHECK(job_.get()); |
893 | 901 |
894 // Close the current URL_REQUEST_START_JOB, since we will be starting a new | 902 // Close the current URL_REQUEST_START_JOB, since we will be starting a new |
895 // one. | 903 // one. |
896 net_log_.EndEvent(NetLog::TYPE_URL_REQUEST_START_JOB); | 904 net_log_.EndEvent(NetLog::TYPE_URL_REQUEST_START_JOB); |
897 | 905 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 break; | 1112 break; |
1105 | 1113 |
1106 case NetworkDelegate::AUTH_REQUIRED_RESPONSE_IO_PENDING: | 1114 case NetworkDelegate::AUTH_REQUIRED_RESPONSE_IO_PENDING: |
1107 NOTREACHED(); | 1115 NOTREACHED(); |
1108 break; | 1116 break; |
1109 } | 1117 } |
1110 } | 1118 } |
1111 | 1119 |
1112 void URLRequest::NotifyCertificateRequested( | 1120 void URLRequest::NotifyCertificateRequested( |
1113 SSLCertRequestInfo* cert_request_info) { | 1121 SSLCertRequestInfo* cert_request_info) { |
| 1122 status_ = URLRequestStatus(); |
1114 delegate_->OnCertificateRequested(this, cert_request_info); | 1123 delegate_->OnCertificateRequested(this, cert_request_info); |
1115 } | 1124 } |
1116 | 1125 |
1117 void URLRequest::NotifySSLCertificateError(const SSLInfo& ssl_info, | 1126 void URLRequest::NotifySSLCertificateError(const SSLInfo& ssl_info, |
1118 bool fatal) { | 1127 bool fatal) { |
| 1128 status_ = URLRequestStatus(); |
1119 delegate_->OnSSLCertificateError(this, ssl_info, fatal); | 1129 delegate_->OnSSLCertificateError(this, ssl_info, fatal); |
1120 } | 1130 } |
1121 | 1131 |
1122 bool URLRequest::CanGetCookies(const CookieList& cookie_list) const { | 1132 bool URLRequest::CanGetCookies(const CookieList& cookie_list) const { |
1123 DCHECK(!(load_flags_ & LOAD_DO_NOT_SEND_COOKIES)); | 1133 DCHECK(!(load_flags_ & LOAD_DO_NOT_SEND_COOKIES)); |
1124 if (network_delegate_) { | 1134 if (network_delegate_) { |
1125 return network_delegate_->CanGetCookies(*this, cookie_list); | 1135 return network_delegate_->CanGetCookies(*this, cookie_list); |
1126 } | 1136 } |
1127 return g_default_can_use_cookies; | 1137 return g_default_can_use_cookies; |
1128 } | 1138 } |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1221 } | 1231 } |
1222 | 1232 |
1223 void URLRequest::GetConnectionAttempts(ConnectionAttempts* out) const { | 1233 void URLRequest::GetConnectionAttempts(ConnectionAttempts* out) const { |
1224 if (job_) | 1234 if (job_) |
1225 job_->GetConnectionAttempts(out); | 1235 job_->GetConnectionAttempts(out); |
1226 else | 1236 else |
1227 out->clear(); | 1237 out->clear(); |
1228 } | 1238 } |
1229 | 1239 |
1230 } // namespace net | 1240 } // namespace net |
OLD | NEW |