Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: content/browser/loader/navigation_url_loader_network_service.cc

Issue 2906163002: [network service][SW] Rework browser-side SW on top of URL loader chaining (Closed)
Patch Set: fixes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_controllee_request_handler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_controllee_request_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698