Index: content/browser/loader/async_resource_handler.cc |
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc |
index f007a417fb8ffe997e20c439506d9f8a6834c367..f1f8278297ca84faa1c5c39dd8fba6cc129f7d57 100644 |
--- a/content/browser/loader/async_resource_handler.cc |
+++ b/content/browser/loader/async_resource_handler.cc |
@@ -137,8 +137,9 @@ bool AsyncResourceHandler::OnUploadProgress(int request_id, |
uint64 size) { |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
+ // Cancel the request if the renderer is gone unless it's detachable. |
if (!info->filter()) |
- return false; |
+ return info->is_detachable(); |
return info->filter()->Send( |
new ResourceMsg_UploadProgress(request_id, position, size)); |
} |
@@ -149,8 +150,9 @@ bool AsyncResourceHandler::OnRequestRedirected(int request_id, |
bool* defer) { |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
+ // Cancel the request if the renderer is gone unless it's detachable. |
if (!info->filter()) |
- return false; |
+ return info->is_detachable(); |
*defer = did_defer_ = true; |
@@ -177,8 +179,9 @@ bool AsyncResourceHandler::OnResponseStarted(int request_id, |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
+ // Cancel the request if the renderer is gone unless it's detachable. |
if (!info->filter()) |
- return false; |
+ return info->is_detachable(); |
if (rdh_->delegate()) { |
rdh_->delegate()->OnResponseStarted( |
@@ -249,6 +252,11 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read, |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
+ // Don't send any data for detachable requests. |
James Simonsen
2013/10/26 02:25:00
On face value, this doesn't sound right. It seems
jkarlin2
2013/10/28 19:25:41
Done. There is now a distinct "detached" state an
|
+ if (info->is_detachable()) { |
+ buffer_->RecycleLeastRecentlyAllocated(); |
+ return true; |
+ } |
if (!info->filter()) |
return false; |
@@ -311,8 +319,9 @@ bool AsyncResourceHandler::OnResponseCompleted( |
const std::string& security_info) { |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
+ // Cancel the request if the renderer is gone unless it's detachable. |
if (!info->filter()) |
- return false; |
+ return info->is_detachable(); |
// If we crash here, figure out what URL the renderer was requesting. |
// http://crbug.com/107692 |