Index: content/browser/loader/resource_loader.cc |
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc |
index 4ea361117cfdd19b64cfda71435f353b3f6684ef..5585004ea24d4aa600a758b740a8d3b305e62bff 100644 |
--- a/content/browser/loader/resource_loader.cc |
+++ b/content/browser/loader/resource_loader.cc |
@@ -16,7 +16,6 @@ |
#include "base/trace_event/trace_event.h" |
#include "content/browser/appcache/appcache_interceptor.h" |
#include "content/browser/child_process_security_policy_impl.h" |
-#include "content/browser/loader/cross_site_resource_handler.h" |
#include "content/browser/loader/detachable_resource_handler.h" |
#include "content/browser/loader/resource_loader_delegate.h" |
#include "content/browser/loader/resource_request_info_impl.h" |
@@ -223,11 +222,12 @@ void ResourceLoader::CancelWithError(int error_code) { |
} |
void ResourceLoader::MarkAsTransferring( |
- const scoped_refptr<ResourceResponse>& response) { |
+ const base::Closure& on_transfer_complete_callback) { |
CHECK(IsResourceTypeFrame(GetRequestInfo()->GetResourceType())) |
<< "Can only transfer for navigations"; |
+ DCHECK(response_.get()); |
is_transferring_ = true; |
- transferring_response_ = response; |
+ on_transfer_complete_ = on_transfer_complete_callback; |
int child_id = GetRequestInfo()->GetChildID(); |
AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id); |
@@ -238,14 +238,15 @@ void ResourceLoader::MarkAsTransferring( |
} |
void ResourceLoader::CompleteTransfer() { |
- // Although CrossSiteResourceHandler defers at OnResponseStarted |
+ // Although NavigationResourceThrottle defers at WillProcessResponse |
// (DEFERRED_READ), it may be seeing a replay of events via |
- // MimeTypeResourceHandler, and so the request itself is actually deferred |
- // at a later read stage. |
+ // MimeTypeResourceHandler, and so the request itself is actually deferred at |
+ // a later read stage. |
DCHECK(DEFERRED_READ == deferred_stage_ || |
DEFERRED_RESPONSE_COMPLETE == deferred_stage_); |
DCHECK(is_transferring_); |
- DCHECK(transferring_response_); |
+ DCHECK(response_); |
+ DCHECK(!on_transfer_complete_.is_null()); |
// In some cases, a process transfer doesn't really happen and the |
// request is resumed in the original process. Real transfers to a new process |
@@ -259,8 +260,8 @@ void ResourceLoader::CompleteTransfer() { |
handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id); |
is_transferring_ = false; |
- transferring_response_ = nullptr; |
- GetRequestInfo()->cross_site_handler()->ResumeResponse(); |
+ on_transfer_complete_.Run(); |
+ on_transfer_complete_.Reset(); |
} |
ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { |
@@ -562,8 +563,8 @@ void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { |
void ResourceLoader::CompleteResponseStarted() { |
ResourceRequestInfoImpl* info = GetRequestInfo(); |
- scoped_refptr<ResourceResponse> response = new ResourceResponse(); |
- PopulateResourceResponse(info, request_.get(), cert_store_, response.get()); |
+ response_ = new ResourceResponse(); |
+ PopulateResourceResponse(info, request_.get(), cert_store_, response_.get()); |
delegate_->DidReceiveResponse(this); |
@@ -572,7 +573,7 @@ void ResourceLoader::CompleteResponseStarted() { |
FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnResponseStarted()")); |
bool defer = false; |
- if (!handler_->OnResponseStarted(response.get(), &defer)) { |
+ if (!handler_->OnResponseStarted(response_.get(), &defer)) { |
Cancel(); |
} else if (defer) { |
read_deferral_start_time_ = base::TimeTicks::Now(); |