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

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

Issue 2919313004: Get rid of URLLoaderFactory in browser-side case (Closed)
Patch Set: . 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
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 if (!frame_tree_node) 52 if (!frame_tree_node)
53 return nullptr; 53 return nullptr;
54 54
55 return WebContentsImpl::FromFrameTreeNode(frame_tree_node); 55 return WebContentsImpl::FromFrameTreeNode(frame_tree_node);
56 } 56 }
57 57
58 } // namespace 58 } // namespace
59 59
60 // Kept around during the lifetime of the navigation request, and is 60 // Kept around during the lifetime of the navigation request, and is
61 // responsible for dispatching a ResourceRequest to the appropriate 61 // responsible for dispatching a ResourceRequest to the appropriate
62 // URLLoaderFactory. In order to get the right URLLoaderFactory it 62 // URLLoader. In order to get the right URLLoader it builds a vector
63 // builds a vector of URLLoaderRequestHandler's and successively calls 63 // of URLLoaderRequestHandler's and successively calls MaybeCreateLoader
64 // MaybeCreateLoaderFactory on each until the request is successfully 64 // on each until the request is successfully handled. The same sequence
65 // handled. The same sequence may be performed multiple times when 65 // may be performed multiple times when redirects happen.
66 // redirects happen.
67 class NavigationURLLoaderNetworkService::URLLoaderRequestController { 66 class NavigationURLLoaderNetworkService::URLLoaderRequestController {
68 public: 67 public:
69 URLLoaderRequestController( 68 URLLoaderRequestController(
70 std::unique_ptr<ResourceRequest> resource_request, 69 std::unique_ptr<ResourceRequest> resource_request,
71 ResourceContext* resource_context, 70 ResourceContext* resource_context,
72 scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter) 71 scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter)
73 : resource_request_(std::move(resource_request)), 72 : resource_request_(std::move(resource_request)),
74 resource_context_(resource_context), 73 resource_context_(resource_context),
75 url_loader_factory_getter_(url_loader_factory_getter) {} 74 url_loader_factory_getter_(url_loader_factory_getter) {}
76 75
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 134
136 Restart(std::move(url_loader_request), std::move(url_loader_client_ptr)); 135 Restart(std::move(url_loader_request), std::move(url_loader_client_ptr));
137 } 136 }
138 137
139 // This could be called multiple times. 138 // This could be called multiple times.
140 void Restart(mojom::URLLoaderAssociatedRequest url_loader_request, 139 void Restart(mojom::URLLoaderAssociatedRequest url_loader_request,
141 mojom::URLLoaderClientPtr url_loader_client_ptr) { 140 mojom::URLLoaderClientPtr url_loader_client_ptr) {
142 url_loader_request_ = std::move(url_loader_request); 141 url_loader_request_ = std::move(url_loader_request);
143 url_loader_client_ptr_ = std::move(url_loader_client_ptr); 142 url_loader_client_ptr_ = std::move(url_loader_client_ptr);
144 handler_index_ = 0; 143 handler_index_ = 0;
145 MaybeStartLoader(nullptr); 144 MaybeStartLoader(StartLoaderCallback());
146 } 145 }
147 146
148 void MaybeStartLoader(mojom::URLLoaderFactory* factory) { 147 void MaybeStartLoader(StartLoaderCallback start_loader_callback) {
michaeln 2017/06/07 02:28:22 it's turtles all the way down! MaybeCreateLoader
149 DCHECK(url_loader_client_ptr_.is_bound()); 148 DCHECK(url_loader_client_ptr_.is_bound());
150 149
151 if (factory) { 150 if (start_loader_callback) {
152 factory->CreateLoaderAndStart( 151 std::move(start_loader_callback)
153 std::move(url_loader_request_), 0 /* routing_id? */, 152 .Run(std::move(url_loader_request_),
154 0 /* request_id? */, mojom::kURLLoadOptionSendSSLInfo, 153 std::move(url_loader_client_ptr_));
155 *resource_request_, std::move(url_loader_client_ptr_));
156 return; 154 return;
157 } 155 }
158 156
159 if (handler_index_ < handlers_.size()) { 157 if (handler_index_ < handlers_.size()) {
160 handlers_[handler_index_++]->MaybeCreateLoaderFactory( 158 handlers_[handler_index_++]->MaybeCreateLoader(
161 *resource_request_, resource_context_, 159 *resource_request_, resource_context_,
162 base::BindOnce(&URLLoaderRequestController::MaybeStartLoader, 160 base::BindOnce(&URLLoaderRequestController::MaybeStartLoader,
163 base::Unretained(this))); 161 base::Unretained(this)));
164 return; 162 return;
165 } 163 }
166 164
165 mojom::URLLoaderFactory* factory = nullptr;
167 DCHECK_EQ(handlers_.size(), handler_index_); 166 DCHECK_EQ(handlers_.size(), handler_index_);
168 if (resource_request_->url.SchemeIs(url::kBlobScheme)) { 167 if (resource_request_->url.SchemeIs(url::kBlobScheme)) {
169 factory = url_loader_factory_getter_->GetBlobFactory()->get(); 168 factory = url_loader_factory_getter_->GetBlobFactory()->get();
170 } else { 169 } else {
171 factory = url_loader_factory_getter_->GetNetworkFactory()->get(); 170 factory = url_loader_factory_getter_->GetNetworkFactory()->get();
172 } 171 }
173 MaybeStartLoader(factory); 172 factory->CreateLoaderAndStart(
173 std::move(url_loader_request_), 0 /* routing_id? */,
174 0 /* request_id? */, mojom::kURLLoadOptionSendSSLInfo,
175 *resource_request_, std::move(url_loader_client_ptr_));
174 } 176 }
175 177
176 private: 178 private:
177 std::vector<std::unique_ptr<URLLoaderRequestHandler>> handlers_; 179 std::vector<std::unique_ptr<URLLoaderRequestHandler>> handlers_;
178 size_t handler_index_ = 0; 180 size_t handler_index_ = 0;
179 181
180 std::unique_ptr<ResourceRequest> resource_request_; 182 std::unique_ptr<ResourceRequest> resource_request_;
181 ResourceContext* resource_context_; 183 ResourceContext* resource_context_;
182 184
183 scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter_; 185 scoped_refptr<URLLoaderFactoryGetter> url_loader_factory_getter_;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted", 353 TRACE_EVENT_ASYNC_END2("navigation", "Navigation timeToResponseStarted",
352 this, "&NavigationURLLoaderNetworkService", this, 354 this, "&NavigationURLLoaderNetworkService", this,
353 "success", false); 355 "success", false);
354 356
355 delegate_->OnRequestFailed(completion_status.exists_in_cache, 357 delegate_->OnRequestFailed(completion_status.exists_in_cache,
356 completion_status.error_code); 358 completion_status.error_code);
357 } 359 }
358 } 360 }
359 361
360 } // namespace content 362 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698