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 |