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

Side by Side Diff: net/url_request/url_request_http_job.cc

Issue 10299002: Stop refcounting URLRequestContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes Created 8 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/url_request/url_request_http_job.h" 5 #include "net/url_request/url_request_http_job.h"
6 6
7 #include "base/base_switches.h" 7 #include "base/base_switches.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 DoneWithRequest(FINISHED); 260 DoneWithRequest(FINISHED);
261 URLRequestJob::NotifyDone(status); 261 URLRequestJob::NotifyDone(status);
262 } 262 }
263 263
264 void URLRequestHttpJob::DestroyTransaction() { 264 void URLRequestHttpJob::DestroyTransaction() {
265 DCHECK(transaction_.get()); 265 DCHECK(transaction_.get());
266 266
267 DoneWithRequest(ABORTED); 267 DoneWithRequest(ABORTED);
268 transaction_.reset(); 268 transaction_.reset();
269 response_info_ = NULL; 269 response_info_ = NULL;
270 context_ = NULL;
271 } 270 }
272 271
273 void URLRequestHttpJob::StartTransaction() { 272 void URLRequestHttpJob::StartTransaction() {
274 if (request_->context() && request_->context()->network_delegate()) { 273 if (request_->context() && request_->context()->network_delegate()) {
275 int rv = request_->context()->network_delegate()->NotifyBeforeSendHeaders( 274 int rv = request_->context()->network_delegate()->NotifyBeforeSendHeaders(
276 request_, notify_before_headers_sent_callback_, 275 request_, notify_before_headers_sent_callback_,
277 &request_info_.extra_headers); 276 &request_info_.extra_headers);
278 // If an extension blocks the request, we rely on the callback to 277 // If an extension blocks the request, we rely on the callback to
279 // StartTransactionInternal(). 278 // StartTransactionInternal().
280 if (rv == ERR_IO_PENDING) { 279 if (rv == ERR_IO_PENDING) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 !manager->enforce_throttling() || 334 !manager->enforce_throttling() ||
336 request_->first_party_for_cookies().scheme() != "chrome-extension" || 335 request_->first_party_for_cookies().scheme() != "chrome-extension" ||
337 !throttling_entry_->ShouldRejectRequest(request_info_.load_flags)) { 336 !throttling_entry_->ShouldRejectRequest(request_info_.load_flags)) {
338 rv = transaction_->Start( 337 rv = transaction_->Start(
339 &request_info_, start_callback_, request_->net_log()); 338 &request_info_, start_callback_, request_->net_log());
340 start_time_ = base::TimeTicks::Now(); 339 start_time_ = base::TimeTicks::Now();
341 } else { 340 } else {
342 // Special error code for the exponential back-off module. 341 // Special error code for the exponential back-off module.
343 rv = ERR_TEMPORARILY_THROTTLED; 342 rv = ERR_TEMPORARILY_THROTTLED;
344 } 343 }
345 // Make sure the context is alive for the duration of the
346 // transaction.
347 context_ = request_->context();
348 } 344 }
349 } 345 }
350 346
351 if (rv == ERR_IO_PENDING) 347 if (rv == ERR_IO_PENDING)
352 return; 348 return;
353 349
354 // The transaction started synchronously, but we need to notify the 350 // The transaction started synchronously, but we need to notify the
355 // URLRequest delegate via the message loop. 351 // URLRequest delegate via the message loop.
356 MessageLoop::current()->PostTask( 352 MessageLoop::current()->PostTask(
357 FROM_HERE, 353 FROM_HERE,
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 return; 667 return;
672 668
673 // If the transaction was destroyed, then the job was cancelled, and 669 // If the transaction was destroyed, then the job was cancelled, and
674 // we can just ignore this notification. 670 // we can just ignore this notification.
675 if (!transaction_.get()) 671 if (!transaction_.get())
676 return; 672 return;
677 673
678 // Clear the IO_PENDING status 674 // Clear the IO_PENDING status
679 SetStatus(URLRequestStatus()); 675 SetStatus(URLRequestStatus());
680 676
677 const URLRequestContext* context = request_->context();
678
681 if (result == ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN && 679 if (result == ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN &&
682 transaction_->GetResponseInfo() != NULL) { 680 transaction_->GetResponseInfo() != NULL) {
683 FraudulentCertificateReporter* reporter = 681 FraudulentCertificateReporter* reporter =
684 context_->fraudulent_certificate_reporter(); 682 context->fraudulent_certificate_reporter();
685 if (reporter != NULL) { 683 if (reporter != NULL) {
686 const SSLInfo& ssl_info = transaction_->GetResponseInfo()->ssl_info; 684 const SSLInfo& ssl_info = transaction_->GetResponseInfo()->ssl_info;
687 bool sni_available = SSLConfigService::IsSNIAvailable( 685 bool sni_available = SSLConfigService::IsSNIAvailable(
688 context_->ssl_config_service()); 686 context->ssl_config_service());
689 const std::string& host = request_->url().host(); 687 const std::string& host = request_->url().host();
690 688
691 reporter->SendReport(host, ssl_info, sni_available); 689 reporter->SendReport(host, ssl_info, sni_available);
692 } 690 }
693 } 691 }
694 692
695 if (result == OK) { 693 if (result == OK) {
696 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders(); 694 scoped_refptr<HttpResponseHeaders> headers = GetResponseHeaders();
697 if (request_->context() && request_->context()->network_delegate()) { 695 if (context && context->network_delegate()) {
698 // Note that |this| may not be deleted until 696 // Note that |this| may not be deleted until
699 // |on_headers_received_callback_| or 697 // |on_headers_received_callback_| or
700 // |NetworkDelegate::URLRequestDestroyed()| has been called. 698 // |NetworkDelegate::URLRequestDestroyed()| has been called.
701 int error = request_->context()->network_delegate()-> 699 int error = context->network_delegate()->
702 NotifyHeadersReceived(request_, on_headers_received_callback_, 700 NotifyHeadersReceived(request_, on_headers_received_callback_,
703 headers, &override_response_headers_); 701 headers, &override_response_headers_);
704 if (error != net::OK) { 702 if (error != net::OK) {
705 if (error == net::ERR_IO_PENDING) { 703 if (error == net::ERR_IO_PENDING) {
706 awaiting_callback_ = true; 704 awaiting_callback_ = true;
707 request_->net_log().BeginEvent( 705 request_->net_log().BeginEvent(
708 NetLog::TYPE_URL_REQUEST_BLOCKED_ON_DELEGATE, NULL); 706 NetLog::TYPE_URL_REQUEST_BLOCKED_ON_DELEGATE, NULL);
709 } else { 707 } else {
710 request_->net_log().AddEvent(NetLog::TYPE_CANCELLED, 708 request_->net_log().AddEvent(NetLog::TYPE_CANCELLED,
711 make_scoped_refptr( 709 make_scoped_refptr(
712 new NetLogStringParameter("source", "delegate"))); 710 new NetLogStringParameter("source", "delegate")));
713 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, error)); 711 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, error));
714 } 712 }
715 return; 713 return;
716 } 714 }
717 } 715 }
718 716
719 SaveCookiesAndNotifyHeadersComplete(net::OK); 717 SaveCookiesAndNotifyHeadersComplete(net::OK);
720 } else if (IsCertificateError(result)) { 718 } else if (IsCertificateError(result)) {
721 // We encountered an SSL certificate error. Ask our delegate to decide 719 // We encountered an SSL certificate error. Ask our delegate to decide
722 // what we should do. 720 // what we should do.
723 721
724 TransportSecurityState::DomainState domain_state; 722 TransportSecurityState::DomainState domain_state;
723 const URLRequestContext* context = request_->context();
725 const bool fatal = 724 const bool fatal =
726 context_->transport_security_state() && 725 context->transport_security_state() &&
727 context_->transport_security_state()->GetDomainState( 726 context->transport_security_state()->GetDomainState(
728 request_info_.url.host(), 727 request_info_.url.host(),
729 SSLConfigService::IsSNIAvailable(context_->ssl_config_service()), 728 SSLConfigService::IsSNIAvailable(context->ssl_config_service()),
730 &domain_state); 729 &domain_state);
731 NotifySSLCertificateError(transaction_->GetResponseInfo()->ssl_info, fatal); 730 NotifySSLCertificateError(transaction_->GetResponseInfo()->ssl_info, fatal);
732 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { 731 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) {
733 NotifyCertificateRequested( 732 NotifyCertificateRequested(
734 transaction_->GetResponseInfo()->cert_request_info); 733 transaction_->GetResponseInfo()->cert_request_info);
735 } else { 734 } else {
736 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, result)); 735 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, result));
737 } 736 }
738 } 737 }
739 738
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 return override_response_headers_.get() ? 1412 return override_response_headers_.get() ?
1414 override_response_headers_ : 1413 override_response_headers_ :
1415 transaction_->GetResponseInfo()->headers; 1414 transaction_->GetResponseInfo()->headers;
1416 } 1415 }
1417 1416
1418 void URLRequestHttpJob::NotifyURLRequestDestroyed() { 1417 void URLRequestHttpJob::NotifyURLRequestDestroyed() {
1419 awaiting_callback_ = false; 1418 awaiting_callback_ = false;
1420 } 1419 }
1421 1420
1422 } // namespace net 1421 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698