Socket Pools Refactor 25: Merge the HTTP proxy pool and its children.
The HTTP proxy pool used to sit on top of an SSL pool and a TCP pool.
This CL removes them and has HTTP proxy ConnectJobs directly create
lower layer connections.
This is part of an effort to flatten the socket pools.
https://docs.google.com/document/d/1g0EA4iDqaDhNXA_mq-YK3SlSX-xRkoKvZetAQqdRrxM/edit
Change-Id: Ie6b059732696e339c9ae5a60673821c03233516f
Reviewed-on: https://chromium-review.googlesource.com/c/1453807
Commit-Queue: Matt Menke <mmenke@chromium.org>
Reviewed-by: Bence Béky <bnc@chromium.org>
Reviewed-by: Eric Roman <eroman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#631905}
diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc
index ae8b45c0..46092912 100644
--- a/net/http/http_proxy_client_socket_pool_unittest.cc
+++ b/net/http/http_proxy_client_socket_pool_unittest.cc
@@ -70,39 +70,7 @@
public WithScopedTaskEnvironment {
protected:
HttpProxyClientSocketPoolTest()
- : transport_socket_pool_(kMaxSockets,
- kMaxSocketsPerGroup,
- &socket_factory_,
- session_deps_.host_resolver.get(),
- nullptr /* proxy_delegate */,
- session_deps_.cert_verifier.get(),
- session_deps_.channel_id_service.get(),
- session_deps_.transport_security_state.get(),
- session_deps_.cert_transparency_verifier.get(),
- session_deps_.ct_policy_enforcer.get(),
- nullptr /* ssl_client_session_cache */,
- std::string() /* ssl_session_cache_shard */,
- session_deps_.ssl_config_service.get(),
- nullptr /* socket_performance_watcher_factory */,
- nullptr /* network_quality_estimator */,
- nullptr /* net_log */),
- ssl_socket_pool_(kMaxSockets,
- kMaxSocketsPerGroup,
- &socket_factory_,
- session_deps_.host_resolver.get(),
- nullptr /* proxy_delegate */,
- session_deps_.cert_verifier.get(),
- session_deps_.channel_id_service.get(),
- session_deps_.transport_security_state.get(),
- session_deps_.cert_transparency_verifier.get(),
- session_deps_.ct_policy_enforcer.get(),
- nullptr /* ssl_client_session_cache */,
- std::string() /* ssl_session_cache_shard */,
- session_deps_.ssl_config_service.get(),
- nullptr /* socket_performance_watcher_factory */,
- nullptr /* network_quality_estimator */,
- nullptr /* net_log */),
- pool_(std::make_unique<TransportClientSocketPool>(
+ : pool_(std::make_unique<TransportClientSocketPool>(
kMaxSockets,
kMaxSocketsPerGroup,
&socket_factory_,
@@ -118,10 +86,7 @@
session_deps_.ssl_config_service.get(),
nullptr /* socket_performance_watcher_factory */,
&estimator_,
- nullptr /* net_log */,
- nullptr /* http_proxy_pool_for_ssl_pool */,
- &transport_socket_pool_,
- &ssl_socket_pool_)) {
+ nullptr /* net_log */)) {
session_deps_.host_resolver->set_synchronous_mode(true);
session_ = CreateNetworkSession();
}
@@ -141,8 +106,7 @@
std::string() /* ssl_session_cache_shard */,
session_deps_.ssl_config_service.get(),
nullptr /* socket_performance_watcher_factory */, &estimator_,
- nullptr /* net_log */, nullptr /* http_proxy_pool_for_ssl_pool */,
- &transport_socket_pool_, &ssl_socket_pool_);
+ nullptr /* net_log */);
}
void AddAuthToCache() {
@@ -241,9 +205,6 @@
TestNetworkQualityEstimator estimator_;
- TransportClientSocketPool transport_socket_pool_;
- TransportClientSocketPool ssl_socket_pool_;
-
std::unique_ptr<HttpNetworkSession> session_;
base::HistogramTester histogram_tester_;
diff --git a/net/http/http_proxy_client_socket_wrapper.cc b/net/http/http_proxy_client_socket_wrapper.cc
index 648643e0..8ab8d6f 100644
--- a/net/http/http_proxy_client_socket_wrapper.cc
+++ b/net/http/http_proxy_client_socket_wrapper.cc
@@ -24,7 +24,6 @@
#include "net/socket/client_socket_handle.h"
#include "net/socket/socket_tag.h"
#include "net/socket/ssl_connect_job.h"
-#include "net/socket/transport_client_socket_pool.h"
#include "net/socket/transport_connect_job.h"
#include "net/spdy/spdy_proxy_client_socket.h"
#include "net/spdy/spdy_session.h"
@@ -41,8 +40,6 @@
base::TimeDelta connect_timeout_duration,
base::TimeDelta proxy_negotiation_timeout_duration,
const CommonConnectJobParams& common_connect_job_params,
- TransportClientSocketPool* transport_pool,
- TransportClientSocketPool* ssl_pool,
const scoped_refptr<TransportSocketParams>& transport_params,
const scoped_refptr<SSLSocketParams>& ssl_params,
quic::QuicTransportVersion quic_version,
@@ -60,8 +57,6 @@
priority_(priority),
connect_timeout_duration_(connect_timeout_duration),
proxy_negotiation_timeout_duration_(proxy_negotiation_timeout_duration),
- transport_pool_(transport_pool),
- ssl_pool_(ssl_pool),
transport_params_(transport_params),
ssl_params_(ssl_params),
quic_version_(quic_version),
@@ -73,6 +68,7 @@
common_connect_job_params_(common_connect_job_params),
using_spdy_(false),
is_trusted_proxy_(is_trusted_proxy),
+ has_established_connection_(false),
quic_stream_factory_(quic_stream_factory),
http_auth_controller_(
tunnel ? new HttpAuthController(
@@ -107,12 +103,11 @@
LoadState HttpProxyClientSocketWrapper::GetConnectLoadState() const {
switch (next_state_) {
- case STATE_BEGIN_CONNECT:
case STATE_TCP_CONNECT:
case STATE_TCP_CONNECT_COMPLETE:
case STATE_SSL_CONNECT:
case STATE_SSL_CONNECT_COMPLETE:
- return transport_socket_handle_->GetLoadState();
+ return nested_connect_job_->GetLoadState();
case STATE_HTTP_PROXY_CONNECT:
case STATE_HTTP_PROXY_CONNECT_COMPLETE:
case STATE_SPDY_PROXY_CREATE_STREAM:
@@ -123,6 +118,7 @@
case STATE_RESTART_WITH_AUTH:
case STATE_RESTART_WITH_AUTH_COMPLETE:
return LOAD_STATE_ESTABLISHING_PROXY_TUNNEL;
+ case STATE_BEGIN_CONNECT:
case STATE_NONE:
// May be possible for this method to be called after an error, shouldn't
// be called after a successful connect.
@@ -144,8 +140,8 @@
priority_ = priority;
- if (transport_socket_handle_)
- transport_socket_handle_->SetPriority(priority);
+ if (nested_connect_job_)
+ nested_connect_job_->ChangePriority(priority);
if (spdy_stream_request_)
spdy_stream_request_->SetPriority(priority);
@@ -219,15 +215,8 @@
next_state_ = STATE_NONE;
spdy_stream_request_.reset();
quic_stream_request_.reset();
- if (transport_socket_handle_) {
- if (transport_socket_handle_->socket())
- transport_socket_handle_->socket()->Disconnect();
- transport_socket_handle_->Reset();
- transport_socket_handle_.reset();
- }
-
- if (transport_socket_)
- transport_socket_->Disconnect();
+ nested_connect_job_.reset();
+ transport_socket_.reset();
}
bool HttpProxyClientSocketWrapper::IsConnected() const {
@@ -385,6 +374,28 @@
return ERR_SOCKET_NOT_CONNECTED;
}
+void HttpProxyClientSocketWrapper::OnConnectJobComplete(int result,
+ ConnectJob* job) {
+ DCHECK_EQ(nested_connect_job_.get(), job);
+ DCHECK(next_state_ == STATE_TCP_CONNECT_COMPLETE ||
+ next_state_ == STATE_SSL_CONNECT_COMPLETE);
+ OnIOComplete(result);
+}
+
+bool HttpProxyClientSocketWrapper::HasEstablishedConnection() {
+ if (has_established_connection_)
+ return true;
+
+ // It's possible the nested connect job has established a connection, but
+ // hasn't completed yet (For example, an SSLConnectJob may be negotiating
+ // SSL).
+ if (nested_connect_job_) {
+ has_established_connection_ =
+ nested_connect_job_->HasEstablishedConnection();
+ }
+ return has_established_connection_;
+}
+
ProxyServer::Scheme HttpProxyClientSocketWrapper::GetProxyServerScheme() const {
if (quic_version_ != quic::QUIC_VERSION_UNSUPPORTED)
return ProxyServer::SCHEME_QUIC;
@@ -477,6 +488,11 @@
switch (GetProxyServerScheme()) {
case ProxyServer::SCHEME_QUIC:
next_state_ = STATE_QUIC_PROXY_CREATE_SESSION;
+ // QUIC connections are always considered to have been established.
+ // |has_established_connection_| is only used to start retries if a
+ // connection hasn't been established yet, and QUIC has its own connection
+ // establishment logic.
+ has_established_connection_ = true;
break;
case ProxyServer::SCHEME_HTTP:
next_state_ = STATE_TCP_CONNECT;
@@ -492,18 +508,9 @@
int HttpProxyClientSocketWrapper::DoTransportConnect() {
next_state_ = STATE_TCP_CONNECT_COMPLETE;
- transport_socket_handle_.reset(new ClientSocketHandle());
- return transport_socket_handle_->Init(
- common_connect_job_params_.group_name,
- TransportClientSocketPool::SocketParams::CreateFromTransportSocketParams(
- transport_params_),
- priority_, common_connect_job_params_.socket_tag,
- common_connect_job_params_.respect_limits
- ? ClientSocketPool::RespectLimits::ENABLED
- : ClientSocketPool::RespectLimits::DISABLED,
- base::Bind(&HttpProxyClientSocketWrapper::OnIOComplete,
- base::Unretained(this)),
- transport_pool_, net_log_);
+ nested_connect_job_ = TransportConnectJob::CreateTransportConnectJob(
+ transport_params_, priority_, common_connect_job_params_, this);
+ return nested_connect_job_->Connect();
}
int HttpProxyClientSocketWrapper::DoTransportConnectComplete(int result) {
@@ -519,6 +526,8 @@
return ERR_PROXY_CONNECTION_FAILED;
}
+ has_established_connection_ = true;
+
// Reset the timer to just the length of time allowed for HttpProxy handshake
// so that a fast TCP connection plus a slow HttpProxy failure doesn't take
// longer to timeout than it should.
@@ -544,26 +553,24 @@
}
}
next_state_ = STATE_SSL_CONNECT_COMPLETE;
- transport_socket_handle_.reset(new ClientSocketHandle());
- return transport_socket_handle_->Init(
- common_connect_job_params_.group_name,
- TransportClientSocketPool::SocketParams::CreateFromSSLSocketParams(
- ssl_params_),
- priority_, common_connect_job_params_.socket_tag,
- common_connect_job_params_.respect_limits,
- base::Bind(&HttpProxyClientSocketWrapper::OnIOComplete,
- base::Unretained(this)),
- ssl_pool_, net_log_);
+ nested_connect_job_ = std::make_unique<SSLConnectJob>(
+ priority_, common_connect_job_params_, ssl_params_,
+ nullptr /* http_proxy_pool */, this);
+ return nested_connect_job_->Connect();
}
int HttpProxyClientSocketWrapper::DoSSLConnectComplete(int result) {
if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) {
- DCHECK(
- transport_socket_handle_->ssl_error_response_info().cert_request_info);
+ // Not really used to hold a socket.
+ // TODO(mmenke): Implement a better API to get this information.
+ ClientSocketHandle client_socket_handle;
+ nested_connect_job_->GetAdditionalErrorState(&client_socket_handle);
+
+ DCHECK(client_socket_handle.ssl_error_response_info().cert_request_info);
UMA_HISTOGRAM_MEDIUM_TIMES("Net.HttpProxy.ConnectLatency.Secure.Error",
base::TimeTicks::Now() - connect_start_time_);
- error_response_info_.reset(new HttpResponseInfo(
- transport_socket_handle_->ssl_error_response_info()));
+ error_response_info_ = std::make_unique<HttpResponseInfo>(
+ client_socket_handle.ssl_error_response_info());
error_response_info_->cert_request_info->is_proxy = true;
return result;
}
@@ -573,26 +580,24 @@
base::TimeTicks::Now() - connect_start_time_);
// TODO(rch): allow the user to deal with proxy cert errors in the
// same way as server cert errors.
- transport_socket_handle_->socket()->Disconnect();
return ERR_PROXY_CERTIFICATE_INVALID;
}
// A SPDY session to the proxy completed prior to resolving the proxy
// hostname. Surface this error, and allow the delegate to retry.
// See crbug.com/334413.
if (result == ERR_SPDY_SESSION_ALREADY_EXISTS) {
- DCHECK(!transport_socket_handle_->socket());
+ DCHECK(!nested_connect_job_->socket());
return ERR_SPDY_SESSION_ALREADY_EXISTS;
}
if (result < 0) {
UMA_HISTOGRAM_MEDIUM_TIMES("Net.HttpProxy.ConnectLatency.Secure.Error",
base::TimeTicks::Now() - connect_start_time_);
- if (transport_socket_handle_->socket())
- transport_socket_handle_->socket()->Disconnect();
return ERR_PROXY_CONNECTION_FAILED;
}
- negotiated_protocol_ =
- transport_socket_handle_->socket()->GetNegotiatedProtocol();
+ has_established_connection_ = true;
+
+ negotiated_protocol_ = nested_connect_job_->socket()->GetNegotiatedProtocol();
using_spdy_ = negotiated_protocol_ == kProtoHTTP2;
// Reset the timer to just the length of time allowed for HttpProxy handshake
@@ -627,12 +632,13 @@
// Add a HttpProxy connection on top of the tcp socket.
transport_socket_ =
- transport_pool_->client_socket_factory()->CreateProxyClientSocket(
- std::move(transport_socket_handle_), user_agent_, endpoint_,
+ common_connect_job_params_.client_socket_factory->CreateProxyClientSocket(
+ nested_connect_job_->PassSocket(), user_agent_, endpoint_,
ProxyServer(GetProxyServerScheme(), GetDestination()),
http_auth_controller_.get(), tunnel_, using_spdy_,
negotiated_protocol_, common_connect_job_params_.proxy_delegate,
ssl_params_.get() != nullptr, traffic_annotation_);
+ nested_connect_job_.reset();
return transport_socket_->Connect(base::Bind(
&HttpProxyClientSocketWrapper::OnIOComplete, base::Unretained(this)));
}
@@ -658,16 +664,14 @@
/* is_websocket = */ false, net_log_);
// It's possible that a session to the proxy has recently been created
if (spdy_session) {
- if (transport_socket_handle_.get()) {
- if (transport_socket_handle_->socket())
- transport_socket_handle_->socket()->Disconnect();
- transport_socket_handle_->Reset();
- }
+ nested_connect_job_.reset();
} else {
// Create a session direct to the proxy itself
- spdy_session = spdy_session_pool_->CreateAvailableSessionFromSocketHandle(
- key, is_trusted_proxy_, std::move(transport_socket_handle_), net_log_);
+ spdy_session = spdy_session_pool_->CreateAvailableSessionFromSocket(
+ key, is_trusted_proxy_, nested_connect_job_->PassSocket(),
+ nested_connect_job_->connect_timing(), net_log_);
DCHECK(spdy_session);
+ nested_connect_job_.reset();
}
next_state_ = STATE_SPDY_PROXY_CREATE_STREAM_COMPLETE;
diff --git a/net/http/http_proxy_client_socket_wrapper.h b/net/http/http_proxy_client_socket_wrapper.h
index 4134514..361a1f1 100644
--- a/net/http/http_proxy_client_socket_wrapper.h
+++ b/net/http/http_proxy_client_socket_wrapper.h
@@ -31,14 +31,12 @@
namespace net {
-class ClientSocketHandle;
class IOBuffer;
class HttpAuthCache;
class HttpResponseInfo;
class IOBuffer;
class SpdySessionPool;
class SSLSocketParams;
-class TransportClientSocketPool;
class TransportSocketParams;
// Class that establishes connections by calling into the lower layer socket
@@ -53,15 +51,14 @@
// TODO(mmenke): Ideally, we'd have a central location store auth state across
// multiple connections to the same server instead.
class NET_EXPORT_PRIVATE HttpProxyClientSocketWrapper
- : public ProxyClientSocket {
+ : public ProxyClientSocket,
+ public ConnectJob::Delegate {
public:
HttpProxyClientSocketWrapper(
RequestPriority priority,
base::TimeDelta connect_timeout_duration,
base::TimeDelta proxy_negotiation_timeout_duration,
const CommonConnectJobParams& common_connect_job_params,
- TransportClientSocketPool* transport_pool,
- TransportClientSocketPool* ssl_pool,
const scoped_refptr<TransportSocketParams>& transport_params,
const scoped_refptr<SSLSocketParams>& ssl_params,
quic::QuicTransportVersion quic_version,
@@ -127,6 +124,11 @@
int GetPeerAddress(IPEndPoint* address) const override;
int GetLocalAddress(IPEndPoint* address) const override;
+ // ConnectJob::Delegate implementation.
+ void OnConnectJobComplete(int result, ConnectJob* job) override;
+
+ bool HasEstablishedConnection();
+
NetErrorDetails* quic_net_error_details() { return &quic_net_error_details_; }
private:
@@ -188,8 +190,6 @@
const base::TimeDelta connect_timeout_duration_;
const base::TimeDelta proxy_negotiation_timeout_duration_;
- TransportClientSocketPool* const transport_pool_;
- TransportClientSocketPool* const ssl_pool_;
const scoped_refptr<TransportSocketParams> transport_params_;
const scoped_refptr<SSLSocketParams> ssl_params_;
@@ -208,9 +208,13 @@
bool is_trusted_proxy_;
NextProto negotiated_protocol_;
+ // Set to true once a connection has been successfully established. Remains
+ // true even if a new socket is being connected to retry with auth.
+ bool has_established_connection_;
+
std::unique_ptr<HttpResponseInfo> error_response_info_;
- std::unique_ptr<ClientSocketHandle> transport_socket_handle_;
+ std::unique_ptr<ConnectJob> nested_connect_job_;
std::unique_ptr<ProxyClientSocket> transport_socket_;
// Called when a connection is established. Also used when restarting with
diff --git a/net/http/http_proxy_client_socket_wrapper_unittest.cc b/net/http/http_proxy_client_socket_wrapper_unittest.cc
index 6414fda3..1f23885 100644
--- a/net/http/http_proxy_client_socket_wrapper_unittest.cc
+++ b/net/http/http_proxy_client_socket_wrapper_unittest.cc
@@ -303,7 +303,6 @@
/*socket_performance_watcher_factory=*/nullptr,
/*network_quality_estimator=*/nullptr, net_log_.net_log(),
/*websocket_endpoint_lock_manager=*/nullptr),
- /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr,
/*transport_params=*/nullptr, ssl_params, quic_version_, kUserAgent,
endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(),
/*spdy_session_pool=*/nullptr, quic_stream_factory_.get(),
@@ -369,7 +368,6 @@
/*socket_performance_watcher_factory=*/nullptr,
/*network_quality_estimator=*/nullptr, net_log_.net_log(),
/*websocket_endpoint_lock_manager=*/nullptr),
- /*transport_pool=*/nullptr, /*ssl_pool=*/nullptr,
/*transport_params=*/nullptr, ssl_params, quic_version_, kUserAgent,
endpoint_host_port_, &http_auth_cache_, http_auth_handler_factory_.get(),
/*spdy_session_pool=*/nullptr, quic_stream_factory_.get(),
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc
index 9861fe36..a202d79 100644
--- a/net/http/http_proxy_connect_job.cc
+++ b/net/http/http_proxy_connect_job.cc
@@ -165,8 +165,6 @@
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
const scoped_refptr<HttpProxySocketParams>& params,
- TransportClientSocketPool* transport_pool,
- TransportClientSocketPool* ssl_pool,
Delegate* delegate)
: ConnectJob(
priority,
@@ -182,8 +180,6 @@
common_connect_job_params.network_quality_estimator),
base::TimeDelta::FromSeconds(kHttpProxyConnectJobTimeoutInSeconds),
common_connect_job_params,
- transport_pool,
- ssl_pool,
params->transport_params(),
params->ssl_params(),
params->quic_version(),
@@ -205,11 +201,7 @@
}
bool HttpProxyConnectJob::HasEstablishedConnection() const {
- // Returning true prevents the socket pool this belongs to from using backup
- // jobs.
- // TODO(https://crbug.com/472729): Implement this, as nested pools are
- // removed.
- return true;
+ return client_socket_->HasEstablishedConnection();
}
void HttpProxyConnectJob::GetAdditionalErrorState(ClientSocketHandle* handle) {
diff --git a/net/http/http_proxy_connect_job.h b/net/http/http_proxy_connect_job.h
index 099d209..1ffa46b 100644
--- a/net/http/http_proxy_connect_job.h
+++ b/net/http/http_proxy_connect_job.h
@@ -28,7 +28,6 @@
class NetworkQualityEstimator;
class SpdySessionPool;
class SSLSocketParams;
-class TransportClientSocketPool;
class TransportSocketParams;
class QuicStreamFactory;
@@ -104,8 +103,6 @@
HttpProxyConnectJob(RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
const scoped_refptr<HttpProxySocketParams>& params,
- TransportClientSocketPool* transport_pool,
- TransportClientSocketPool* ssl_pool,
Delegate* delegate);
~HttpProxyConnectJob() override;
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc
index 2a0dba93..f198875a 100644
--- a/net/http/http_proxy_connect_job_unittest.cc
+++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -191,8 +191,7 @@
nullptr /* socket_performance_watcher_factory */,
&network_quality_estimator_, nullptr /* net_log */,
nullptr /* websocket_endpoint_lock_manager */),
- std::move(http_proxy_socket_params), &transport_socket_pool_,
- &ssl_socket_pool_, delegate);
+ std::move(http_proxy_socket_params), delegate);
}
void InitProxyDelegate() {
@@ -299,6 +298,156 @@
}
}
+// Pauses an HttpProxyConnectJob at various states, and check the value of
+// HasEstablishedConnection().
+TEST_P(HttpProxyConnectJobTest, HasEstablishedConnectionNoTunnel) {
+ session_deps_.host_resolver->set_ondemand_mode(true);
+
+ SequencedSocketData data;
+ data.set_connect_data(MockConnect(ASYNC, OK));
+ socket_factory_.AddSocketDataProvider(&data);
+
+ // Set up SSL, if needed.
+ SSLSocketDataProvider ssl_data(ASYNC, OK);
+ switch (GetParam()) {
+ case HTTP:
+ // No SSL needed.
+ break;
+ case HTTPS:
+ // SSL negotiation is the last step in non-tunnel connections over HTTPS
+ // proxies, so pause there, to check the final state before completion.
+ ssl_data = SSLSocketDataProvider(SYNCHRONOUS, ERR_IO_PENDING);
+ socket_factory_.AddSSLSocketDataProvider(&ssl_data);
+ break;
+ case SPDY:
+ InitializeSpdySsl(&ssl_data);
+ socket_factory_.AddSSLSocketDataProvider(&ssl_data);
+ break;
+ }
+
+ TestConnectJobDelegate test_delegate;
+ std::unique_ptr<ConnectJob> connect_job =
+ CreateConnectJobForHttpRequest(&test_delegate);
+
+ // Connecting should run until the request hits the HostResolver.
+ EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_TRUE(session_deps_.host_resolver->has_pending_requests());
+ EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, connect_job->GetLoadState());
+ EXPECT_FALSE(connect_job->HasEstablishedConnection());
+
+ // Once the HostResolver completes, the job should start establishing a
+ // connection, which will complete asynchronously.
+ session_deps_.host_resolver->ResolveOnlyRequestNow();
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_EQ(LOAD_STATE_CONNECTING, connect_job->GetLoadState());
+ EXPECT_FALSE(connect_job->HasEstablishedConnection());
+
+ switch (GetParam()) {
+ case HTTP:
+ case SPDY:
+ // Connection completes. Since no tunnel is established, the socket is
+ // returned immediately, and HasEstablishedConnection() is only specified
+ // to work before the ConnectJob completes.
+ EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk());
+ break;
+ case HTTPS:
+ base::RunLoop().RunUntilIdle();
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_EQ(LOAD_STATE_SSL_HANDSHAKE, connect_job->GetLoadState());
+ EXPECT_TRUE(connect_job->HasEstablishedConnection());
+
+ // Unfortunately, there's no API to advance the paused SSL negotiation,
+ // so just end the test here.
+ }
+}
+
+// Pauses an HttpProxyConnectJob at various states, and check the value of
+// HasEstablishedConnection().
+TEST_P(HttpProxyConnectJobTest, HasEstablishedConnectionTunnel) {
+ session_deps_.host_resolver->set_ondemand_mode(true);
+
+ // HTTP proxy CONNECT request / response, with a pause during the read.
+ MockWrite http1_writes[] = {
+ MockWrite(ASYNC, 0,
+ "CONNECT www.endpoint.test:443 HTTP/1.1\r\n"
+ "Host: www.endpoint.test:443\r\n"
+ "Proxy-Connection: keep-alive\r\n\r\n"),
+ };
+ MockRead http1_reads[] = {
+ // Pause at first read.
+ MockRead(ASYNC, ERR_IO_PENDING, 1),
+ MockRead(ASYNC, 2, "HTTP/1.1 200 Connection Established\r\n\r\n"),
+ };
+ SequencedSocketData http1_data(http1_reads, http1_writes);
+ http1_data.set_connect_data(MockConnect(ASYNC, OK));
+
+ // SPDY proxy CONNECT request / response, with a pause during the read.
+ spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect(
+ nullptr, 0, 1, DEFAULT_PRIORITY, HostPortPair(kEndpointHost, 443)));
+ MockWrite spdy_writes[] = {CreateMockWrite(req, 0)};
+ spdy::SpdySerializedFrame resp(
+ spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+ MockRead spdy_reads[] = {
+ // Pause at first read.
+ MockRead(ASYNC, ERR_IO_PENDING, 1),
+ CreateMockRead(resp, 2, ASYNC),
+ MockRead(ASYNC, 0, 3),
+ };
+ SequencedSocketData spdy_data(spdy_reads, spdy_writes);
+ spdy_data.set_connect_data(MockConnect(ASYNC, OK));
+
+ // Will point to either the HTTP/1.x or SPDY data, depending on GetParam().
+ SequencedSocketData* sequenced_data = nullptr;
+
+ SSLSocketDataProvider ssl_data(ASYNC, OK);
+
+ switch (GetParam()) {
+ case HTTP:
+ sequenced_data = &http1_data;
+ break;
+ case HTTPS:
+ sequenced_data = &http1_data;
+ socket_factory_.AddSSLSocketDataProvider(&ssl_data);
+ break;
+ case SPDY:
+ sequenced_data = &spdy_data;
+ InitializeSpdySsl(&ssl_data);
+ socket_factory_.AddSSLSocketDataProvider(&ssl_data);
+ break;
+ }
+
+ socket_factory_.AddSocketDataProvider(sequenced_data);
+
+ TestConnectJobDelegate test_delegate;
+ std::unique_ptr<ConnectJob> connect_job =
+ CreateConnectJobForTunnel(&test_delegate);
+
+ // Connecting should run until the request hits the HostResolver.
+ EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING));
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_TRUE(session_deps_.host_resolver->has_pending_requests());
+ EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, connect_job->GetLoadState());
+ EXPECT_FALSE(connect_job->HasEstablishedConnection());
+
+ // Once the HostResolver completes, the job should start establishing a
+ // connection, which will complete asynchronously.
+ session_deps_.host_resolver->ResolveOnlyRequestNow();
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_EQ(LOAD_STATE_CONNECTING, connect_job->GetLoadState());
+ EXPECT_FALSE(connect_job->HasEstablishedConnection());
+
+ // Run until the socket starts reading the proxy's handshake response.
+ sequenced_data->RunUntilPaused();
+ EXPECT_FALSE(test_delegate.has_result());
+ EXPECT_EQ(LOAD_STATE_ESTABLISHING_PROXY_TUNNEL, connect_job->GetLoadState());
+ EXPECT_TRUE(connect_job->HasEstablishedConnection());
+
+ // Finish the read, and run the job until it's complete.
+ sequenced_data->Resume();
+ EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk());
+}
+
TEST_P(HttpProxyConnectJobTest, ProxyDelegateExtraHeaders) {
// TODO(https://crbug.com/926427): The ProxyDelegate API is currently broken
// in the SPDY case.
diff --git a/net/socket/client_socket_pool_manager_impl.cc b/net/socket/client_socket_pool_manager_impl.cc
index a4fda95..f9cb8a84 100644
--- a/net/socket/client_socket_pool_manager_impl.cc
+++ b/net/socket/client_socket_pool_manager_impl.cc
@@ -110,14 +110,6 @@
it.second->FlushWithError(error);
}
- for (const auto& it : ssl_socket_pools_for_https_proxies_) {
- it.second->FlushWithError(error);
- }
-
- for (const auto& it : transport_socket_pools_for_http_proxies_) {
- it.second->FlushWithError(error);
- }
-
for (const auto& it : proxy_socket_pools_) {
it.second->FlushWithError(error);
}
@@ -136,14 +128,6 @@
it.second->CloseIdleSockets();
}
- for (const auto& it : ssl_socket_pools_for_https_proxies_) {
- it.second->CloseIdleSockets();
- }
-
- for (const auto& it : transport_socket_pools_for_http_proxies_) {
- it.second->CloseIdleSockets();
- }
-
for (const auto& it : proxy_socket_pools_) {
it.second->CloseIdleSockets();
}
@@ -183,49 +167,14 @@
TransportSocketPoolMap::const_iterator it =
http_proxy_socket_pools_.find(http_proxy);
- if (it != http_proxy_socket_pools_.end()) {
- DCHECK(base::ContainsKey(transport_socket_pools_for_http_proxies_,
- http_proxy));
- DCHECK(base::ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
+ if (it != http_proxy_socket_pools_.end())
return it->second.get();
- }
-
- DCHECK(
- !base::ContainsKey(transport_socket_pools_for_http_proxies_, http_proxy));
- DCHECK(!base::ContainsKey(ssl_socket_pools_for_https_proxies_, http_proxy));
-
- int sockets_per_proxy_server = max_sockets_per_proxy_server(pool_type_);
- int sockets_per_group = std::min(sockets_per_proxy_server,
- max_sockets_per_group(pool_type_));
-
- std::pair<TransportSocketPoolMap::iterator, bool> tcp_http_ret =
- transport_socket_pools_for_http_proxies_.insert(std::make_pair(
- http_proxy,
- CreateTransportSocketPool(
- http_proxy, true /* use_socket_performance_watcher_factory */)));
- DCHECK(tcp_http_ret.second);
-
- std::pair<TransportSocketPoolMap::iterator, bool> ssl_https_ret =
- ssl_socket_pools_for_https_proxies_.insert(std::make_pair(
- http_proxy,
- CreateTransportSocketPool(
- http_proxy, true /* use_socket_performance_watcher_factory */)));
- DCHECK(ssl_https_ret.second);
std::pair<TransportSocketPoolMap::iterator, bool> ret =
http_proxy_socket_pools_.insert(std::make_pair(
http_proxy,
- std::make_unique<TransportClientSocketPool>(
- sockets_per_proxy_server, sockets_per_group, socket_factory_,
- host_resolver_, proxy_delegate_, cert_verifier_,
- channel_id_service_, transport_security_state_,
- cert_transparency_verifier_, ct_policy_enforcer_,
- ssl_client_session_cache_, ssl_session_cache_shard_,
- ssl_config_service_, socket_performance_watcher_factory_,
- network_quality_estimator_, net_log_,
- nullptr /* http_proxy_pool_for_ssl_pool */,
- tcp_http_ret.first->second.get(),
- ssl_https_ret.first->second.get())));
+ CreateTransportSocketPool(
+ http_proxy, true /* use_socket_performance_watcher_factory */)));
return ret.first->second.get();
}
@@ -258,9 +207,7 @@
network_quality_estimator_, net_log_,
proxy_server.is_http_like()
? GetSocketPoolForHTTPLikeProxy(proxy_server)
- : nullptr,
- nullptr /* transport_pool_for_http_proxy_pool */,
- nullptr /* ssl_pool_for_http_proxy_pool */)));
+ : nullptr)));
return ret.first->second.get();
}
diff --git a/net/socket/client_socket_pool_manager_impl.h b/net/socket/client_socket_pool_manager_impl.h
index bf02f08..adbaf727cc 100644
--- a/net/socket/client_socket_pool_manager_impl.h
+++ b/net/socket/client_socket_pool_manager_impl.h
@@ -126,8 +126,6 @@
// proxies that use TCP connections.
TransportSocketPoolMap proxy_socket_pools_;
- TransportSocketPoolMap transport_socket_pools_for_http_proxies_;
- TransportSocketPoolMap ssl_socket_pools_for_https_proxies_;
TransportSocketPoolMap http_proxy_socket_pools_;
TransportSocketPoolMap ssl_socket_pools_for_proxies_;
diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h
index ce5380fd..d35ecdd 100644
--- a/net/socket/connect_job.h
+++ b/net/socket/connect_job.h
@@ -126,6 +126,11 @@
// released socket, or nullptr if there was a connection error.
std::unique_ptr<StreamSocket> PassSocket();
+ // Returns the connected socket, or nullptr if PassSocket() has already been
+ // called. Used to query the socket state. May only be called after the
+ // ConnectJob completes.
+ StreamSocket* socket() { return socket_.get(); }
+
void ChangePriority(RequestPriority priority);
// Begins connecting the socket. Returns OK on success, ERR_IO_PENDING if it
@@ -196,7 +201,6 @@
}
void SetSocket(std::unique_ptr<StreamSocket> socket);
- StreamSocket* socket() { return socket_.get(); }
void NotifyDelegateOfCompletion(int rv);
void ResetTimer(base::TimeDelta remaining_time);
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc
index 8034e4c..32d259f 100644
--- a/net/socket/ssl_client_socket_pool_unittest.cc
+++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -72,9 +72,6 @@
new TransportSocketParams(HostPortPair("host", 443),
false,
OnHostResolutionCallback())),
- transport_socket_pool_(kMaxSockets,
- kMaxSocketsPerGroup,
- &socket_factory_),
proxy_transport_socket_params_(
new TransportSocketParams(HostPortPair("proxy", 443),
false,
@@ -108,10 +105,7 @@
nullptr /* ssl_config_service */,
nullptr /* socket_performance_watcher_factory */,
nullptr /* network_quality_estimator */,
- nullptr /* net_log */,
- nullptr /* http_proxy_pool_for_ssl_pool */,
- &transport_socket_pool_,
- nullptr /* ssl_pool_for_http_proxy_pool */) {
+ nullptr /* net_log */) {
ssl_config_service_->GetSSLConfig(&ssl_config_);
}
@@ -179,7 +173,6 @@
const std::unique_ptr<HttpNetworkSession> session_;
scoped_refptr<TransportSocketParams> direct_transport_socket_params_;
- MockTransportClientSocketPool transport_socket_pool_;
scoped_refptr<TransportSocketParams> proxy_transport_socket_params_;
diff --git a/net/socket/ssl_connect_job_unittest.cc b/net/socket/ssl_connect_job_unittest.cc
index a86a748..b6305b1 100644
--- a/net/socket/ssl_connect_job_unittest.cc
+++ b/net/socket/ssl_connect_job_unittest.cc
@@ -101,22 +101,6 @@
new TransportSocketParams(HostPortPair("host", 443),
false,
OnHostResolutionCallback())),
- transport_socket_pool_(kMaxSockets,
- kMaxSocketsPerGroup,
- &socket_factory_,
- &host_resolver_,
- nullptr /* proxy_delegate */,
- nullptr /* cert_verifier */,
- nullptr /* channel_id_server */,
- nullptr /* transport_security_state */,
- nullptr /* cert_transparency_verifier */,
- nullptr /* ct_policy_enforcer */,
- nullptr /* ssl_client_session_cache */,
- std::string() /* ssl_session_cache_shard */,
- nullptr /* ssl_config_service */,
- nullptr /* socket_performance_watcher_factory */,
- nullptr /* network_quality_estimator */,
- nullptr /* net_log */),
proxy_transport_socket_params_(
new TransportSocketParams(HostPortPair("proxy", 443),
false,
@@ -155,10 +139,7 @@
nullptr /* ssl_config_service */,
nullptr /* socket_performance_watcher_factory */,
nullptr /* network_quality_estimator */,
- nullptr /* net_log */,
- nullptr /* http_proxy_pool_for_ssl_pool */,
- &transport_socket_pool_,
- nullptr /* ssl_pool_for_http_proxy_pool */) {
+ nullptr /* net_log */) {
ssl_config_service_->GetSSLConfig(&ssl_config_);
// Set an initial delay to ensure that the first call to TimeTicks::Now()
@@ -236,7 +217,6 @@
SSLClientSocketContext ssl_client_socket_context_;
scoped_refptr<TransportSocketParams> direct_transport_socket_params_;
- TransportClientSocketPool transport_socket_pool_;
scoped_refptr<TransportSocketParams> proxy_transport_socket_params_;
scoped_refptr<SOCKSSocketParams> socks_socket_params_;
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc
index f31ab61..72411d6 100644
--- a/net/socket/transport_client_socket_pool.cc
+++ b/net/socket/transport_client_socket_pool.cc
@@ -38,12 +38,8 @@
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
ConnectJob::Delegate* delegate,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool) {
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool) {
DCHECK(!http_proxy_pool_for_ssl_pool);
- DCHECK(!transport_pool_for_http_proxy_pool);
- DCHECK(!ssl_pool_for_http_proxy_pool);
return TransportConnectJob::CreateTransportConnectJob(
std::move(transport_socket_params), priority, common_connect_job_params,
delegate);
@@ -54,12 +50,8 @@
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
ConnectJob::Delegate* delegate,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool) {
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool) {
DCHECK(!http_proxy_pool_for_ssl_pool);
- DCHECK(!transport_pool_for_http_proxy_pool);
- DCHECK(!ssl_pool_for_http_proxy_pool);
return std::make_unique<SOCKSConnectJob>(priority, common_connect_job_params,
std::move(socks_socket_params),
delegate);
@@ -70,11 +62,7 @@
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
ConnectJob::Delegate* delegate,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool) {
- DCHECK(!transport_pool_for_http_proxy_pool);
- DCHECK(!ssl_pool_for_http_proxy_pool);
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool) {
return std::make_unique<SSLConnectJob>(
priority, common_connect_job_params, std::move(ssl_socket_params),
http_proxy_pool_for_ssl_pool, delegate);
@@ -85,13 +73,10 @@
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
ConnectJob::Delegate* delegate,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool) {
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool) {
DCHECK(!http_proxy_pool_for_ssl_pool);
return std::make_unique<HttpProxyConnectJob>(
priority, common_connect_job_params, std::move(http_proxy_socket_params),
- transport_pool_for_http_proxy_pool, ssl_pool_for_http_proxy_pool,
delegate);
}
@@ -144,9 +129,7 @@
SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
NetworkQualityEstimator* network_quality_estimator,
NetLog* net_log,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool)
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool)
: client_socket_factory_(client_socket_factory),
host_resolver_(host_resolver),
proxy_delegate_(proxy_delegate),
@@ -154,9 +137,7 @@
socket_performance_watcher_factory_(socket_performance_watcher_factory),
network_quality_estimator_(network_quality_estimator),
net_log_(net_log),
- http_proxy_pool_for_ssl_pool_(http_proxy_pool_for_ssl_pool),
- transport_pool_for_http_proxy_pool_(transport_pool_for_http_proxy_pool),
- ssl_pool_for_http_proxy_pool_(ssl_pool_for_http_proxy_pool) {}
+ http_proxy_pool_for_ssl_pool_(http_proxy_pool_for_ssl_pool) {}
TransportClientSocketPool::TransportConnectJobFactory::
~TransportConnectJobFactory() = default;
@@ -175,8 +156,7 @@
ssl_client_socket_context_, socket_performance_watcher_factory_,
network_quality_estimator_, net_log_,
nullptr /* websocket_endpoint_lock_manager */),
- delegate, http_proxy_pool_for_ssl_pool_,
- transport_pool_for_http_proxy_pool_, ssl_pool_for_http_proxy_pool_);
+ delegate, http_proxy_pool_for_ssl_pool_);
}
TransportClientSocketPool::TransportClientSocketPool(
@@ -196,9 +176,7 @@
SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
NetworkQualityEstimator* network_quality_estimator,
NetLog* net_log,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool)
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool)
: base_(this,
max_sockets,
max_sockets_per_group,
@@ -218,9 +196,7 @@
socket_performance_watcher_factory,
network_quality_estimator,
net_log,
- http_proxy_pool_for_ssl_pool,
- transport_pool_for_http_proxy_pool,
- ssl_pool_for_http_proxy_pool)),
+ http_proxy_pool_for_ssl_pool)),
client_socket_factory_(client_socket_factory),
ssl_config_service_(ssl_config_service) {
base_.EnableConnectBackupJobs();
@@ -228,10 +204,6 @@
ssl_config_service_->AddObserver(this);
if (http_proxy_pool_for_ssl_pool)
base_.AddLowerLayeredPool(http_proxy_pool_for_ssl_pool);
- if (transport_pool_for_http_proxy_pool)
- base_.AddLowerLayeredPool(transport_pool_for_http_proxy_pool);
- if (ssl_pool_for_http_proxy_pool)
- base_.AddLowerLayeredPool(ssl_pool_for_http_proxy_pool);
}
TransportClientSocketPool::~TransportClientSocketPool() {
diff --git a/net/socket/transport_client_socket_pool.h b/net/socket/transport_client_socket_pool.h
index 2352b86..143d31f 100644
--- a/net/socket/transport_client_socket_pool.h
+++ b/net/socket/transport_client_socket_pool.h
@@ -50,21 +50,16 @@
// WebSockets should be created.
//
// |http_proxy_pool_for_ssl_pool| is for the case of SSLConnectJobs that will
- // be layered on top of an http proxy socket pool.
+ // be layered on top of an HTTP proxy socket pool.
//
- // |transport_pool_for_http_proxy_pool| and |ssl_pool_for_http_proxy_pool| are
- // socket pools that sit beneath the current pool, for the HTTP proxy case.
- //
- // TODO(https://crbug.com/927084): Remove the TransportClientSocketPool
- // arguments.
+ // TODO(https://crbug.com/927084): Remove the |http_proxy_pool_for_ssl_pool|
+ // argument.
using CreateConnectJobCallback =
base::RepeatingCallback<std::unique_ptr<ConnectJob>(
RequestPriority priority,
const CommonConnectJobParams& common_connect_job_params,
ConnectJob::Delegate* delegate,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool)>;
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool)>;
// "Parameters" that own a single callback for creating a ConnectJob that can
// be of any type.
@@ -106,12 +101,7 @@
// |http_proxy_pool_for_ssl_pool| socket pool is used for HTTP proxy tunnels
// beneath the SSL socket pool.
//
- // If this is being used for an HTTP proxy socket pool, the
- // |transport_pool_for_http_proxy_pool| and |ssl_pool_for_http_proxy_pool| are
- // used for SSL and TCP connections beneath the HTTP proxy socket pool.
- //
- // TODO(https://crbug.com/927084): Remove all pool arguments, once
- // the socket pools are flat.
+ // TODO(https://crbug.com/927084): Remove that argument.
TransportClientSocketPool(
int max_sockets,
int max_sockets_per_group,
@@ -129,9 +119,7 @@
SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
NetworkQualityEstimator* network_quality_estimator,
NetLog* net_log,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool = nullptr,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool = nullptr,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool = nullptr);
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool = nullptr);
~TransportClientSocketPool() override;
@@ -203,9 +191,7 @@
SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
NetworkQualityEstimator* network_quality_estimator,
NetLog* net_log,
- TransportClientSocketPool* http_proxy_pool_for_ssl_pool,
- TransportClientSocketPool* transport_pool_for_http_proxy_pool,
- TransportClientSocketPool* ssl_pool_for_http_proxy_pool);
+ TransportClientSocketPool* http_proxy_pool_for_ssl_pool);
~TransportConnectJobFactory() override;
// ClientSocketPoolBase::ConnectJobFactory methods.
@@ -225,8 +211,6 @@
NetLog* const net_log_;
TransportClientSocketPool* const http_proxy_pool_for_ssl_pool_;
- TransportClientSocketPool* const transport_pool_for_http_proxy_pool_;
- TransportClientSocketPool* const ssl_pool_for_http_proxy_pool_;
DISALLOW_COPY_AND_ASSIGN(TransportConnectJobFactory);
};
diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc
index b3c8568..ad96a7b 100644
--- a/net/socket/websocket_transport_client_socket_pool.cc
+++ b/net/socket/websocket_transport_client_socket_pool.cc
@@ -155,9 +155,7 @@
network_quality_estimator_, pool_net_log_,
websocket_endpoint_lock_manager_),
connect_job_delegate.get(),
- nullptr /* http_proxy_pool_for_ssl_pool */,
- nullptr /* transport_pool_for_http_proxy_pool */,
- nullptr /* ssl_pool_for_http_proxy_pool */);
+ nullptr /* http_proxy_pool_for_ssl_pool */);
int result = connect_job_delegate->Connect(std::move(connect_job));