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

Side by Side Diff: content/network/url_loader_impl.cc

Issue 2951293002: NetworkService: Destroy URLLoaders when a NetworkContext is destroyed. (Closed)
Patch Set: Rename variable 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/network/url_loader_impl.h" 5 #include "content/network/url_loader_impl.h"
6 6
7 #include "base/task_scheduler/post_task.h" 7 #include "base/task_scheduler/post_task.h"
8 #include "base/threading/thread_task_runner_handle.h" 8 #include "base/threading/thread_task_runner_handle.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "content/common/net_adapters.h" 10 #include "content/common/net_adapters.h"
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 : context_(context), 163 : context_(context),
164 options_(options), 164 options_(options),
165 connected_(true), 165 connected_(true),
166 binding_(this, std::move(url_loader_request)), 166 binding_(this, std::move(url_loader_request)),
167 url_loader_client_(std::move(url_loader_client)), 167 url_loader_client_(std::move(url_loader_client)),
168 writable_handle_watcher_(FROM_HERE, 168 writable_handle_watcher_(FROM_HERE,
169 mojo::SimpleWatcher::ArmingPolicy::MANUAL), 169 mojo::SimpleWatcher::ArmingPolicy::MANUAL),
170 peer_closed_handle_watcher_(FROM_HERE, 170 peer_closed_handle_watcher_(FROM_HERE,
171 mojo::SimpleWatcher::ArmingPolicy::MANUAL), 171 mojo::SimpleWatcher::ArmingPolicy::MANUAL),
172 weak_ptr_factory_(this) { 172 weak_ptr_factory_(this) {
173 context_->RegisterURLLoader(this);
173 binding_.set_connection_error_handler( 174 binding_.set_connection_error_handler(
174 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this))); 175 base::Bind(&URLLoaderImpl::OnConnectionError, base::Unretained(this)));
175 176
176 url_request_ = context_->url_request_context()->CreateRequest( 177 url_request_ = context_->url_request_context()->CreateRequest(
177 GURL(request.url), net::DEFAULT_PRIORITY, this, traffic_annotation); 178 GURL(request.url), net::DEFAULT_PRIORITY, this, traffic_annotation);
178 url_request_->set_method(request.method); 179 url_request_->set_method(request.method);
179 180
180 url_request_->set_first_party_for_cookies(request.first_party_for_cookies); 181 url_request_->set_first_party_for_cookies(request.first_party_for_cookies);
181 182
182 const Referrer referrer(request.referrer, request.referrer_policy); 183 const Referrer referrer(request.referrer, request.referrer_policy);
(...skipping 11 matching lines...) Expand all
194 url_request_->set_upload( 195 url_request_->set_upload(
195 CreateUploadDataStream(request.request_body.get(), task_runner.get())); 196 CreateUploadDataStream(request.request_body.get(), task_runner.get()));
196 } 197 }
197 198
198 int load_flags = BuildLoadFlagsForRequest(request, false); 199 int load_flags = BuildLoadFlagsForRequest(request, false);
199 url_request_->SetLoadFlags(load_flags); 200 url_request_->SetLoadFlags(load_flags);
200 201
201 url_request_->Start(); 202 url_request_->Start();
202 } 203 }
203 204
204 URLLoaderImpl::~URLLoaderImpl() {} 205 URLLoaderImpl::~URLLoaderImpl() {
206 context_->DeregisterURLLoader(this);
207 }
205 208
206 void URLLoaderImpl::Cleanup() { 209 void URLLoaderImpl::Cleanup() {
207 // The associated network context is going away and we have to destroy 210 // The associated network context is going away and we have to destroy
208 // net::URLRequest hold by this loader. 211 // net::URLRequest held by this loader.
209 delete this; 212 delete this;
210 } 213 }
211 214
212 void URLLoaderImpl::FollowRedirect() { 215 void URLLoaderImpl::FollowRedirect() {
213 if (!url_request_) { 216 if (!url_request_) {
214 NotifyCompleted(net::ERR_UNEXPECTED); 217 NotifyCompleted(net::ERR_UNEXPECTED);
215 return; 218 return;
216 } 219 }
217 220
218 url_request_->FollowDeferredRedirect(); 221 url_request_->FollowDeferredRedirect();
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 if (!url_request->status().is_success()) { 350 if (!url_request->status().is_success()) {
348 writable_handle_watcher_.Cancel(); 351 writable_handle_watcher_.Cancel();
349 pending_write_ = nullptr; // This closes the data pipe. 352 pending_write_ = nullptr; // This closes the data pipe.
350 DeleteIfNeeded(); 353 DeleteIfNeeded();
351 return; 354 return;
352 } 355 }
353 356
354 DidRead(static_cast<uint32_t>(bytes_read), false); 357 DidRead(static_cast<uint32_t>(bytes_read), false);
355 } 358 }
356 359
360 base::WeakPtr<URLLoaderImpl> URLLoaderImpl::GetWeakPtrForTests() {
361 return weak_ptr_factory_.GetWeakPtr();
362 }
363
357 void URLLoaderImpl::NotifyCompleted(int error_code) { 364 void URLLoaderImpl::NotifyCompleted(int error_code) {
358 ResourceRequestCompletionStatus request_complete_data; 365 ResourceRequestCompletionStatus request_complete_data;
359 request_complete_data.error_code = error_code; 366 request_complete_data.error_code = error_code;
360 request_complete_data.exists_in_cache = 367 request_complete_data.exists_in_cache =
361 url_request_->response_info().was_cached; 368 url_request_->response_info().was_cached;
362 request_complete_data.completion_time = base::TimeTicks::Now(); 369 request_complete_data.completion_time = base::TimeTicks::Now();
363 request_complete_data.encoded_data_length = 370 request_complete_data.encoded_data_length =
364 url_request_->GetTotalReceivedBytes(); 371 url_request_->GetTotalReceivedBytes();
365 request_complete_data.encoded_body_length = url_request_->GetRawBodyBytes(); 372 request_complete_data.encoded_body_length = url_request_->GetRawBodyBytes();
366 373
(...skipping 19 matching lines...) Expand all
386 ReadMore(); 393 ReadMore();
387 } 394 }
388 395
389 void URLLoaderImpl::DeleteIfNeeded() { 396 void URLLoaderImpl::DeleteIfNeeded() {
390 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid(); 397 bool has_data_pipe = pending_write_.get() || response_body_stream_.is_valid();
391 if (!connected_ && !has_data_pipe) 398 if (!connected_ && !has_data_pipe)
392 delete this; 399 delete this;
393 } 400 }
394 401
395 } // namespace content 402 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698