Index: net/url_request/url_request.cc |
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc |
index 4d1a871d39eec390bfaee27f446f4f34ef510ddb..4c4bcfe7f6321e5f63bfe90f914defdc27c5e164 100644 |
--- a/net/url_request/url_request.cc |
+++ b/net/url_request/url_request.cc |
@@ -658,10 +658,14 @@ void URLRequest::StartJob(URLRequestJob* job) { |
} |
} |
+ // Mark the request as pending, as Start() always completes asynchronously. |
+ // Status is generally set by URLRequestJob itself, but Start() calls |
+ // directly into the URLRequestJob subclass, so URLRequestJob can't set it |
+ // here. |
+ // TODO(mmenke): Make the URLRequest manage its own status. |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
+ |
// Don't allow errors to be sent from within Start(). |
Randy Smith (Not in Mondays)
2016/01/11 02:27:48
Do you understand this comment? It confuses me--I
mmenke
2016/01/11 06:17:11
I merged it with the above comment - yea, I think
|
- // TODO(brettw) this may cause NotifyDone to be sent synchronously, |
- // we probably don't want this: they should be sent asynchronously so |
- // the caller does not get reentered. |
mmenke
2016/01/07 15:54:55
This comment is rather outdated - NotifyDone alway
Randy Smith (Not in Mondays)
2016/01/11 02:27:48
Acknowledged.
|
job_->Start(); |
} |
@@ -855,9 +859,10 @@ void URLRequest::NotifyResponseStarted() { |
} |
void URLRequest::FollowDeferredRedirect() { |
- CHECK(job_.get()); |
- CHECK(status_.is_success()); |
+ DCHECK(job_.get()); |
+ DCHECK(status_.is_success()); |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
Randy Smith (Not in Mondays)
2016/01/11 02:27:48
I'm struggling with my conscience as to whether th
mmenke
2016/01/11 06:17:11
So, we don't really distinguish well between what
|
job_->FollowDeferredRedirect(); |
} |
@@ -865,6 +870,7 @@ void URLRequest::SetAuth(const AuthCredentials& credentials) { |
DCHECK(job_.get()); |
DCHECK(job_->NeedsAuth()); |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
job_->SetAuth(credentials); |
} |
@@ -872,6 +878,7 @@ void URLRequest::CancelAuth() { |
DCHECK(job_.get()); |
DCHECK(job_->NeedsAuth()); |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
job_->CancelAuth(); |
} |
@@ -879,12 +886,14 @@ void URLRequest::ContinueWithCertificate(X509Certificate* client_cert, |
SSLPrivateKey* client_private_key) { |
DCHECK(job_.get()); |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
job_->ContinueWithCertificate(client_cert, client_private_key); |
} |
void URLRequest::ContinueDespiteLastError() { |
DCHECK(job_.get()); |
+ status_ = URLRequestStatus::FromError(ERR_IO_PENDING); |
job_->ContinueDespiteLastError(); |
} |
@@ -1111,11 +1120,13 @@ void URLRequest::NotifyAuthRequiredComplete( |
void URLRequest::NotifyCertificateRequested( |
SSLCertRequestInfo* cert_request_info) { |
+ status_ = URLRequestStatus(); |
delegate_->OnCertificateRequested(this, cert_request_info); |
} |
void URLRequest::NotifySSLCertificateError(const SSLInfo& ssl_info, |
bool fatal) { |
+ status_ = URLRequestStatus(); |
delegate_->OnSSLCertificateError(this, ssl_info, fatal); |
} |