| Index: content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| diff --git a/content/browser/renderer_host/resource_dispatcher_host_impl.cc b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| index aeb257368cec219484bfcc40fdd12b1277de5731..7590d1dc9e351926e881a258e8d7dc8e38f6adec 100644
|
| --- a/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| +++ b/content/browser/renderer_host/resource_dispatcher_host_impl.cc
|
| @@ -1411,7 +1411,7 @@ void ResourceDispatcherHostImpl::OnReceivedRedirect(net::URLRequest* request,
|
| << new_url.possibly_invalid_spec();
|
|
|
| // Tell the renderer that this request was disallowed.
|
| - CancelRequestInternal(request, false);
|
| + CancelRequestInternal(request, false, false);
|
| return;
|
| }
|
|
|
| @@ -1432,7 +1432,7 @@ void ResourceDispatcherHostImpl::OnReceivedRedirect(net::URLRequest* request,
|
| if (!info->resource_handler()->OnRequestRedirected(info->GetRequestID(),
|
| new_url,
|
| response, defer_redirect))
|
| - CancelRequestInternal(request, false);
|
| + CancelRequestInternal(request, false, false);
|
| }
|
|
|
| void ResourceDispatcherHostImpl::OnAuthRequired(
|
| @@ -1539,7 +1539,7 @@ void ResourceDispatcherHostImpl::OnResponseStarted(net::URLRequest* request) {
|
| MaybeUpdateUploadProgress(info, request);
|
|
|
| if (!CompleteResponseStarted(request)) {
|
| - CancelRequestInternal(request, false);
|
| + CancelRequestInternal(request, false, false);
|
| } else {
|
| // Check if the handler paused the request in their OnResponseStarted.
|
| if (PauseRequestIfNeeded(info)) {
|
| @@ -1594,6 +1594,20 @@ bool ResourceDispatcherHostImpl::CompleteResponseStarted(
|
| void ResourceDispatcherHostImpl::CancelRequest(int child_id,
|
| int request_id,
|
| bool from_renderer) {
|
| + CancelRequestWorker(child_id, request_id, from_renderer, false);
|
| +}
|
| +
|
| +void ResourceDispatcherHostImpl::CancelRequestWithHandledExternallyStatus(
|
| + int child_id, int request_id) {
|
| + CancelRequestWorker(child_id, request_id, false, true);
|
| +}
|
| +
|
| +void ResourceDispatcherHostImpl::CancelRequestWorker(int child_id,
|
| + int request_id,
|
| + bool from_renderer,
|
| + bool handled_externally) {
|
| + // The renderer will only ever ask us to perform a regular cancel.
|
| + DCHECK(!(handled_externally && from_renderer));
|
| GlobalRequestID id(child_id, request_id);
|
| if (from_renderer) {
|
| // When the old renderer dies, it sends a message to us to cancel its
|
| @@ -1613,7 +1627,7 @@ void ResourceDispatcherHostImpl::CancelRequest(int child_id,
|
| net::URLRequest* request = i->second;
|
|
|
| bool started_before_cancel = request->is_pending();
|
| - if (CancelRequestInternal(request, from_renderer) &&
|
| + if (CancelRequestInternal(request, from_renderer, handled_externally) &&
|
| !started_before_cancel) {
|
| // If the request isn't in flight, then we won't get an asynchronous
|
| // notification from the request, so we have to signal ourselves to finish
|
| @@ -1627,8 +1641,10 @@ void ResourceDispatcherHostImpl::CancelRequest(int child_id,
|
| }
|
| }
|
|
|
| -bool ResourceDispatcherHostImpl::CancelRequestInternal(net::URLRequest* request,
|
| - bool from_renderer) {
|
| +bool ResourceDispatcherHostImpl::CancelRequestInternal(
|
| + net::URLRequest* request,
|
| + bool from_renderer,
|
| + bool handled_externally) {
|
| VLOG(1) << "CancelRequest: " << request->url().spec();
|
|
|
| // WebKit will send us a cancel for downloads since it no longer handles them.
|
| @@ -1643,7 +1659,10 @@ bool ResourceDispatcherHostImpl::CancelRequestInternal(net::URLRequest* request,
|
| info->ssl_client_auth_handler()->OnRequestCancelled();
|
| info->set_ssl_client_auth_handler(NULL);
|
| }
|
| - request->Cancel();
|
| + if (handled_externally)
|
| + request->CancelWithHandledExternallyStatus();
|
| + else
|
| + request->Cancel();
|
| // Our callers assume |request| is valid after we return.
|
| DCHECK(IsValidRequest(request));
|
| return true;
|
| @@ -1750,7 +1769,7 @@ void ResourceDispatcherHostImpl::BeginRequestInternal(
|
| if (!info->resource_handler()->OnWillStart(
|
| info->GetRequestID(), request->url(),
|
| &defer_start)) {
|
| - CancelRequestInternal(request, false);
|
| + CancelRequestInternal(request, false, false);
|
| return;
|
| }
|
|
|
| @@ -1953,7 +1972,7 @@ bool ResourceDispatcherHostImpl::CompleteRead(net::URLRequest* request,
|
| bool defer = false;
|
| if (!info->resource_handler()->OnReadCompleted(info->GetRequestID(),
|
| bytes_read, &defer)) {
|
| - CancelRequestInternal(request, false);
|
| + CancelRequestInternal(request, false, false);
|
| return false;
|
| }
|
|
|
|
|