Chromium Code Reviews| Index: net/url_request/url_request.cc |
| diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc |
| index 61308faafa8d04818411d808fa30329cb73ec569..61168b4128a52e434a31835bf704d3f20a685dd2 100644 |
| --- a/net/url_request/url_request.cc |
| +++ b/net/url_request/url_request.cc |
| @@ -182,11 +182,12 @@ URLRequest::~URLRequest() { |
| job_->NotifyURLRequestDestroyed(); |
| } |
| - if (job_.get()) |
| - OrphanJob(); |
| + // Delete job before |this|, since subclasses may do weird things, like depend |
| + // on UserData associated with |this| and poke at it during teardown. |
| + job_.reset(); |
| - int deleted = context_->url_requests()->erase(this); |
| - CHECK_EQ(1, deleted); |
| + DCHECK_EQ(1u, context_->url_requests()->count(this)); |
| + context_->url_requests()->erase(this); |
|
mmenke
2016/11/03 20:31:06
This admittedly isn't really related to the CL, ju
|
| int net_error = OK; |
| // Log error only on failure, not cancellation, as even successful requests |
| @@ -895,7 +896,7 @@ void URLRequest::PrepareToRestart() { |
| // one. |
| net_log_.EndEvent(NetLogEventType::URL_REQUEST_START_JOB); |
| - OrphanJob(); |
| + job_.reset(); |
| response_info_ = HttpResponseInfo(); |
| response_info_.request_time = base::Time::Now(); |
| @@ -909,19 +910,6 @@ void URLRequest::PrepareToRestart() { |
| proxy_server_ = ProxyServer(); |
| } |
| -void URLRequest::OrphanJob() { |
| - // When calling this function, please check that URLRequestHttpJob is |
| - // not in between calling NetworkDelegate::NotifyHeadersReceived receiving |
| - // the call back. This is currently guaranteed by the following strategies: |
| - // - OrphanJob is called on JobRestart, in this case the URLRequestJob cannot |
| - // be receiving any headers at that time. |
| - // - OrphanJob is called in ~URLRequest, in this case |
| - // NetworkDelegate::NotifyURLRequestDestroyed notifies the NetworkDelegate |
| - // that the callback becomes invalid. |
| - job_->Kill(); |
| - job_ = NULL; |
| -} |
| - |
| int URLRequest::Redirect(const RedirectInfo& redirect_info) { |
| // Matches call in NotifyReceivedRedirect. |
| OnCallToDelegateComplete(); |