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 fad7d214783f44ff611a9918f0859c664bbd2166..1a7220929303bb685eb8fe3a39ecb2b98369c062 100644 |
--- a/content/browser/loader/resource_dispatcher_host_impl.cc |
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc |
@@ -1067,7 +1067,7 @@ void ResourceDispatcherHostImpl::OnRequestResourceInternal( |
const ResourceRequest& request_data, |
mojom::URLLoaderAssociatedRequest mojo_request, |
mojom::URLLoaderClientAssociatedPtr url_loader_client) { |
- DCHECK(requester_info->IsRenderer()); |
+ DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
// TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. |
tracked_objects::ScopedTracker tracking_profile( |
FROM_HERE_WITH_EXPLICIT_FUNCTION( |
@@ -1273,11 +1273,14 @@ void ResourceDispatcherHostImpl::BeginRequest( |
int route_id, |
mojom::URLLoaderAssociatedRequest mojo_request, |
mojom::URLLoaderClientAssociatedPtr url_loader_client) { |
- DCHECK(requester_info->IsRenderer()); |
+ DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
int child_id = requester_info->child_id(); |
// Reject request id that's currently in use. |
if (IsRequestIDInUse(GlobalRequestID(child_id, request_id))) { |
+ // Navigation preload requests have child_id's of -1 and monotonically |
+ // increasing request IDs allocated by MakeRequestID. |
+ DCHECK(requester_info->IsRenderer()); |
bad_message::ReceivedBadMessage(requester_info->filter(), |
bad_message::RDH_INVALID_REQUEST_ID); |
return; |
@@ -1289,6 +1292,8 @@ void ResourceDispatcherHostImpl::BeginRequest( |
IsResourceTypeFrame(request_data.resource_type); |
if (is_navigation_stream_request && |
!request_data.resource_body_stream_url.SchemeIs(url::kBlobScheme)) { |
+ // The resource_type of navigation preload requests must be SUB_RESOURCE. |
+ DCHECK(requester_info->IsRenderer()); |
bad_message::ReceivedBadMessage(requester_info->filter(), |
bad_message::RDH_INVALID_URL); |
return; |
@@ -1297,6 +1302,9 @@ void ResourceDispatcherHostImpl::BeginRequest( |
// Reject invalid priority. |
if (request_data.priority < net::MINIMUM_PRIORITY || |
request_data.priority > net::MAXIMUM_PRIORITY) { |
+ // The priority of navigation preload requests are copied from the original |
+ // request priority which must be checked beforehand. |
+ DCHECK(requester_info->IsRenderer()); |
bad_message::ReceivedBadMessage(requester_info->filter(), |
bad_message::RDH_INVALID_PRIORITY); |
return; |
@@ -1378,12 +1386,14 @@ void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( |
mojom::URLLoaderClientAssociatedPtr url_loader_client, |
bool continue_request, |
int error_code) { |
- DCHECK(requester_info->IsRenderer()); |
+ DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
if (!continue_request) { |
- // TODO(ananta): Find a way to specify the right error code here. Passing |
- // in a non-content error code is not safe. |
- bad_message::ReceivedBadMessage(requester_info->filter(), |
- bad_message::RDH_ILLEGAL_ORIGIN); |
+ if (requester_info->IsRenderer()) { |
+ // TODO(ananta): Find a way to specify the right error code here. Passing |
+ // in a non-content error code is not safe. |
+ bad_message::ReceivedBadMessage(requester_info->filter(), |
+ bad_message::RDH_ILLEGAL_ORIGIN); |
+ } |
AbortRequestBeforeItStarts(requester_info->filter(), sync_result_handler, |
request_id, std::move(url_loader_client)); |
return; |
@@ -1613,7 +1623,7 @@ ResourceDispatcherHostImpl::CreateResourceHandler( |
ResourceContext* resource_context, |
mojom::URLLoaderAssociatedRequest mojo_request, |
mojom::URLLoaderClientAssociatedPtr url_loader_client) { |
- DCHECK(requester_info->IsRenderer()); |
+ DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
// TODO(pkasting): Remove ScopedTracker below once crbug.com/456331 is fixed. |
tracked_objects::ScopedTracker tracking_profile( |
FROM_HERE_WITH_EXPLICIT_FUNCTION( |
@@ -1623,6 +1633,7 @@ ResourceDispatcherHostImpl::CreateResourceHandler( |
if (sync_result_handler) { |
// download_to_file is not supported for synchronous requests. |
if (request_data.download_to_file) { |
+ DCHECK(requester_info->IsRenderer()); |
bad_message::ReceivedBadMessage(requester_info->filter(), |
bad_message::RDH_BAD_DOWNLOAD); |
return std::unique_ptr<ResourceHandler>(); |