Index: content/browser/loader/resource_dispatcher_host_impl.cc |
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc |
index b5a1c6165dff20c8a643695e0370c617d0a8bf68..0bfe5f214407992fe2eb01b042521c7eecca5fab 100644 |
--- a/content/browser/loader/resource_dispatcher_host_impl.cc |
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc |
@@ -39,7 +39,6 @@ |
#include "content/browser/appcache/appcache_navigation_handle_core.h" |
#include "content/browser/appcache/chrome_appcache_service.h" |
#include "content/browser/bad_message.h" |
-#include "content/browser/blob_storage/chrome_blob_storage_context.h" |
#include "content/browser/browsing_data/clear_site_data_throttle.h" |
#include "content/browser/child_process_security_policy_impl.h" |
#include "content/browser/frame_host/navigation_request_info.h" |
@@ -1159,6 +1158,7 @@ void ResourceDispatcherHostImpl::BeginRequest( |
return; |
} |
+ BlobHandles blob_handles; |
if (!is_navigation_stream_request) { |
storage::BlobStorageContext* blob_context = |
GetBlobStorageContext(requester_info->blob_storage_context()); |
@@ -1168,12 +1168,11 @@ void ResourceDispatcherHostImpl::BeginRequest( |
// because ResourceMessageFilters created in PluginProcessHost don't have |
// the blob context. |
if (blob_context) { |
- // Attaches the BlobDataHandles to request_body not to free the blobs |
- // and any attached shareable files until upload completion. These data |
+ // Get BlobHandles to request_body to prevent blobs and any attached |
+ // shareable files from being freed until upload completion. These data |
// will be used in UploadDataStream and ServiceWorkerURLRequestJob. |
- bool blobs_alive = AttachRequestBodyBlobDataHandles( |
- request_data.request_body.get(), resource_context); |
- if (!blobs_alive) { |
+ if (!GetBodyBlobDataHandles(request_data.request_body.get(), |
+ resource_context, &blob_handles)) { |
AbortRequestBeforeItStarts(requester_info->filter(), |
sync_result_handler, request_id, |
std::move(url_loader_client)); |
@@ -1206,7 +1205,8 @@ void ResourceDispatcherHostImpl::BeginRequest( |
base::Unretained(this), make_scoped_refptr(requester_info), |
request_id, request_data, sync_result_handler, route_id, |
headers, base::Passed(std::move(mojo_request)), |
- base::Passed(std::move(url_loader_client)))); |
+ base::Passed(std::move(url_loader_client)), |
+ base::Passed(std::move(blob_handles)))); |
return; |
} |
} |
@@ -1215,7 +1215,7 @@ void ResourceDispatcherHostImpl::BeginRequest( |
ContinuePendingBeginRequest( |
requester_info, request_id, request_data, sync_result_handler, route_id, |
headers, std::move(mojo_request), std::move(url_loader_client), |
- HeaderInterceptorResult::CONTINUE); |
+ std::move(blob_handles), HeaderInterceptorResult::CONTINUE); |
} |
void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( |
@@ -1227,6 +1227,7 @@ void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( |
const net::HttpRequestHeaders& headers, |
mojom::URLLoaderAssociatedRequest mojo_request, |
mojom::URLLoaderClientPtr url_loader_client, |
+ BlobHandles blob_handles, |
HeaderInterceptorResult interceptor_result) { |
DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
if (interceptor_result != HeaderInterceptorResult::CONTINUE) { |
@@ -1407,6 +1408,7 @@ void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( |
resource_context, |
request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME), |
request_data.request_body, request_data.initiated_in_secure_context); |
+ extra_info->SetBlobHandles(std::move(blob_handles)); |
// Request takes ownership. |
extra_info->AssociateWithRequest(new_request.get()); |
@@ -2115,9 +2117,9 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest( |
// Resolve elements from request_body and prepare upload data. |
ResourceRequestBodyImpl* body = info.common_params.post_data.get(); |
+ BlobHandles blob_handles; |
if (body) { |
- bool blobs_alive = AttachRequestBodyBlobDataHandles(body, resource_context); |
- if (!blobs_alive) { |
+ if (!GetBodyBlobDataHandles(body, resource_context, &blob_handles)) { |
new_request->CancelWithError(net::ERR_INSUFFICIENT_RESOURCES); |
loader->NotifyRequestFailed(false, net::ERR_ABORTED); |
return; |
@@ -2163,6 +2165,7 @@ void ResourceDispatcherHostImpl::BeginNavigationRequest( |
// If in the future this changes this should be updated to somehow get a |
// meaningful value. |
false); // initiated_in_secure_context |
+ extra_info->SetBlobHandles(std::move(blob_handles)); |
extra_info->set_navigation_ui_data(std::move(navigation_ui_data)); |
// Request takes ownership. |