Chromium Code Reviews| Index: content/browser/loader/resource_loader.cc |
| diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc |
| index 586f22247aeb33c99972112a74ff720050f10930..f0dbcf3ff32ad282f5bdd6b62e04bec09128d0fb 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" |
| @@ -200,10 +199,11 @@ 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"; |
| is_transferring_ = true; |
| + on_transfer_complete_callback_ = on_transfer_complete_callback; |
| int child_id = GetRequestInfo()->GetChildID(); |
| AppCacheInterceptor::PrepareForCrossSiteTransfer(request(), child_id); |
| @@ -214,13 +214,14 @@ 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(!on_transfer_complete_callback_.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 |
| @@ -234,7 +235,8 @@ void ResourceLoader::CompleteTransfer() { |
| handler->MaybeCompleteCrossSiteTransferInOldProcess(child_id); |
| is_transferring_ = false; |
| - GetRequestInfo()->cross_site_handler()->ResumeResponse(); |
| + on_transfer_complete_callback_.Run(); |
| + on_transfer_complete_callback_.Reset(); |
|
mmenke
2016/09/21 17:10:24
Suggest base::ResetAndReturn(on_transfer_complete_
clamy
2016/09/26 12:20:32
Done.
|
| } |
| ResourceRequestInfoImpl* ResourceLoader::GetRequestInfo() { |