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..9f2e5cfcc70863a0d3bff05c92dcbe2d6b274c85 100644 |
--- a/content/browser/loader/async_resource_handler.cc |
+++ b/content/browser/loader/async_resource_handler.cc |
@@ -87,7 +87,8 @@ AsyncResourceHandler::AsyncResourceHandler( |
did_defer_(false), |
has_checked_for_sufficient_resources_(false), |
sent_received_response_msg_(false), |
- sent_first_data_msg_(false) { |
+ sent_first_data_msg_(false), |
+ detached_reads_(false) { |
InitializeResourceBufferConstants(); |
} |
@@ -247,6 +248,11 @@ bool AsyncResourceHandler::OnReadCompleted(int request_id, int bytes_read, |
if (!bytes_read) |
return true; |
+ if (detached_reads_) { |
+ buffer_->RecycleLeastRecentlyAllocated(); |
+ return true; |
+ } |
+ |
const ResourceRequestInfoImpl* info = |
ResourceRequestInfoImpl::ForRequest(request_); |
if (!info->filter()) |
@@ -384,4 +390,8 @@ void AsyncResourceHandler::ResumeIfDeferred() { |
} |
} |
+void AsyncResourceHandler::DetachReads() { |
+ detached_reads_ = true; |
+} |
+ |
} // namespace content |