| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 #include "content/browser/loader/navigation_url_loader_network_service.h" | 5 #include "content/browser/loader/navigation_url_loader_network_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 78 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void Start( | 81 void Start( |
| 82 ServiceWorkerNavigationHandleCore* service_worker_navigation_handle_core, | 82 ServiceWorkerNavigationHandleCore* service_worker_navigation_handle_core, |
| 83 AppCacheNavigationHandleCore* appcache_handle_core, | 83 AppCacheNavigationHandleCore* appcache_handle_core, |
| 84 std::unique_ptr<NavigationRequestInfo> request_info, | 84 std::unique_ptr<NavigationRequestInfo> request_info, |
| 85 mojom::URLLoaderFactoryPtrInfo factory_for_webui, | 85 mojom::URLLoaderFactoryPtrInfo factory_for_webui, |
| 86 const base::Callback<WebContents*(void)>& web_contents_getter, | 86 const base::Callback<WebContents*(void)>& web_contents_getter, |
| 87 mojom::URLLoaderAssociatedRequest url_loader_request, | 87 mojom::URLLoaderAssociatedRequest url_loader_request, |
| 88 mojom::URLLoaderClientPtr url_loader_client_ptr, | 88 mojom::URLLoaderClientPtrInfo url_loader_client_ptr_info, |
| 89 std::unique_ptr<service_manager::Connector> connector) { | 89 std::unique_ptr<service_manager::Connector> connector) { |
| 90 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 90 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 91 url_loader_client_ptr_.Bind(std::move(url_loader_client_ptr_info)); |
| 91 const ResourceType resource_type = request_info->is_main_frame | 92 const ResourceType resource_type = request_info->is_main_frame |
| 92 ? RESOURCE_TYPE_MAIN_FRAME | 93 ? RESOURCE_TYPE_MAIN_FRAME |
| 93 : RESOURCE_TYPE_SUB_FRAME; | 94 : RESOURCE_TYPE_SUB_FRAME; |
| 94 | 95 |
| 95 if (resource_request_->request_body) { | 96 if (resource_request_->request_body) { |
| 96 AttachRequestBodyBlobDataHandles(resource_request_->request_body.get(), | 97 AttachRequestBodyBlobDataHandles(resource_request_->request_body.get(), |
| 97 resource_context_); | 98 resource_context_); |
| 98 } | 99 } |
| 99 | 100 |
| 100 // Requests to WebUI scheme won't get redirected to/from other schemes | 101 // Requests to WebUI scheme won't get redirected to/from other schemes |
| 101 // or be intercepted, so we just let it go here. | 102 // or be intercepted, so we just let it go here. |
| 102 if (factory_for_webui.is_valid()) { | 103 if (factory_for_webui.is_valid()) { |
| 103 mojom::URLLoaderFactoryPtr factory_ptr; | 104 mojom::URLLoaderFactoryPtr factory_ptr; |
| 104 factory_ptr.Bind(std::move(factory_for_webui)); | 105 factory_ptr.Bind(std::move(factory_for_webui)); |
| 105 factory_ptr->CreateLoaderAndStart( | 106 factory_ptr->CreateLoaderAndStart( |
| 106 std::move(url_loader_request), 0 /* routing_id? */, | 107 std::move(url_loader_request), 0 /* routing_id? */, |
| 107 0 /* request_id? */, mojom::kURLLoadOptionSendSSLInfo, | 108 0 /* request_id? */, mojom::kURLLoadOptionSendSSLInfo, |
| 108 *resource_request_, std::move(url_loader_client_ptr)); | 109 *resource_request_, std::move(url_loader_client_ptr_)); |
| 109 return; | 110 return; |
| 110 } | 111 } |
| 111 | 112 |
| 112 DCHECK(handlers_.empty()); | 113 DCHECK(handlers_.empty()); |
| 113 if (service_worker_navigation_handle_core) { | 114 if (service_worker_navigation_handle_core) { |
| 114 RequestContextFrameType frame_type = | 115 RequestContextFrameType frame_type = |
| 115 request_info->is_main_frame ? REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL | 116 request_info->is_main_frame ? REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL |
| 116 : REQUEST_CONTEXT_FRAME_TYPE_NESTED; | 117 : REQUEST_CONTEXT_FRAME_TYPE_NESTED; |
| 117 | 118 |
| 118 storage::BlobStorageContext* blob_storage_context = GetBlobStorageContext( | 119 storage::BlobStorageContext* blob_storage_context = GetBlobStorageContext( |
| 119 GetChromeBlobStorageContextForResourceContext(resource_context_)); | 120 GetChromeBlobStorageContextForResourceContext(resource_context_)); |
| 120 std::unique_ptr<URLLoaderRequestHandler> service_worker_handler = | 121 std::unique_ptr<URLLoaderRequestHandler> service_worker_handler = |
| 121 ServiceWorkerRequestHandler::InitializeForNavigationNetworkService( | 122 ServiceWorkerRequestHandler::InitializeForNavigationNetworkService( |
| 122 *resource_request_, resource_context_, | 123 *resource_request_, resource_context_, |
| 123 service_worker_navigation_handle_core, blob_storage_context, | 124 service_worker_navigation_handle_core, blob_storage_context, |
| 124 request_info->begin_params.skip_service_worker, resource_type, | 125 request_info->begin_params.skip_service_worker, resource_type, |
| 125 request_info->begin_params.request_context_type, frame_type, | 126 request_info->begin_params.request_context_type, frame_type, |
| 126 request_info->are_ancestors_secure, | 127 request_info->are_ancestors_secure, |
| 127 request_info->common_params.post_data, web_contents_getter); | 128 request_info->common_params.post_data, web_contents_getter); |
| 128 if (service_worker_handler) | 129 if (service_worker_handler) |
| 129 handlers_.push_back(std::move(service_worker_handler)); | 130 handlers_.push_back(std::move(service_worker_handler)); |
| 130 } | 131 } |
| 131 | 132 |
| 132 if (appcache_handle_core) { | 133 if (appcache_handle_core) { |
| 133 // TODO: add appcache code here. | 134 // TODO: add appcache code here. |
| 134 } | 135 } |
| 135 | 136 |
| 136 Restart(std::move(url_loader_request), std::move(url_loader_client_ptr)); | 137 Restart(std::move(url_loader_request), std::move(url_loader_client_ptr_)); |
| 137 } | 138 } |
| 138 | 139 |
| 139 // This could be called multiple times. | 140 // This could be called multiple times. |
| 140 void Restart(mojom::URLLoaderAssociatedRequest url_loader_request, | 141 void Restart(mojom::URLLoaderAssociatedRequest url_loader_request, |
| 141 mojom::URLLoaderClientPtr url_loader_client_ptr) { | 142 mojom::URLLoaderClientPtr url_loader_client_ptr) { |
| 142 url_loader_request_ = std::move(url_loader_request); | 143 url_loader_request_ = std::move(url_loader_request); |
| 143 url_loader_client_ptr_ = std::move(url_loader_client_ptr); | 144 url_loader_client_ptr_ = std::move(url_loader_client_ptr); |
| 144 handler_index_ = 0; | 145 handler_index_ = 0; |
| 145 MaybeStartLoader(nullptr); | 146 MaybeStartLoader(nullptr); |
| 146 } | 147 } |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 &URLLoaderRequestController::Start, | 266 &URLLoaderRequestController::Start, |
| 266 base::Unretained(request_controller_.get()), | 267 base::Unretained(request_controller_.get()), |
| 267 service_worker_navigation_handle | 268 service_worker_navigation_handle |
| 268 ? service_worker_navigation_handle->core() | 269 ? service_worker_navigation_handle->core() |
| 269 : nullptr, | 270 : nullptr, |
| 270 appcache_handle ? appcache_handle->core() : nullptr, | 271 appcache_handle ? appcache_handle->core() : nullptr, |
| 271 base::Passed(std::move(request_info)), | 272 base::Passed(std::move(request_info)), |
| 272 base::Passed(std::move(factory_for_webui)), | 273 base::Passed(std::move(factory_for_webui)), |
| 273 base::Bind(&GetWebContentsFromFrameTreeNodeID, frame_tree_node_id), | 274 base::Bind(&GetWebContentsFromFrameTreeNodeID, frame_tree_node_id), |
| 274 base::Passed(std::move(loader_associated_request)), | 275 base::Passed(std::move(loader_associated_request)), |
| 275 base::Passed(std::move(url_loader_client_ptr_to_pass)), | 276 base::Passed(url_loader_client_ptr_to_pass.PassInterface()), |
| 276 base::Passed(ServiceManagerConnection::GetForProcess() | 277 base::Passed(ServiceManagerConnection::GetForProcess() |
| 277 ->GetConnector() | 278 ->GetConnector() |
| 278 ->Clone()))); | 279 ->Clone()))); |
| 279 } | 280 } |
| 280 | 281 |
| 281 NavigationURLLoaderNetworkService::~NavigationURLLoaderNetworkService() { | 282 NavigationURLLoaderNetworkService::~NavigationURLLoaderNetworkService() { |
| 282 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, | 283 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, |
| 283 request_controller_.release()); | 284 request_controller_.release()); |
| 284 } | 285 } |
| 285 | 286 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted", | 352 TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted", |
| 352 this, "&NavigationURLLoaderNetworkService", this, | 353 this, "&NavigationURLLoaderNetworkService", this, |
| 353 "success", false); | 354 "success", false); |
| 354 | 355 |
| 355 delegate_->OnRequestFailed(completion_status.exists_in_cache, | 356 delegate_->OnRequestFailed(completion_status.exists_in_cache, |
| 356 completion_status.error_code); | 357 completion_status.error_code); |
| 357 } | 358 } |
| 358 } | 359 } |
| 359 | 360 |
| 360 } // namespace content | 361 } // namespace content |
| OLD | NEW |