| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading | 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc
e-loading |
| 6 | 6 |
| 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 7 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 8 | 8 |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 | 10 |
| (...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 878 const ResourceRequest& request_data) { | 878 const ResourceRequest& request_data) { |
| 879 OnRequestResourceInternal(requester_info, routing_id, request_id, | 879 OnRequestResourceInternal(requester_info, routing_id, request_id, |
| 880 request_data, nullptr, nullptr); | 880 request_data, nullptr, nullptr); |
| 881 } | 881 } |
| 882 | 882 |
| 883 void ResourceDispatcherHostImpl::OnRequestResourceInternal( | 883 void ResourceDispatcherHostImpl::OnRequestResourceInternal( |
| 884 ResourceRequesterInfo* requester_info, | 884 ResourceRequesterInfo* requester_info, |
| 885 int routing_id, | 885 int routing_id, |
| 886 int request_id, | 886 int request_id, |
| 887 const ResourceRequest& request_data, | 887 const ResourceRequest& request_data, |
| 888 mojom::URLLoaderAssociatedRequest mojo_request, | 888 mojom::URLLoaderRequest mojo_request, |
| 889 mojom::URLLoaderClientPtr url_loader_client) { | 889 mojom::URLLoaderClientPtr url_loader_client) { |
| 890 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); | 890 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
| 891 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. | 891 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. |
| 892 tracked_objects::ScopedTracker tracking_profile( | 892 tracked_objects::ScopedTracker tracking_profile( |
| 893 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 893 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 894 "477117 ResourceDispatcherHostImpl::OnRequestResource")); | 894 "477117 ResourceDispatcherHostImpl::OnRequestResource")); |
| 895 // When logging time-to-network only care about main frame and non-transfer | 895 // When logging time-to-network only care about main frame and non-transfer |
| 896 // navigations. | 896 // navigations. |
| 897 // PlzNavigate: this log happens from NavigationRequest::OnRequestStarted | 897 // PlzNavigate: this log happens from NavigationRequest::OnRequestStarted |
| 898 // instead. | 898 // instead. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 } | 942 } |
| 943 return false; | 943 return false; |
| 944 } | 944 } |
| 945 | 945 |
| 946 void ResourceDispatcherHostImpl::UpdateRequestForTransfer( | 946 void ResourceDispatcherHostImpl::UpdateRequestForTransfer( |
| 947 ResourceRequesterInfo* requester_info, | 947 ResourceRequesterInfo* requester_info, |
| 948 int route_id, | 948 int route_id, |
| 949 int request_id, | 949 int request_id, |
| 950 const ResourceRequest& request_data, | 950 const ResourceRequest& request_data, |
| 951 LoaderMap::iterator iter, | 951 LoaderMap::iterator iter, |
| 952 mojom::URLLoaderAssociatedRequest mojo_request, | 952 mojom::URLLoaderRequest mojo_request, |
| 953 mojom::URLLoaderClientPtr url_loader_client) { | 953 mojom::URLLoaderClientPtr url_loader_client) { |
| 954 DCHECK(requester_info->IsRenderer()); | 954 DCHECK(requester_info->IsRenderer()); |
| 955 int child_id = requester_info->child_id(); | 955 int child_id = requester_info->child_id(); |
| 956 ResourceRequestInfoImpl* info = iter->second->GetRequestInfo(); | 956 ResourceRequestInfoImpl* info = iter->second->GetRequestInfo(); |
| 957 GlobalFrameRoutingId old_routing_id(request_data.transferred_request_child_id, | 957 GlobalFrameRoutingId old_routing_id(request_data.transferred_request_child_id, |
| 958 info->GetRenderFrameID()); | 958 info->GetRenderFrameID()); |
| 959 GlobalRequestID old_request_id(request_data.transferred_request_child_id, | 959 GlobalRequestID old_request_id(request_data.transferred_request_child_id, |
| 960 request_data.transferred_request_request_id); | 960 request_data.transferred_request_request_id); |
| 961 GlobalFrameRoutingId new_routing_id(child_id, request_data.render_frame_id); | 961 GlobalFrameRoutingId new_routing_id(child_id, request_data.render_frame_id); |
| 962 GlobalRequestID new_request_id(child_id, request_id); | 962 GlobalRequestID new_request_id(child_id, request_id); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1025 child_id, request_data.service_worker_provider_id); | 1025 child_id, request_data.service_worker_provider_id); |
| 1026 } | 1026 } |
| 1027 } | 1027 } |
| 1028 } | 1028 } |
| 1029 | 1029 |
| 1030 void ResourceDispatcherHostImpl::CompleteTransfer( | 1030 void ResourceDispatcherHostImpl::CompleteTransfer( |
| 1031 ResourceRequesterInfo* requester_info, | 1031 ResourceRequesterInfo* requester_info, |
| 1032 int request_id, | 1032 int request_id, |
| 1033 const ResourceRequest& request_data, | 1033 const ResourceRequest& request_data, |
| 1034 int route_id, | 1034 int route_id, |
| 1035 mojom::URLLoaderAssociatedRequest mojo_request, | 1035 mojom::URLLoaderRequest mojo_request, |
| 1036 mojom::URLLoaderClientPtr url_loader_client) { | 1036 mojom::URLLoaderClientPtr url_loader_client) { |
| 1037 DCHECK(requester_info->IsRenderer()); | 1037 DCHECK(requester_info->IsRenderer()); |
| 1038 // Caller should ensure that |request_data| is associated with a transfer. | 1038 // Caller should ensure that |request_data| is associated with a transfer. |
| 1039 DCHECK(request_data.transferred_request_child_id != -1 || | 1039 DCHECK(request_data.transferred_request_child_id != -1 || |
| 1040 request_data.transferred_request_request_id != -1); | 1040 request_data.transferred_request_request_id != -1); |
| 1041 | 1041 |
| 1042 if (!IsResourceTypeFrame(request_data.resource_type)) { | 1042 if (!IsResourceTypeFrame(request_data.resource_type)) { |
| 1043 // Transfers apply only to navigational requests - the renderer seems to | 1043 // Transfers apply only to navigational requests - the renderer seems to |
| 1044 // have sent bogus IPC data. | 1044 // have sent bogus IPC data. |
| 1045 bad_message::ReceivedBadMessage( | 1045 bad_message::ReceivedBadMessage( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1080 std::move(url_loader_client)); | 1080 std::move(url_loader_client)); |
| 1081 pending_loader->CompleteTransfer(); | 1081 pending_loader->CompleteTransfer(); |
| 1082 } | 1082 } |
| 1083 | 1083 |
| 1084 void ResourceDispatcherHostImpl::BeginRequest( | 1084 void ResourceDispatcherHostImpl::BeginRequest( |
| 1085 ResourceRequesterInfo* requester_info, | 1085 ResourceRequesterInfo* requester_info, |
| 1086 int request_id, | 1086 int request_id, |
| 1087 const ResourceRequest& request_data, | 1087 const ResourceRequest& request_data, |
| 1088 const SyncLoadResultCallback& sync_result_handler, // only valid for sync | 1088 const SyncLoadResultCallback& sync_result_handler, // only valid for sync |
| 1089 int route_id, | 1089 int route_id, |
| 1090 mojom::URLLoaderAssociatedRequest mojo_request, | 1090 mojom::URLLoaderRequest mojo_request, |
| 1091 mojom::URLLoaderClientPtr url_loader_client) { | 1091 mojom::URLLoaderClientPtr url_loader_client) { |
| 1092 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); | 1092 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
| 1093 int child_id = requester_info->child_id(); | 1093 int child_id = requester_info->child_id(); |
| 1094 | 1094 |
| 1095 // Reject request id that's currently in use. | 1095 // Reject request id that's currently in use. |
| 1096 if (IsRequestIDInUse(GlobalRequestID(child_id, request_id))) { | 1096 if (IsRequestIDInUse(GlobalRequestID(child_id, request_id))) { |
| 1097 // Navigation preload requests have child_id's of -1 and monotonically | 1097 // Navigation preload requests have child_id's of -1 and monotonically |
| 1098 // increasing request IDs allocated by MakeRequestID. | 1098 // increasing request IDs allocated by MakeRequestID. |
| 1099 DCHECK(requester_info->IsRenderer()); | 1099 DCHECK(requester_info->IsRenderer()); |
| 1100 bad_message::ReceivedBadMessage(requester_info->filter(), | 1100 bad_message::ReceivedBadMessage(requester_info->filter(), |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1218 HeaderInterceptorResult::CONTINUE); | 1218 HeaderInterceptorResult::CONTINUE); |
| 1219 } | 1219 } |
| 1220 | 1220 |
| 1221 void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( | 1221 void ResourceDispatcherHostImpl::ContinuePendingBeginRequest( |
| 1222 scoped_refptr<ResourceRequesterInfo> requester_info, | 1222 scoped_refptr<ResourceRequesterInfo> requester_info, |
| 1223 int request_id, | 1223 int request_id, |
| 1224 const ResourceRequest& request_data, | 1224 const ResourceRequest& request_data, |
| 1225 const SyncLoadResultCallback& sync_result_handler, // only valid for sync | 1225 const SyncLoadResultCallback& sync_result_handler, // only valid for sync |
| 1226 int route_id, | 1226 int route_id, |
| 1227 const net::HttpRequestHeaders& headers, | 1227 const net::HttpRequestHeaders& headers, |
| 1228 mojom::URLLoaderAssociatedRequest mojo_request, | 1228 mojom::URLLoaderRequest mojo_request, |
| 1229 mojom::URLLoaderClientPtr url_loader_client, | 1229 mojom::URLLoaderClientPtr url_loader_client, |
| 1230 HeaderInterceptorResult interceptor_result) { | 1230 HeaderInterceptorResult interceptor_result) { |
| 1231 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); | 1231 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
| 1232 if (interceptor_result != HeaderInterceptorResult::CONTINUE) { | 1232 if (interceptor_result != HeaderInterceptorResult::CONTINUE) { |
| 1233 if (requester_info->IsRenderer() && | 1233 if (requester_info->IsRenderer() && |
| 1234 interceptor_result == HeaderInterceptorResult::KILL) { | 1234 interceptor_result == HeaderInterceptorResult::KILL) { |
| 1235 // TODO(ananta): Find a way to specify the right error code here. Passing | 1235 // TODO(ananta): Find a way to specify the right error code here. Passing |
| 1236 // in a non-content error code is not safe, but future header interceptors | 1236 // in a non-content error code is not safe, but future header interceptors |
| 1237 // might say to kill for reasons other than illegal origins. | 1237 // might say to kill for reasons other than illegal origins. |
| 1238 bad_message::ReceivedBadMessage(requester_info->filter(), | 1238 bad_message::ReceivedBadMessage(requester_info->filter(), |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1467 | 1467 |
| 1468 std::unique_ptr<ResourceHandler> | 1468 std::unique_ptr<ResourceHandler> |
| 1469 ResourceDispatcherHostImpl::CreateResourceHandler( | 1469 ResourceDispatcherHostImpl::CreateResourceHandler( |
| 1470 ResourceRequesterInfo* requester_info, | 1470 ResourceRequesterInfo* requester_info, |
| 1471 net::URLRequest* request, | 1471 net::URLRequest* request, |
| 1472 const ResourceRequest& request_data, | 1472 const ResourceRequest& request_data, |
| 1473 const SyncLoadResultCallback& sync_result_handler, | 1473 const SyncLoadResultCallback& sync_result_handler, |
| 1474 int route_id, | 1474 int route_id, |
| 1475 int child_id, | 1475 int child_id, |
| 1476 ResourceContext* resource_context, | 1476 ResourceContext* resource_context, |
| 1477 mojom::URLLoaderAssociatedRequest mojo_request, | 1477 mojom::URLLoaderRequest mojo_request, |
| 1478 mojom::URLLoaderClientPtr url_loader_client) { | 1478 mojom::URLLoaderClientPtr url_loader_client) { |
| 1479 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); | 1479 DCHECK(requester_info->IsRenderer() || requester_info->IsNavigationPreload()); |
| 1480 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456331 is fixed. | 1480 // TODO(pkasting): Remove ScopedTracker below once crbug.com/456331 is fixed. |
| 1481 tracked_objects::ScopedTracker tracking_profile( | 1481 tracked_objects::ScopedTracker tracking_profile( |
| 1482 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 1482 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 1483 "456331 ResourceDispatcherHostImpl::CreateResourceHandler")); | 1483 "456331 ResourceDispatcherHostImpl::CreateResourceHandler")); |
| 1484 // Construct the IPC resource handler. | 1484 // Construct the IPC resource handler. |
| 1485 std::unique_ptr<ResourceHandler> handler; | 1485 std::unique_ptr<ResourceHandler> handler; |
| 1486 if (sync_result_handler) { | 1486 if (sync_result_handler) { |
| 1487 // download_to_file is not supported for synchronous requests. | 1487 // download_to_file is not supported for synchronous requests. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1535 resource_context, | 1535 resource_context, |
| 1536 request_data.fetch_request_context_type, | 1536 request_data.fetch_request_context_type, |
| 1537 request_data.fetch_mixed_content_context_type, | 1537 request_data.fetch_mixed_content_context_type, |
| 1538 requester_info->appcache_service(), child_id, | 1538 requester_info->appcache_service(), child_id, |
| 1539 route_id, std::move(handler), nullptr, nullptr); | 1539 route_id, std::move(handler), nullptr, nullptr); |
| 1540 } | 1540 } |
| 1541 | 1541 |
| 1542 std::unique_ptr<ResourceHandler> | 1542 std::unique_ptr<ResourceHandler> |
| 1543 ResourceDispatcherHostImpl::CreateBaseResourceHandler( | 1543 ResourceDispatcherHostImpl::CreateBaseResourceHandler( |
| 1544 net::URLRequest* request, | 1544 net::URLRequest* request, |
| 1545 mojom::URLLoaderAssociatedRequest mojo_request, | 1545 mojom::URLLoaderRequest mojo_request, |
| 1546 mojom::URLLoaderClientPtr url_loader_client, | 1546 mojom::URLLoaderClientPtr url_loader_client, |
| 1547 ResourceType resource_type) { | 1547 ResourceType resource_type) { |
| 1548 std::unique_ptr<ResourceHandler> handler; | 1548 std::unique_ptr<ResourceHandler> handler; |
| 1549 if (mojo_request.is_pending()) { | 1549 if (mojo_request.is_pending()) { |
| 1550 handler.reset(new MojoAsyncResourceHandler( | 1550 handler.reset(new MojoAsyncResourceHandler( |
| 1551 request, this, std::move(mojo_request), std::move(url_loader_client), | 1551 request, this, std::move(mojo_request), std::move(url_loader_client), |
| 1552 resource_type)); | 1552 resource_type)); |
| 1553 } else { | 1553 } else { |
| 1554 handler.reset(new AsyncResourceHandler(request, this)); | 1554 handler.reset(new AsyncResourceHandler(request, this)); |
| 1555 } | 1555 } |
| (...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2229 void ResourceDispatcherHostImpl::OnRenderFrameDeleted( | 2229 void ResourceDispatcherHostImpl::OnRenderFrameDeleted( |
| 2230 const GlobalFrameRoutingId& global_routing_id) { | 2230 const GlobalFrameRoutingId& global_routing_id) { |
| 2231 CancelRequestsForRoute(global_routing_id); | 2231 CancelRequestsForRoute(global_routing_id); |
| 2232 } | 2232 } |
| 2233 | 2233 |
| 2234 void ResourceDispatcherHostImpl::OnRequestResourceWithMojo( | 2234 void ResourceDispatcherHostImpl::OnRequestResourceWithMojo( |
| 2235 ResourceRequesterInfo* requester_info, | 2235 ResourceRequesterInfo* requester_info, |
| 2236 int routing_id, | 2236 int routing_id, |
| 2237 int request_id, | 2237 int request_id, |
| 2238 const ResourceRequest& request, | 2238 const ResourceRequest& request, |
| 2239 mojom::URLLoaderAssociatedRequest mojo_request, | 2239 mojom::URLLoaderRequest mojo_request, |
| 2240 mojom::URLLoaderClientPtr url_loader_client) { | 2240 mojom::URLLoaderClientPtr url_loader_client) { |
| 2241 OnRequestResourceInternal(requester_info, routing_id, request_id, request, | 2241 OnRequestResourceInternal(requester_info, routing_id, request_id, request, |
| 2242 std::move(mojo_request), | 2242 std::move(mojo_request), |
| 2243 std::move(url_loader_client)); | 2243 std::move(url_loader_client)); |
| 2244 } | 2244 } |
| 2245 | 2245 |
| 2246 void ResourceDispatcherHostImpl::OnSyncLoadWithMojo( | 2246 void ResourceDispatcherHostImpl::OnSyncLoadWithMojo( |
| 2247 ResourceRequesterInfo* requester_info, | 2247 ResourceRequesterInfo* requester_info, |
| 2248 int routing_id, | 2248 int routing_id, |
| 2249 int request_id, | 2249 int request_id, |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2778 if (iter->second > 2) { | 2778 if (iter->second > 2) { |
| 2779 active_tabs++; | 2779 active_tabs++; |
| 2780 if (active_tabs >= 2) | 2780 if (active_tabs >= 2) |
| 2781 return true; | 2781 return true; |
| 2782 } | 2782 } |
| 2783 } | 2783 } |
| 2784 return false; | 2784 return false; |
| 2785 } | 2785 } |
| 2786 | 2786 |
| 2787 } // namespace content | 2787 } // namespace content |
| OLD | NEW |