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

Side by Side Diff: net/http/http_network_transaction.cc

Issue 1006643002: Plumb connection attempts from (non-proxy) ConnectJobs to HttpNetworkTransaction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't copy attempts after reset on proxy HTTPS tunnel response Created 5 years, 9 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 (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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 OnIOComplete(ERR_SSL_CLIENT_AUTH_CERT_NEEDED); 555 OnIOComplete(ERR_SSL_CLIENT_AUTH_CERT_NEEDED);
556 } 556 }
557 557
558 void HttpNetworkTransaction::OnHttpsProxyTunnelResponse( 558 void HttpNetworkTransaction::OnHttpsProxyTunnelResponse(
559 const HttpResponseInfo& response_info, 559 const HttpResponseInfo& response_info,
560 const SSLConfig& used_ssl_config, 560 const SSLConfig& used_ssl_config,
561 const ProxyInfo& used_proxy_info, 561 const ProxyInfo& used_proxy_info,
562 HttpStream* stream) { 562 HttpStream* stream) {
563 DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_); 563 DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_);
564 564
565 CopyConnectionAttempts();
566
565 headers_valid_ = true; 567 headers_valid_ = true;
566 response_ = response_info; 568 response_ = response_info;
567 server_ssl_config_ = used_ssl_config; 569 server_ssl_config_ = used_ssl_config;
568 proxy_info_ = used_proxy_info; 570 proxy_info_ = used_proxy_info;
569 if (stream_) 571 if (stream_)
570 total_received_bytes_ += stream_->GetTotalReceivedBytes(); 572 total_received_bytes_ += stream_->GetTotalReceivedBytes();
571 stream_.reset(stream); 573 stream_.reset(stream);
572 stream_request_.reset(); // we're done with the stream request 574 stream_request_.reset(); // we're done with the stream request
573 OnIOComplete(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 575 OnIOComplete(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
574 } 576 }
575 577
578 const ClientSocketHandle::ConnectionAttempts&
579 HttpNetworkTransaction::connection_attempts() const {
580 return connection_attempts_;
581 }
582
576 bool HttpNetworkTransaction::IsSecureRequest() const { 583 bool HttpNetworkTransaction::IsSecureRequest() const {
577 return request_->url.SchemeIsSecure(); 584 return request_->url.SchemeIsSecure();
578 } 585 }
579 586
580 bool HttpNetworkTransaction::UsingHttpProxyWithoutTunnel() const { 587 bool HttpNetworkTransaction::UsingHttpProxyWithoutTunnel() const {
581 return (proxy_info_.is_http() || proxy_info_.is_https() || 588 return (proxy_info_.is_http() || proxy_info_.is_https() ||
582 proxy_info_.is_quic()) && 589 proxy_info_.is_quic()) &&
583 !(request_->url.SchemeIs("https") || request_->url.SchemeIsWSOrWSS()); 590 !(request_->url.SchemeIs("https") || request_->url.SchemeIsWSOrWSS());
584 } 591 }
585 592
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
746 server_ssl_config_, 753 server_ssl_config_,
747 proxy_ssl_config_, 754 proxy_ssl_config_,
748 this, 755 this,
749 net_log_)); 756 net_log_));
750 } 757 }
751 DCHECK(stream_request_.get()); 758 DCHECK(stream_request_.get());
752 return ERR_IO_PENDING; 759 return ERR_IO_PENDING;
753 } 760 }
754 761
755 int HttpNetworkTransaction::DoCreateStreamComplete(int result) { 762 int HttpNetworkTransaction::DoCreateStreamComplete(int result) {
763 if (result != ERR_HTTPS_PROXY_TUNNEL_RESPONSE)
764 CopyConnectionAttempts();
765
756 if (result == OK) { 766 if (result == OK) {
757 next_state_ = STATE_INIT_STREAM; 767 next_state_ = STATE_INIT_STREAM;
758 DCHECK(stream_.get()); 768 DCHECK(stream_.get());
759 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { 769 } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) {
760 result = HandleCertificateRequest(result); 770 result = HandleCertificateRequest(result);
761 } else if (result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) { 771 } else if (result == ERR_HTTPS_PROXY_TUNNEL_RESPONSE) {
762 // Return OK and let the caller read the proxy's error page 772 // Return OK and let the caller read the proxy's error page
763 next_state_ = STATE_NONE; 773 next_state_ = STATE_NONE;
764 return OK; 774 return OK;
765 } else if (result == ERR_HTTP_1_1_REQUIRED || 775 } else if (result == ERR_HTTP_1_1_REQUIRED ||
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
1537 default: 1547 default:
1538 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, 1548 description = base::StringPrintf("Unknown state 0x%08X (%u)", state,
1539 state); 1549 state);
1540 break; 1550 break;
1541 } 1551 }
1542 return description; 1552 return description;
1543 } 1553 }
1544 1554
1545 #undef STATE_CASE 1555 #undef STATE_CASE
1546 1556
1557 void HttpNetworkTransaction::CopyConnectionAttempts() {
1558 DCHECK(stream_request_);
1559
1560 for (const auto& attempt : stream_request_->connection_attempts())
1561 connection_attempts_.push_back(attempt);
1562 }
1563
1547 } // namespace net 1564 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698