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

Side by Side Diff: content/common/throttling_url_loader.cc

Issue 2924723002: Network service: SafeBrowsing check for frame-resources from browser. (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/common/throttling_url_loader.h" 5 #include "content/common/throttling_url_loader.h"
6 6
7 #include "base/single_thread_task_runner.h" 7 #include "base/single_thread_task_runner.h"
8 8
9 namespace content { 9 namespace content {
10 10
11 ThrottlingURLLoader::StartInfo::StartInfo( 11 ThrottlingURLLoader::StartInfo::StartInfo(
12 mojom::URLLoaderFactory* in_url_loader_factory, 12 mojom::URLLoaderFactory* in_url_loader_factory,
13 int32_t in_routing_id, 13 int32_t in_routing_id,
14 int32_t in_request_id, 14 int32_t in_request_id,
15 uint32_t in_options, 15 uint32_t in_options,
16 std::unique_ptr<ResourceRequest> in_url_request, 16 StartLoaderCallback in_start_loader_callback,
17 const ResourceRequest& in_url_request,
17 scoped_refptr<base::SingleThreadTaskRunner> in_task_runner) 18 scoped_refptr<base::SingleThreadTaskRunner> in_task_runner)
18 : url_loader_factory(in_url_loader_factory), 19 : url_loader_factory(in_url_loader_factory),
19 routing_id(in_routing_id), 20 routing_id(in_routing_id),
20 request_id(in_request_id), 21 request_id(in_request_id),
21 options(in_options), 22 options(in_options),
22 url_request(std::move(in_url_request)), 23 start_loader_callback(std::move(in_start_loader_callback)),
24 url_request(in_url_request),
23 task_runner(std::move(in_task_runner)) {} 25 task_runner(std::move(in_task_runner)) {}
24 26
25 ThrottlingURLLoader::StartInfo::~StartInfo() = default; 27 ThrottlingURLLoader::StartInfo::~StartInfo() = default;
26 28
27 ThrottlingURLLoader::ResponseInfo::ResponseInfo( 29 ThrottlingURLLoader::ResponseInfo::ResponseInfo(
28 const ResourceResponseHead& in_response_head, 30 const ResourceResponseHead& in_response_head,
29 const base::Optional<net::SSLInfo>& in_ssl_info, 31 const base::Optional<net::SSLInfo>& in_ssl_info,
30 mojom::DownloadedTempFilePtr in_downloaded_file) 32 mojom::DownloadedTempFilePtr in_downloaded_file)
31 : response_head(in_response_head), 33 : response_head(in_response_head),
32 ssl_info(in_ssl_info), 34 ssl_info(in_ssl_info),
(...skipping 15 matching lines...) Expand all
48 50
49 ThrottlingURLLoader::PriorityInfo::~PriorityInfo() = default; 51 ThrottlingURLLoader::PriorityInfo::~PriorityInfo() = default;
50 52
51 // static 53 // static
52 std::unique_ptr<ThrottlingURLLoader> ThrottlingURLLoader::CreateLoaderAndStart( 54 std::unique_ptr<ThrottlingURLLoader> ThrottlingURLLoader::CreateLoaderAndStart(
53 mojom::URLLoaderFactory* factory, 55 mojom::URLLoaderFactory* factory,
54 std::vector<std::unique_ptr<URLLoaderThrottle>> throttles, 56 std::vector<std::unique_ptr<URLLoaderThrottle>> throttles,
55 int32_t routing_id, 57 int32_t routing_id,
56 int32_t request_id, 58 int32_t request_id,
57 uint32_t options, 59 uint32_t options,
58 std::unique_ptr<ResourceRequest> url_request, 60 const ResourceRequest& url_request,
59 mojom::URLLoaderClient* client, 61 mojom::URLLoaderClient* client,
60 scoped_refptr<base::SingleThreadTaskRunner> task_runner) { 62 scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
61 std::unique_ptr<ThrottlingURLLoader> loader( 63 std::unique_ptr<ThrottlingURLLoader> loader(
62 new ThrottlingURLLoader(std::move(throttles), client)); 64 new ThrottlingURLLoader(std::move(throttles), client));
63 loader->Start(factory, routing_id, request_id, options, 65 loader->Start(factory, routing_id, request_id, options, StartLoaderCallback(),
64 std::move(url_request), std::move(task_runner)); 66 url_request, std::move(task_runner));
65 return loader; 67 return loader;
66 } 68 }
67 69
70 // static
71 std::unique_ptr<ThrottlingURLLoader> ThrottlingURLLoader::CreateLoaderAndStart(
72 StartLoaderCallback start_loader_callback,
73 std::vector<std::unique_ptr<URLLoaderThrottle>> throttles,
74 const ResourceRequest& url_request,
75 mojom::URLLoaderClient* client,
76 scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
77 std::unique_ptr<ThrottlingURLLoader> loader(
78 new ThrottlingURLLoader(std::move(throttles), client));
79 loader->Start(nullptr, 0, 0, mojom::kURLLoadOptionNone,
80 std::move(start_loader_callback), url_request,
81 std::move(task_runner));
82 return loader;
83 }
84
68 ThrottlingURLLoader::~ThrottlingURLLoader() {} 85 ThrottlingURLLoader::~ThrottlingURLLoader() {}
69 86
70 void ThrottlingURLLoader::FollowRedirect() { 87 void ThrottlingURLLoader::FollowRedirect() {
71 if (url_loader_) 88 if (url_loader_)
72 url_loader_->FollowRedirect(); 89 url_loader_->FollowRedirect();
73 } 90 }
74 91
75 void ThrottlingURLLoader::SetPriority(net::RequestPriority priority, 92 void ThrottlingURLLoader::SetPriority(net::RequestPriority priority,
76 int32_t intra_priority_value) { 93 int32_t intra_priority_value) {
77 if (!url_loader_ && !cancelled_by_throttle_) { 94 if (!url_loader_ && !cancelled_by_throttle_) {
(...skipping 17 matching lines...) Expand all
95 throttle_ = std::move(throttles[0]); 112 throttle_ = std::move(throttles[0]);
96 throttle_->set_delegate(this); 113 throttle_->set_delegate(this);
97 } 114 }
98 } 115 }
99 116
100 void ThrottlingURLLoader::Start( 117 void ThrottlingURLLoader::Start(
101 mojom::URLLoaderFactory* factory, 118 mojom::URLLoaderFactory* factory,
102 int32_t routing_id, 119 int32_t routing_id,
103 int32_t request_id, 120 int32_t request_id,
104 uint32_t options, 121 uint32_t options,
105 std::unique_ptr<ResourceRequest> url_request, 122 StartLoaderCallback start_loader_callback,
123 const ResourceRequest& url_request,
106 scoped_refptr<base::SingleThreadTaskRunner> task_runner) { 124 scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
107 DCHECK_EQ(DEFERRED_NONE, deferred_stage_); 125 DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
108 DCHECK(!cancelled_by_throttle_); 126 DCHECK(!cancelled_by_throttle_);
109 127
110 if (throttle_) { 128 if (throttle_) {
111 bool deferred = false; 129 bool deferred = false;
112 throttle_->WillStartRequest(url_request->url, url_request->load_flags, 130 throttle_->WillStartRequest(url_request.url, url_request.load_flags,
113 url_request->resource_type, &deferred); 131 url_request.resource_type, &deferred);
114 if (cancelled_by_throttle_) 132 if (cancelled_by_throttle_)
115 return; 133 return;
116 134
117 if (deferred) { 135 if (deferred) {
118 deferred_stage_ = DEFERRED_START; 136 deferred_stage_ = DEFERRED_START;
119 start_info_ = base::MakeUnique<StartInfo>(factory, routing_id, request_id, 137 start_info_ =
120 options, std::move(url_request), 138 base::MakeUnique<StartInfo>(factory, routing_id, request_id, options,
121 std::move(task_runner)); 139 std::move(start_loader_callback),
140 url_request, std::move(task_runner));
122 return; 141 return;
123 } 142 }
124 } 143 }
125 144
145 StartNow(factory, routing_id, request_id, options,
146 std::move(start_loader_callback), url_request,
147 std::move(task_runner));
148 }
149
150 void ThrottlingURLLoader::StartNow(
151 mojom::URLLoaderFactory* factory,
152 int32_t routing_id,
153 int32_t request_id,
154 uint32_t options,
155 StartLoaderCallback start_loader_callback,
156 const ResourceRequest& url_request,
157 scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
126 mojom::URLLoaderClientPtr client; 158 mojom::URLLoaderClientPtr client;
127 client_binding_.Bind(mojo::MakeRequest(&client), std::move(task_runner)); 159 client_binding_.Bind(mojo::MakeRequest(&client), std::move(task_runner));
128 factory->CreateLoaderAndStart(mojo::MakeRequest(&url_loader_), routing_id, 160
129 request_id, options, *url_request, 161 if (factory) {
130 std::move(client)); 162 DCHECK(!start_loader_callback);
163
164 mojom::URLLoaderAssociatedPtr url_loader;
165 auto url_loader_request = mojo::MakeRequest(&url_loader);
166 url_loader_ = std::move(url_loader);
167 factory->CreateLoaderAndStart(std::move(url_loader_request), routing_id,
168 request_id, options, url_request,
169 std::move(client));
170 } else {
171 mojom::URLLoaderPtr url_loader;
172 auto url_loader_request = mojo::MakeRequest(&url_loader);
173 url_loader_ = std::move(url_loader);
174 std::move(start_loader_callback)
175 .Run(std::move(url_loader_request), std::move(client));
176 }
131 } 177 }
132 178
133 void ThrottlingURLLoader::OnReceiveResponse( 179 void ThrottlingURLLoader::OnReceiveResponse(
134 const ResourceResponseHead& response_head, 180 const ResourceResponseHead& response_head,
135 const base::Optional<net::SSLInfo>& ssl_info, 181 const base::Optional<net::SSLInfo>& ssl_info,
136 mojom::DownloadedTempFilePtr downloaded_file) { 182 mojom::DownloadedTempFilePtr downloaded_file) {
137 DCHECK_EQ(DEFERRED_NONE, deferred_stage_); 183 DCHECK_EQ(DEFERRED_NONE, deferred_stage_);
138 DCHECK(!cancelled_by_throttle_); 184 DCHECK(!cancelled_by_throttle_);
139 185
140 if (throttle_) { 186 if (throttle_) {
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 return; 283 return;
238 284
239 cancelled_by_throttle_ = true; 285 cancelled_by_throttle_ = true;
240 286
241 ResourceRequestCompletionStatus request_complete_data; 287 ResourceRequestCompletionStatus request_complete_data;
242 request_complete_data.error_code = error_code; 288 request_complete_data.error_code = error_code;
243 request_complete_data.completion_time = base::TimeTicks::Now(); 289 request_complete_data.completion_time = base::TimeTicks::Now();
244 290
245 deferred_stage_ = DEFERRED_NONE; 291 deferred_stage_ = DEFERRED_NONE;
246 client_binding_.Close(); 292 client_binding_.Close();
247 url_loader_.reset(); 293 url_loader_ = nullptr;
248 294
249 forwarding_client_->OnComplete(request_complete_data); 295 forwarding_client_->OnComplete(request_complete_data);
250 } 296 }
251 297
252 void ThrottlingURLLoader::Resume() { 298 void ThrottlingURLLoader::Resume() {
253 if (cancelled_by_throttle_ || deferred_stage_ == DEFERRED_NONE) 299 if (cancelled_by_throttle_ || deferred_stage_ == DEFERRED_NONE)
254 return; 300 return;
255 301
256 switch (deferred_stage_) { 302 switch (deferred_stage_) {
257 case DEFERRED_START: { 303 case DEFERRED_START: {
258 mojom::URLLoaderClientPtr client; 304 StartNow(start_info_->url_loader_factory, start_info_->routing_id,
259 client_binding_.Bind( 305 start_info_->request_id, start_info_->options,
260 mojo::MakeRequest(&client), std::move(start_info_->task_runner)); 306 std::move(start_info_->start_loader_callback),
261 start_info_->url_loader_factory->CreateLoaderAndStart( 307 start_info_->url_request, std::move(start_info_->task_runner));
262 mojo::MakeRequest(&url_loader_), start_info_->routing_id,
263 start_info_->request_id, start_info_->options,
264 *start_info_->url_request, std::move(client));
265 308
266 if (priority_info_) { 309 if (priority_info_) {
267 auto priority_info = std::move(priority_info_); 310 auto priority_info = std::move(priority_info_);
268 url_loader_->SetPriority(priority_info->priority, 311 url_loader_->SetPriority(priority_info->priority,
269 priority_info->intra_priority_value); 312 priority_info->intra_priority_value);
270 } 313 }
271 break; 314 break;
272 } 315 }
273 case DEFERRED_REDIRECT: { 316 case DEFERRED_REDIRECT: {
274 client_binding_.ResumeIncomingMethodCallProcessing(); 317 client_binding_.ResumeIncomingMethodCallProcessing();
275 forwarding_client_->OnReceiveRedirect(redirect_info_->redirect_info, 318 forwarding_client_->OnReceiveRedirect(redirect_info_->redirect_info,
276 redirect_info_->response_head); 319 redirect_info_->response_head);
277 break; 320 break;
278 } 321 }
279 case DEFERRED_RESPONSE: { 322 case DEFERRED_RESPONSE: {
280 client_binding_.ResumeIncomingMethodCallProcessing(); 323 client_binding_.ResumeIncomingMethodCallProcessing();
281 forwarding_client_->OnReceiveResponse( 324 forwarding_client_->OnReceiveResponse(
282 response_info_->response_head, response_info_->ssl_info, 325 response_info_->response_head, response_info_->ssl_info,
283 std::move(response_info_->downloaded_file)); 326 std::move(response_info_->downloaded_file));
284 break; 327 break;
285 } 328 }
286 default: 329 default:
287 NOTREACHED(); 330 NOTREACHED();
288 break; 331 break;
289 } 332 }
290 deferred_stage_ = DEFERRED_NONE; 333 deferred_stage_ = DEFERRED_NONE;
291 } 334 }
292 335
293 } // namespace content 336 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698