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; |
} |