diff options
21 files changed, 360 insertions, 343 deletions
diff --git a/chrome/browser/net/preconnect.cc b/chrome/browser/net/preconnect.cc index d829c77..10aa8b0 100644 --- a/chrome/browser/net/preconnect.cc +++ b/chrome/browser/net/preconnect.cc @@ -87,8 +87,9 @@ void Preconnect::PreconnectOnIOThread(const GURL& url) { net::HttpNetworkSession* session = factory->GetSession(); scoped_refptr<net::TCPClientSocketPool> pool = session->tcp_socket_pool(); - net::TCPSocketParams params(url.host(), url.EffectiveIntPort(), net::LOW, - GURL(), false); + scoped_refptr<net::TCPSocketParams> params = + new net::TCPSocketParams(url.host(), url.EffectiveIntPort(), net::LOW, + GURL(), false); net::ClientSocketHandle handle; if (!callback_instance_) diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index 38e85f6..a029795 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -759,8 +759,9 @@ int HttpNetworkTransaction::DoInitConnection() { HostPortPair proxy_host_port_pair(proxy_server.HostNoBrackets(), proxy_server.port()); - TCPSocketParams tcp_params(proxy_host_port_pair, request_->priority, - request_->referrer, disable_resolver_cache); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams(proxy_host_port_pair, request_->priority, + request_->referrer, disable_resolver_cache); if (proxy_info_.is_socks()) { const char* socks_version; @@ -776,8 +777,9 @@ int HttpNetworkTransaction::DoInitConnection() { connection_group = StringPrintf("socks%s/%s", socks_version, connection_group.c_str()); - SOCKSSocketParams socks_params(tcp_params, socks_v5, endpoint_, - request_->priority, request_->referrer); + scoped_refptr<SOCKSSocketParams> socks_params = + new SOCKSSocketParams(tcp_params, socks_v5, endpoint_, + request_->priority, request_->referrer); rv = connection_->Init( connection_group, socks_params, request_->priority, @@ -791,9 +793,9 @@ int HttpNetworkTransaction::DoInitConnection() { establishing_tunnel_ = true; } - HttpProxySocketParams http_proxy_params(tcp_params, request_->url, - endpoint_, http_proxy_auth, - using_ssl_); + scoped_refptr<HttpProxySocketParams> http_proxy_params = + new HttpProxySocketParams(tcp_params, request_->url, endpoint_, + http_proxy_auth, using_ssl_); rv = connection_->Init(connection_group, http_proxy_params, request_->priority, &io_callback_, @@ -802,8 +804,9 @@ int HttpNetworkTransaction::DoInitConnection() { net_log_); } } else { - TCPSocketParams tcp_params(endpoint_, request_->priority, - request_->referrer, disable_resolver_cache); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams(endpoint_, request_->priority, request_->referrer, + disable_resolver_cache); rv = connection_->Init(connection_group, tcp_params, request_->priority, &io_callback_, session_->tcp_socket_pool(), net_log_); diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index 0a2fa31..976452d 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc @@ -5434,7 +5434,8 @@ TEST_F(HttpNetworkTransactionTest, scoped_refptr<SpdySession> spdy_session = session->spdy_session_pool()->Get(HostPortPair("www.google.com", 443), session, BoundNetLog()); - TCPSocketParams tcp_params("www.google.com", 443, MEDIUM, GURL(), false); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams("www.google.com", 443, MEDIUM, GURL(), false); spdy_session->Connect("www.google.com:443", tcp_params, MEDIUM); trans.reset(new HttpNetworkTransaction(session)); diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc index ce11bc3..31c7822 100644 --- a/net/http/http_proxy_client_socket_pool.cc +++ b/net/http/http_proxy_client_socket_pool.cc @@ -14,13 +14,28 @@ namespace net { +HttpProxySocketParams::HttpProxySocketParams( + const scoped_refptr<TCPSocketParams>& proxy_server, + const GURL& request_url, + HostPortPair endpoint, + scoped_refptr<HttpAuthController> auth_controller, + bool tunnel) + : tcp_params_(proxy_server), + request_url_(request_url), + endpoint_(endpoint), + auth_controller_(auth_controller), + tunnel_(tunnel) { +} + +HttpProxySocketParams::~HttpProxySocketParams() {} + // HttpProxyConnectJobs will time out after this many seconds. Note this is on // top of the timeout for the transport socket. static const int kHttpProxyConnectJobTimeoutInSeconds = 30; HttpProxyConnectJob::HttpProxyConnectJob( const std::string& group_name, - const HttpProxySocketParams& params, + const scoped_refptr<HttpProxySocketParams>& params, const base::TimeDelta& timeout_duration, const scoped_refptr<TCPClientSocketPool>& tcp_pool, const scoped_refptr<HostResolver>& host_resolver, @@ -97,9 +112,10 @@ int HttpProxyConnectJob::DoLoop(int result) { int HttpProxyConnectJob::DoTCPConnect() { next_state_ = kStateTCPConnectComplete; tcp_socket_handle_.reset(new ClientSocketHandle()); - return tcp_socket_handle_->Init(group_name(), params_.tcp_params(), - params_.tcp_params().destination().priority(), - &callback_, tcp_pool_, net_log()); + return tcp_socket_handle_->Init( + group_name(), params_->tcp_params(), + params_->tcp_params()->destination().priority(), &callback_, tcp_pool_, + net_log()); } int HttpProxyConnectJob::DoTCPConnectComplete(int result) { @@ -120,10 +136,10 @@ int HttpProxyConnectJob::DoHttpProxyConnect() { // Add a HttpProxy connection on top of the tcp socket. socket_.reset(new HttpProxyClientSocket(tcp_socket_handle_.release(), - params_.request_url(), - params_.endpoint(), - params_.auth_controller(), - params_.tunnel())); + params_->request_url(), + params_->endpoint(), + params_->auth_controller(), + params_->tunnel())); return socket_->Connect(&callback_); } @@ -174,8 +190,8 @@ int HttpProxyClientSocketPool::RequestSocket(const std::string& group_name, ClientSocketHandle* handle, CompletionCallback* callback, const BoundNetLog& net_log) { - const HttpProxySocketParams* casted_socket_params = - static_cast<const HttpProxySocketParams*>(socket_params); + const scoped_refptr<HttpProxySocketParams>* casted_socket_params = + static_cast<const scoped_refptr<HttpProxySocketParams>*>(socket_params); return base_.RequestSocket(group_name, *casted_socket_params, priority, handle, callback, net_log); diff --git a/net/http/http_proxy_client_socket_pool.h b/net/http/http_proxy_client_socket_pool.h index dc85c32..7a40424 100644 --- a/net/http/http_proxy_client_socket_pool.h +++ b/net/http/http_proxy_client_socket_pool.h @@ -8,6 +8,7 @@ #include <string> #include "base/basictypes.h" +#include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "base/time.h" #include "net/base/host_port_pair.h" @@ -24,20 +25,16 @@ class ClientSocketFactory; class ConnectJobFactory; class HttpAuthController; -class HttpProxySocketParams { +class HttpProxySocketParams : public base::RefCounted<HttpProxySocketParams> { public: - HttpProxySocketParams(const TCPSocketParams& proxy_server, + HttpProxySocketParams(const scoped_refptr<TCPSocketParams>& proxy_server, const GURL& request_url, HostPortPair endpoint, scoped_refptr<HttpAuthController> auth_controller, - bool tunnel) - : tcp_params_(proxy_server), - request_url_(request_url), - endpoint_(endpoint), - auth_controller_(auth_controller), - tunnel_(tunnel) { - } + bool tunnel); - const TCPSocketParams& tcp_params() const { return tcp_params_; } + const scoped_refptr<TCPSocketParams>& tcp_params() const { + return tcp_params_; + } const GURL& request_url() const { return request_url_; } const HostPortPair& endpoint() const { return endpoint_; } const scoped_refptr<HttpAuthController>& auth_controller() const { @@ -46,7 +43,10 @@ class HttpProxySocketParams { bool tunnel() const { return tunnel_; } private: - const TCPSocketParams tcp_params_; + friend class base::RefCounted<HttpProxySocketParams>; + ~HttpProxySocketParams(); + + const scoped_refptr<TCPSocketParams> tcp_params_; const GURL request_url_; const HostPortPair endpoint_; const scoped_refptr<HttpAuthController> auth_controller_; @@ -58,7 +58,7 @@ class HttpProxySocketParams { class HttpProxyConnectJob : public ConnectJob { public: HttpProxyConnectJob(const std::string& group_name, - const HttpProxySocketParams& params, + const scoped_refptr<HttpProxySocketParams>& params, const base::TimeDelta& timeout_duration, const scoped_refptr<TCPClientSocketPool>& tcp_pool, const scoped_refptr<HostResolver> &host_resolver, @@ -97,7 +97,7 @@ class HttpProxyConnectJob : public ConnectJob { int DoHttpProxyConnect(); int DoHttpProxyConnectComplete(int result); - HttpProxySocketParams params_; + scoped_refptr<HttpProxySocketParams> params_; const scoped_refptr<TCPClientSocketPool> tcp_pool_; const scoped_refptr<HostResolver> resolver_; diff --git a/net/http/http_proxy_client_socket_pool_unittest.cc b/net/http/http_proxy_client_socket_pool_unittest.cc index a3b6cca..fbd999e 100644 --- a/net/http/http_proxy_client_socket_pool_unittest.cc +++ b/net/http/http_proxy_client_socket_pool_unittest.cc @@ -84,16 +84,18 @@ class MockHttpAuthController : public HttpAuthController { class HttpProxyClientSocketPoolTest : public ClientSocketPoolTest { protected: HttpProxyClientSocketPoolTest() - : ignored_tcp_socket_params_( - HostPortPair("proxy", 80), MEDIUM, GURL(), false), + : ignored_tcp_socket_params_(new TCPSocketParams( + HostPortPair("proxy", 80), MEDIUM, GURL(), false)), tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), - notunnel_socket_params_(ignored_tcp_socket_params_, GURL("http://host"), - HostPortPair("host", 80), NULL, false), + notunnel_socket_params_(new HttpProxySocketParams( + ignored_tcp_socket_params_, GURL("http://host"), + HostPortPair("host", 80), NULL, false)), auth_controller_(new MockHttpAuthController), - tunnel_socket_params_(ignored_tcp_socket_params_, GURL("http://host"), - HostPortPair("host", 80), auth_controller_, true), + tunnel_socket_params_(new HttpProxySocketParams( + ignored_tcp_socket_params_, GURL("http://host"), + HostPortPair("host", 80), auth_controller_, true)), http_proxy_histograms_( new ClientSocketPoolHistograms("HttpProxyUnitTest")), pool_(new HttpProxyClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, @@ -105,14 +107,14 @@ class HttpProxyClientSocketPoolTest : public ClientSocketPoolTest { pool_, group_name, priority, tunnel_socket_params_); } - TCPSocketParams ignored_tcp_socket_params_; + scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; MockClientSocketFactory tcp_client_socket_factory_; scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; - HttpProxySocketParams notunnel_socket_params_; + scoped_refptr<HttpProxySocketParams> notunnel_socket_params_; scoped_refptr<MockHttpAuthController> auth_controller_; - HttpProxySocketParams tunnel_socket_params_; + scoped_refptr<HttpProxySocketParams> tunnel_socket_params_; scoped_refptr<ClientSocketPoolHistograms> http_proxy_histograms_; scoped_refptr<HttpProxyClientSocketPool> pool_; }; diff --git a/net/socket/client_socket_handle.h b/net/socket/client_socket_handle.h index cc6de9d..8ec4eb5 100644 --- a/net/socket/client_socket_handle.h +++ b/net/socket/client_socket_handle.h @@ -66,7 +66,7 @@ class ClientSocketHandle { // template <typename SocketParams, typename PoolType> int Init(const std::string& group_name, - const SocketParams& socket_params, + const scoped_refptr<SocketParams>& socket_params, RequestPriority priority, CompletionCallback* callback, const scoped_refptr<PoolType>& pool, @@ -161,7 +161,7 @@ class ClientSocketHandle { // Template function implementation: template <typename SocketParams, typename PoolType> int ClientSocketHandle::Init(const std::string& group_name, - const SocketParams& socket_params, + const scoped_refptr<SocketParams>& socket_params, RequestPriority priority, CompletionCallback* callback, const scoped_refptr<PoolType>& pool, @@ -169,9 +169,9 @@ int ClientSocketHandle::Init(const std::string& group_name, requesting_source_ = net_log.source(); CHECK(!group_name.empty()); - // Note that this will result in a link error if the SocketParams has not been - // registered for the PoolType via REGISTER_SOCKET_PARAMS_FOR_POOL (defined in - // client_socket_pool.h). + // Note that this will result in a compile error if the SocketParams has not + // been registered for the PoolType via REGISTER_SOCKET_PARAMS_FOR_POOL + // (defined in client_socket_pool.h). CheckIsValidSocketParamsForPool<PoolType, SocketParams>(); ResetInternal(true); pool_ = pool; diff --git a/net/socket/client_socket_pool.h b/net/socket/client_socket_pool.h index 1c3784f..493fff1 100644 --- a/net/socket/client_socket_pool.h +++ b/net/socket/client_socket_pool.h @@ -137,9 +137,10 @@ struct SocketParamTraits : public base::false_type { template <typename PoolType, typename SocketParams> void CheckIsValidSocketParamsForPool() { - COMPILE_ASSERT(!base::is_pointer<SocketParams>::value, + COMPILE_ASSERT(!base::is_pointer<scoped_refptr<SocketParams> >::value, socket_params_cannot_be_pointer); - COMPILE_ASSERT((SocketParamTraits<PoolType, SocketParams>::value), + COMPILE_ASSERT((SocketParamTraits<PoolType, + scoped_refptr<SocketParams> >::value), invalid_socket_params_for_pool); } @@ -147,7 +148,8 @@ void CheckIsValidSocketParamsForPool() { // should be optimized out by the compiler. #define REGISTER_SOCKET_PARAMS_FOR_POOL(pool_type, socket_params) \ template<> \ -struct SocketParamTraits<pool_type, socket_params> : public base::true_type { \ +struct SocketParamTraits<pool_type, scoped_refptr<socket_params> > \ + : public base::true_type { \ } } // namespace net diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h index 6e27969..d515ca5 100644 --- a/net/socket/client_socket_pool_base.h +++ b/net/socket/client_socket_pool_base.h @@ -457,16 +457,16 @@ class ClientSocketPoolBase { Request(ClientSocketHandle* handle, CompletionCallback* callback, RequestPriority priority, - const SocketParams& params, + const scoped_refptr<SocketParams>& params, const BoundNetLog& net_log) : internal::ClientSocketPoolBaseHelper::Request( handle, callback, priority, net_log), params_(params) {} - const SocketParams& params() const { return params_; } + const scoped_refptr<SocketParams>& params() const { return params_; } private: - SocketParams params_; + scoped_refptr<SocketParams> params_; }; class ConnectJobFactory { @@ -512,7 +512,7 @@ class ClientSocketPoolBase { // ClientSocketPoolBaseHelper::RequestSocket(). Note that the memory // ownership is transferred in the asynchronous (ERR_IO_PENDING) case. int RequestSocket(const std::string& group_name, - const SocketParams& params, + const scoped_refptr<SocketParams>& params, RequestPriority priority, ClientSocketHandle* handle, CompletionCallback* callback, diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index 3e1ec28..70cc604 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc @@ -8,6 +8,7 @@ #include "base/compiler_specific.h" #include "base/message_loop.h" #include "base/platform_thread.h" +#include "base/ref_counted.h" #include "base/scoped_vector.h" #include "base/string_util.h" #include "net/base/net_log.h" @@ -30,7 +31,11 @@ const int kDefaultMaxSockets = 4; const int kDefaultMaxSocketsPerGroup = 2; const net::RequestPriority kDefaultPriority = MEDIUM; -struct TestSocketParams {}; +class TestSocketParams : public base::RefCounted<TestSocketParams> { + private: + friend class base::RefCounted<TestSocketParams>; + ~TestSocketParams() {} +}; typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase; class MockClientSocket : public ClientSocket { @@ -328,10 +333,10 @@ class TestClientSocketPool : public ClientSocketPool { ClientSocketHandle* handle, CompletionCallback* callback, const BoundNetLog& net_log) { - const TestSocketParams* casted_socket_params = - static_cast<const TestSocketParams*>(params); - return base_.RequestSocket( - group_name, *casted_socket_params, priority, handle, callback, net_log); + const scoped_refptr<TestSocketParams>* casted_socket_params = + static_cast<const scoped_refptr<TestSocketParams>*>(params); + return base_.RequestSocket(group_name, *casted_socket_params, priority, + handle, callback, net_log); } virtual void CancelRequest( @@ -443,7 +448,8 @@ class TestConnectJobDelegate : public ConnectJob::Delegate { class ClientSocketPoolBaseTest : public ClientSocketPoolTest { protected: ClientSocketPoolBaseTest() - : histograms_(new ClientSocketPoolHistograms("ClientSocketPoolTest")) {} + : params_(new TestSocketParams()), + histograms_(new ClientSocketPoolHistograms("ClientSocketPoolTest")) {} void CreatePool(int max_sockets, int max_sockets_per_group) { CreatePoolWithIdleTimeouts( @@ -470,9 +476,8 @@ class ClientSocketPoolBaseTest : public ClientSocketPoolTest { int StartRequest(const std::string& group_name, net::RequestPriority priority) { - TestSocketParams params; return StartRequestUsingPool<TestClientSocketPool, TestSocketParams>( - pool_, group_name, priority, params); + pool_, group_name, priority, params_); } virtual void TearDown() { @@ -495,31 +500,18 @@ class ClientSocketPoolBaseTest : public ClientSocketPoolTest { MockClientSocketFactory client_socket_factory_; TestConnectJobFactory* connect_job_factory_; + scoped_refptr<TestSocketParams> params_; scoped_refptr<TestClientSocketPool> pool_; scoped_refptr<ClientSocketPoolHistograms> histograms_; }; -// Helper function which explicitly specifies the template parameters, since -// the compiler will infer (in this case, incorrectly) that NULL is of type int. -int InitHandle(ClientSocketHandle* handle, - const std::string& group_name, - net::RequestPriority priority, - CompletionCallback* callback, - const scoped_refptr<TestClientSocketPool>& pool, - const BoundNetLog& net_log) { - TestSocketParams params; - return handle->Init<TestSocketParams, TestClientSocketPool>( - group_name, params, priority, callback, pool, net_log); -} - // Even though a timeout is specified, it doesn't time out on a synchronous // completion. TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) { TestConnectJobDelegate delegate; ClientSocketHandle ignored; - TestSocketParams params; TestClientSocketPoolBase::Request request( - &ignored, NULL, kDefaultPriority, params, BoundNetLog()); + &ignored, NULL, kDefaultPriority, params_, BoundNetLog()); scoped_ptr<TestConnectJob> job( new TestConnectJob(TestConnectJob::kMockJob, "a", @@ -536,9 +528,8 @@ TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) { ClientSocketHandle ignored; CapturingNetLog log(CapturingNetLog::kUnbounded); - TestSocketParams params; TestClientSocketPoolBase::Request request( - &ignored, NULL, kDefaultPriority, params, BoundNetLog()); + &ignored, NULL, kDefaultPriority, params_, BoundNetLog()); // Deleted by TestConnectJobDelegate. TestConnectJob* job = new TestConnectJob(TestConnectJob::kMockPendingJob, @@ -576,8 +567,8 @@ TEST_F(ClientSocketPoolBaseTest, BasicSynchronous) { ClientSocketHandle handle; CapturingBoundNetLog log(CapturingNetLog::kUnbounded); - EXPECT_EQ(OK, InitHandle(&handle, "a", kDefaultPriority, &callback, pool_, - log.bound())); + EXPECT_EQ(OK, handle.Init("a", params_, kDefaultPriority, &callback, pool_, + log.bound())); EXPECT_TRUE(handle.is_initialized()); EXPECT_TRUE(handle.socket()); handle.Reset(); @@ -602,9 +593,9 @@ TEST_F(ClientSocketPoolBaseTest, InitConnectionFailure) { CapturingBoundNetLog log(CapturingNetLog::kUnbounded); TestSocketRequest req(&request_order_, &completion_count_); - EXPECT_EQ(ERR_CONNECTION_FAILED, - InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - log.bound())); + EXPECT_EQ(ERR_CONNECTION_FAILED, req.handle()->Init("a", params_, + kDefaultPriority, &req, + pool_, log.bound())); EXPECT_FALSE(req.handle()->socket()); EXPECT_EQ(3u, log.entries().size()); @@ -832,16 +823,14 @@ TEST_F(ClientSocketPoolBaseTest, StallAndThenCancelAndTriggerAvailableSocket) { ClientSocketHandle handle; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle, "a", kDefaultPriority, &callback, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); ClientSocketHandle handles[4]; for (size_t i = 0; i < arraysize(handles); ++i) { TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handles[i], "b", kDefaultPriority, &callback, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handles[i].Init("b", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); } // One will be stalled, cancel all the handles now. @@ -859,17 +848,16 @@ TEST_F(ClientSocketPoolBaseTest, CancelStalledSocketAtSocketLimit) { ClientSocketHandle handles[kDefaultMaxSockets]; TestCompletionCallback callbacks[kDefaultMaxSockets]; for (int i = 0; i < kDefaultMaxSockets; ++i) { - EXPECT_EQ(OK, - InitHandle(&handles[i], IntToString(i), kDefaultPriority, - &callbacks[i], pool_, BoundNetLog())); + EXPECT_EQ(OK, handles[i].Init(IntToString(i), params_, kDefaultPriority, + &callbacks[i], pool_, BoundNetLog())); } // Force a stalled group. ClientSocketHandle stalled_handle; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&stalled_handle, "foo", kDefaultPriority, &callback, - pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, stalled_handle.Init("foo", params_, + kDefaultPriority, &callback, + pool_, BoundNetLog())); // Cancel the stalled request. stalled_handle.Reset(); @@ -892,18 +880,18 @@ TEST_F(ClientSocketPoolBaseTest, CancelPendingSocketAtSocketLimit) { ClientSocketHandle handles[kDefaultMaxSockets]; for (int i = 0; i < kDefaultMaxSockets; ++i) { TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handles[i], IntToString(i), kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handles[i].Init(IntToString(i), params_, + kDefaultPriority, &callback, + pool_, BoundNetLog())); } // Force a stalled group. connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); ClientSocketHandle stalled_handle; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&stalled_handle, "foo", kDefaultPriority, &callback, - pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, stalled_handle.Init("foo", params_, + kDefaultPriority, &callback, + pool_, BoundNetLog())); // Since it is stalled, it should have no connect jobs. EXPECT_EQ(0, pool_->NumConnectJobsInGroup("foo")); @@ -943,18 +931,18 @@ TEST_F(ClientSocketPoolBaseTest, WaitForStalledSocketAtSocketLimit) { ClientSocketHandle handles[kDefaultMaxSockets]; for (int i = 0; i < kDefaultMaxSockets; ++i) { TestCompletionCallback callback; - EXPECT_EQ(OK, - InitHandle(&handles[i], StringPrintf("Take 2: %d", i), - kDefaultPriority, &callback, pool_, BoundNetLog())); + EXPECT_EQ(OK, handles[i].Init(StringPrintf("Take 2: %d", i), params_, + kDefaultPriority, &callback, pool_, + BoundNetLog())); } EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); EXPECT_EQ(0, pool_->IdleSocketCount()); // Now we will hit the socket limit. - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&stalled_handle, "foo", kDefaultPriority, &callback, - pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, stalled_handle.Init("foo", params_, + kDefaultPriority, &callback, + pool_, BoundNetLog())); // Dropping out of scope will close all handles and return them to idle. } @@ -976,9 +964,8 @@ TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketAtSocketLimitDeleteGroup) { for (int i = 0; i < kDefaultMaxSockets; ++i) { ClientSocketHandle handle; TestCompletionCallback callback; - EXPECT_EQ(OK, - InitHandle(&handle, IntToString(i), kDefaultPriority, &callback, - pool_, BoundNetLog())); + EXPECT_EQ(OK, handle.Init(IntToString(i), params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); } // Flush all the DoReleaseSocket tasks. @@ -993,10 +980,8 @@ TEST_F(ClientSocketPoolBaseTest, CloseIdleSocketAtSocketLimitDeleteGroup) { // "0" is special here, since it should be the first entry in the sorted map, // which is the one which we would close an idle socket for. We shouldn't // close an idle socket though, since we should reuse the idle socket. - EXPECT_EQ( - OK, - InitHandle( - &handle, "0", kDefaultPriority, &callback, pool_, BoundNetLog())); + EXPECT_EQ(OK, handle.Init("0", params_, kDefaultPriority, &callback, pool_, + BoundNetLog())); EXPECT_EQ(kDefaultMaxSockets, client_socket_factory_.allocation_count()); EXPECT_EQ(kDefaultMaxSockets - 1, pool_->IdleSocketCount()); @@ -1060,9 +1045,8 @@ TEST_F(ClientSocketPoolBaseTest, CancelRequestClearGroup) { connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); TestSocketRequest req(&request_order_, &completion_count_); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); req.handle()->Reset(); } @@ -1074,15 +1058,14 @@ TEST_F(ClientSocketPoolBaseTest, ConnectCancelConnect) { TestCompletionCallback callback; TestSocketRequest req(&request_order_, &completion_count_); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle, "a", kDefaultPriority, &callback, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); handle.Reset(); TestCompletionCallback callback2; - EXPECT_EQ(ERR_IO_PENDING, InitHandle(&handle, "a", kDefaultPriority, - &callback2, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback2, pool_, BoundNetLog())); EXPECT_EQ(OK, callback2.WaitForResult()); EXPECT_FALSE(callback.have_result()); @@ -1155,8 +1138,9 @@ class RequestSocketCallback : public CallbackRunner< Tuple1<int> > { } within_callback_ = true; TestCompletionCallback next_job_callback; - int rv = InitHandle(handle_, "a", kDefaultPriority, &next_job_callback, - pool_, BoundNetLog()); + scoped_refptr<TestSocketParams> params = new TestSocketParams(); + int rv = handle_->Init("a", params, kDefaultPriority, &next_job_callback, + pool_, BoundNetLog()); switch (next_job_type_) { case TestConnectJob::kMockJob: EXPECT_EQ(OK, rv); @@ -1205,8 +1189,8 @@ TEST_F(ClientSocketPoolBaseTest, RequestPendingJobTwice) { RequestSocketCallback callback( &handle, pool_.get(), connect_job_factory_, TestConnectJob::kMockPendingJob); - int rv = InitHandle(&handle, "a", kDefaultPriority, &callback, pool_, - BoundNetLog()); + int rv = handle.Init("a", params_, kDefaultPriority, &callback, pool_, + BoundNetLog()); ASSERT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(OK, callback.WaitForResult()); @@ -1219,8 +1203,8 @@ TEST_F(ClientSocketPoolBaseTest, RequestPendingJobThenSynchronous) { ClientSocketHandle handle; RequestSocketCallback callback( &handle, pool_.get(), connect_job_factory_, TestConnectJob::kMockJob); - int rv = InitHandle(&handle, "a", kDefaultPriority, &callback, pool_, - BoundNetLog()); + int rv = handle.Init("a", params_, kDefaultPriority, &callback, pool_, + BoundNetLog()); ASSERT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(OK, callback.WaitForResult()); @@ -1281,15 +1265,15 @@ TEST_F(ClientSocketPoolBaseTest, CancelActiveRequestThenRequestSocket) { connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); TestSocketRequest req(&request_order_, &completion_count_); - int rv = InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - BoundNetLog()); + int rv = req.handle()->Init("a", params_, kDefaultPriority, &req, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); // Cancel the active request. req.handle()->Reset(); - rv = InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - BoundNetLog()); + rv = req.handle()->Init("a", params_, kDefaultPriority, &req, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(OK, req.WaitForResult()); @@ -1340,7 +1324,7 @@ TEST_F(ClientSocketPoolBaseTest, BasicAsynchronous) { connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); TestSocketRequest req(&request_order_, &completion_count_); CapturingBoundNetLog log(CapturingNetLog::kUnbounded); - int rv = InitHandle(req.handle(), "a", LOWEST, &req, pool_, log.bound()); + int rv = req.handle()->Init("a", params_, LOWEST, &req, pool_, log.bound()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", req.handle())); EXPECT_EQ(OK, req.WaitForResult()); @@ -1368,9 +1352,8 @@ TEST_F(ClientSocketPoolBaseTest, connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob); TestSocketRequest req(&request_order_, &completion_count_); CapturingBoundNetLog log(CapturingNetLog::kUnbounded); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - log.bound())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, log.bound())); EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", req.handle())); EXPECT_EQ(ERR_CONNECTION_FAILED, req.WaitForResult()); @@ -1393,13 +1376,11 @@ TEST_F(ClientSocketPoolBaseTest, TwoRequestsCancelOne) { TestSocketRequest req(&request_order_, &completion_count_); TestSocketRequest req2(&request_order_, &completion_count_); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req.handle(), "a", kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); CapturingBoundNetLog log2(CapturingNetLog::kUnbounded); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req2.handle(), "a", kDefaultPriority, &req2, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req2.handle()->Init("a", params_, kDefaultPriority, + &req2, pool_, BoundNetLog())); req.handle()->Reset(); @@ -1444,8 +1425,8 @@ TEST_F(ClientSocketPoolBaseTest, ReleaseSockets) { connect_job_factory_->set_job_type(TestConnectJob::kMockPendingJob); TestSocketRequest req1(&request_order_, &completion_count_); - int rv = InitHandle(req1.handle(), "a", kDefaultPriority, &req1, pool_, - BoundNetLog()); + int rv = req1.handle()->Init("a", params_, kDefaultPriority, &req1, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(OK, req1.WaitForResult()); @@ -1454,12 +1435,12 @@ TEST_F(ClientSocketPoolBaseTest, ReleaseSockets) { connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); TestSocketRequest req2(&request_order_, &completion_count_); - rv = InitHandle(req2.handle(), "a", kDefaultPriority, &req2, pool_, - BoundNetLog()); + rv = req2.handle()->Init("a", params_, kDefaultPriority, &req2, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); TestSocketRequest req3(&request_order_, &completion_count_); - rv = InitHandle(req3.handle(), "a", kDefaultPriority, &req3, pool_, - BoundNetLog()); + rv = req3.handle()->Init("a", params_, kDefaultPriority, &req3, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); // Both Requests 2 and 3 are pending. We release socket 1 which should @@ -1490,21 +1471,21 @@ TEST_F(ClientSocketPoolBaseTest, PendingJobCompletionOrder) { connect_job_factory_->set_job_type(TestConnectJob::kMockPendingFailingJob); TestSocketRequest req1(&request_order_, &completion_count_); - int rv = InitHandle(req1.handle(), "a", kDefaultPriority, &req1, pool_, - BoundNetLog()); + int rv = req1.handle()->Init("a", params_, kDefaultPriority, &req1, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); TestSocketRequest req2(&request_order_, &completion_count_); - rv = InitHandle(req2.handle(), "a", kDefaultPriority, &req2, pool_, - BoundNetLog()); + rv = req2.handle()->Init("a", params_, kDefaultPriority, &req2, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); // The pending job is sync. connect_job_factory_->set_job_type(TestConnectJob::kMockJob); TestSocketRequest req3(&request_order_, &completion_count_); - rv = InitHandle(req3.handle(), "a", kDefaultPriority, &req3, pool_, - BoundNetLog()); + rv = req3.handle()->Init("a", params_, kDefaultPriority, &req3, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(ERR_CONNECTION_FAILED, req1.WaitForResult()); @@ -1523,16 +1504,16 @@ TEST_F(ClientSocketPoolBaseTest, LoadState) { TestConnectJob::kMockAdvancingLoadStateJob); TestSocketRequest req1(&request_order_, &completion_count_); - int rv = InitHandle(req1.handle(), "a", kDefaultPriority, &req1, pool_, - BoundNetLog()); + int rv = req1.handle()->Init("a", params_, kDefaultPriority, &req1, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(LOAD_STATE_IDLE, req1.handle()->GetLoadState()); MessageLoop::current()->RunAllPending(); TestSocketRequest req2(&request_order_, &completion_count_); - rv = InitHandle(req2.handle(), "a", kDefaultPriority, &req2, pool_, - BoundNetLog()); + rv = req2.handle()->Init("a", params_, kDefaultPriority, &req2, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_NE(LOAD_STATE_IDLE, req1.handle()->GetLoadState()); EXPECT_NE(LOAD_STATE_IDLE, req2.handle()->GetLoadState()); @@ -1543,9 +1524,10 @@ TEST_F(ClientSocketPoolBaseTest, Recoverable) { connect_job_factory_->set_job_type(TestConnectJob::kMockRecoverableJob); TestSocketRequest req(&request_order_, &completion_count_); - EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, InitHandle(req.handle(), "a", - kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, req.handle()->Init("a", params_, + kDefaultPriority, + &req, pool_, + BoundNetLog())); EXPECT_TRUE(req.handle()->is_initialized()); EXPECT_TRUE(req.handle()->socket()); req.handle()->Reset(); @@ -1557,8 +1539,8 @@ TEST_F(ClientSocketPoolBaseTest, AsyncRecoverable) { connect_job_factory_->set_job_type( TestConnectJob::kMockPendingRecoverableJob); TestSocketRequest req(&request_order_, &completion_count_); - int rv = InitHandle(req.handle(), "a", LOWEST, &req, pool_, BoundNetLog()); - EXPECT_EQ(ERR_IO_PENDING, rv); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", req.handle())); EXPECT_EQ(ERR_PROXY_AUTH_REQUESTED, req.WaitForResult()); EXPECT_TRUE(req.handle()->is_initialized()); @@ -1566,7 +1548,6 @@ TEST_F(ClientSocketPoolBaseTest, AsyncRecoverable) { req.handle()->Reset(); } - TEST_F(ClientSocketPoolBaseTest, CleanupTimedOutIdleSockets) { CreatePoolWithIdleTimeouts( kDefaultMaxSockets, kDefaultMaxSocketsPerGroup, @@ -1578,12 +1559,12 @@ TEST_F(ClientSocketPoolBaseTest, CleanupTimedOutIdleSockets) { // Startup two mock pending connect jobs, which will sit in the MessageLoop. TestSocketRequest req(&request_order_, &completion_count_); - int rv = InitHandle(req.handle(), "a", LOWEST, &req, pool_, BoundNetLog()); + int rv = req.handle()->Init("a", params_, LOWEST, &req, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", req.handle())); TestSocketRequest req2(&request_order_, &completion_count_); - rv = InitHandle(req2.handle(), "a", LOWEST, &req2, pool_, BoundNetLog()); + rv = req2.handle()->Init("a", params_, LOWEST, &req2, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_EQ(LOAD_STATE_CONNECTING, pool_->GetLoadState("a", req2.handle())); @@ -1610,7 +1591,7 @@ TEST_F(ClientSocketPoolBaseTest, CleanupTimedOutIdleSockets) { pool_->CleanupTimedOutIdleSockets(); CapturingBoundNetLog log(CapturingNetLog::kUnbounded); - rv = InitHandle(req.handle(), "a", LOWEST, &req, pool_, log.bound()); + rv = req.handle()->Init("a", params_, LOWEST, &req, pool_, log.bound()); EXPECT_EQ(OK, rv); EXPECT_TRUE(req.handle()->is_reused()); EXPECT_TRUE(LogContainsEntryWithType( @@ -1630,19 +1611,19 @@ TEST_F(ClientSocketPoolBaseTest, MultipleReleasingDisconnectedSockets) { // Startup 4 connect jobs. Two of them will be pending. TestSocketRequest req(&request_order_, &completion_count_); - int rv = InitHandle(req.handle(), "a", LOWEST, &req, pool_, BoundNetLog()); + int rv = req.handle()->Init("a", params_, LOWEST, &req, pool_, BoundNetLog()); EXPECT_EQ(OK, rv); TestSocketRequest req2(&request_order_, &completion_count_); - rv = InitHandle(req2.handle(), "a", LOWEST, &req2, pool_, BoundNetLog()); + rv = req2.handle()->Init("a", params_, LOWEST, &req2, pool_, BoundNetLog()); EXPECT_EQ(OK, rv); TestSocketRequest req3(&request_order_, &completion_count_); - rv = InitHandle(req3.handle(), "a", LOWEST, &req3, pool_, BoundNetLog()); + rv = req3.handle()->Init("a", params_, LOWEST, &req3, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); TestSocketRequest req4(&request_order_, &completion_count_); - rv = InitHandle(req4.handle(), "a", LOWEST, &req4, pool_, BoundNetLog()); + rv = req4.handle()->Init("a", params_, LOWEST, &req4, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); // Release two disconnected sockets. @@ -1677,12 +1658,10 @@ TEST_F(ClientSocketPoolBaseTest, SocketLimitReleasingSockets) { for (int i = 0; i < 2; ++i) { req_a[i].reset(new TestSocketRequest(&request_order_, &completion_count_)); req_b[i].reset(new TestSocketRequest(&request_order_, &completion_count_)); - EXPECT_EQ(OK, - InitHandle(req_a[i]->handle(), "a", LOWEST, req_a[i].get(), pool_, - BoundNetLog())); - EXPECT_EQ(OK, - InitHandle(req_b[i]->handle(), "b", LOWEST, req_b[i].get(), pool_, - BoundNetLog())); + EXPECT_EQ(OK, req_a[i]->handle()->Init("a", params_, LOWEST, req_a[i].get(), + pool_, BoundNetLog())); + EXPECT_EQ(OK, req_b[i]->handle()->Init("b", params_, LOWEST, req_b[i].get(), + pool_, BoundNetLog())); } // Make 4 pending requests, 2 per group. @@ -1690,12 +1669,12 @@ TEST_F(ClientSocketPoolBaseTest, SocketLimitReleasingSockets) { for (int i = 2; i < 4; ++i) { req_a[i].reset(new TestSocketRequest(&request_order_, &completion_count_)); req_b[i].reset(new TestSocketRequest(&request_order_, &completion_count_)); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req_a[i]->handle(), "a", LOWEST, req_a[i].get(), pool_, - BoundNetLog())); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(req_b[i]->handle(), "b", LOWEST, req_b[i].get(), pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req_a[i]->handle()->Init("a", params_, LOWEST, + req_a[i].get(), pool_, + BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req_b[i]->handle()->Init("b", params_, LOWEST, + req_b[i].get(), pool_, + BoundNetLog())); } // Release b's socket first. The order is important, because in @@ -1768,12 +1747,13 @@ class TestReleasingSocketRequest : public CallbackRunner< Tuple1<int> > { virtual void RunWithParams(const Tuple1<int>& params) { callback_.RunWithParams(params); handle_.Reset(); - EXPECT_EQ(ERR_IO_PENDING, InitHandle(&handle2_, "a", kDefaultPriority, - &callback2_, pool_, BoundNetLog())); + scoped_refptr<TestSocketParams> con_params = new TestSocketParams(); + EXPECT_EQ(ERR_IO_PENDING, handle2_.Init("a", con_params, kDefaultPriority, + &callback2_, pool_, BoundNetLog())); } private: - TestClientSocketPool* const pool_; + scoped_refptr<TestClientSocketPool> pool_; ClientSocketHandle handle_; ClientSocketHandle handle2_; TestCompletionCallback callback_; @@ -1794,9 +1774,8 @@ TEST_F(ClientSocketPoolBaseTest, CallbackThatReleasesPool) { ClientSocketHandle handle; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); // Simulate flushing the pool. pool_ = NULL; @@ -1811,9 +1790,8 @@ TEST_F(ClientSocketPoolBaseTest, DoNotReuseSocketAfterFlush) { ClientSocketHandle handle; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); EXPECT_EQ(OK, callback.WaitForResult()); EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); @@ -1822,9 +1800,8 @@ TEST_F(ClientSocketPoolBaseTest, DoNotReuseSocketAfterFlush) { handle.Reset(); MessageLoop::current()->RunAllPending(); - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); EXPECT_EQ(OK, callback.WaitForResult()); EXPECT_EQ(ClientSocketHandle::UNUSED, handle.reuse_type()); } @@ -1841,19 +1818,16 @@ TEST_F(ClientSocketPoolBaseTest, BackupSocketCancelAtMaxSockets) { connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); ClientSocketHandle handle; TestCompletionCallback callback; - EXPECT_EQ( - ERR_IO_PENDING, - InitHandle( - &handle, "bar", kDefaultPriority, &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("bar", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); // Start (MaxSockets - 1) connected sockets to reach max sockets. connect_job_factory_->set_job_type(TestConnectJob::kMockJob); ClientSocketHandle handles[kDefaultMaxSockets]; for (int i = 1; i < kDefaultMaxSockets; ++i) { TestCompletionCallback callback; - EXPECT_EQ(OK, - InitHandle(&handles[i], "bar", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(OK, handles[i].Init("bar", params_, kDefaultPriority, &callback, + pool_, BoundNetLog())); } MessageLoop::current()->RunAllPending(); @@ -1878,9 +1852,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingWaitingForConnect) { ClientSocketHandle handle1; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle1, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle1.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); EXPECT_EQ(OK, callback.WaitForResult()); // No idle sockets, no pending jobs. @@ -1890,9 +1863,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingWaitingForConnect) { // Create a second socket to the same host, but this one will wait. connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); ClientSocketHandle handle2; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle2, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle2.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); // No idle sockets, and one connecting job. EXPECT_EQ(0, pool_->IdleSocketCount()); EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); @@ -1928,9 +1900,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtGroupCapacity) { ClientSocketHandle handle1; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle1, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle1.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); EXPECT_EQ(OK, callback.WaitForResult()); // No idle sockets, no pending jobs. @@ -1940,9 +1911,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtGroupCapacity) { // Create a second socket to the same host, but this one will wait. connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); ClientSocketHandle handle2; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle2, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle2.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); // No idle sockets, and one connecting job. EXPECT_EQ(0, pool_->IdleSocketCount()); EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); @@ -1980,9 +1950,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtStall) { ClientSocketHandle handle1; TestCompletionCallback callback; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle1, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle1.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); EXPECT_EQ(OK, callback.WaitForResult()); // No idle sockets, no pending jobs. @@ -1992,9 +1961,8 @@ TEST_F(ClientSocketPoolBaseTest, DelayedSocketBindingAtStall) { // Create a second socket to the same host, but this one will wait. connect_job_factory_->set_job_type(TestConnectJob::kMockWaitingJob); ClientSocketHandle handle2; - EXPECT_EQ(ERR_IO_PENDING, - InitHandle(&handle2, "a", kDefaultPriority, - &callback, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle2.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); // No idle sockets, and one connecting job. EXPECT_EQ(0, pool_->IdleSocketCount()); EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h index 0824d39..1087dbd 100644 --- a/net/socket/socket_test_util.h +++ b/net/socket/socket_test_util.h @@ -569,7 +569,7 @@ class ClientSocketPoolTest : public testing::Test { int StartRequestUsingPool(const scoped_refptr<PoolType>& socket_pool, const std::string& group_name, RequestPriority priority, - const SocketParams& socket_params) { + const scoped_refptr<SocketParams>& socket_params) { DCHECK(socket_pool.get()); TestSocketRequest* request = new TestSocketRequest(&request_order_, &completion_count_); diff --git a/net/socket/socks_client_socket_pool.cc b/net/socket/socks_client_socket_pool.cc index 3e025cb..f04af19 100644 --- a/net/socket/socks_client_socket_pool.cc +++ b/net/socket/socks_client_socket_pool.cc @@ -15,13 +15,31 @@ namespace net { +SOCKSSocketParams::SOCKSSocketParams( + const scoped_refptr<TCPSocketParams>& proxy_server, + bool socks_v5, + const HostPortPair& host_port_pair, + RequestPriority priority, + const GURL& referrer) + : tcp_params_(proxy_server), + destination_(host_port_pair.host, host_port_pair.port), + socks_v5_(socks_v5) { + // The referrer is used by the DNS prefetch system to correlate resolutions + // with the page that triggered them. It doesn't impact the actual addresses + // that we resolve to. + destination_.set_referrer(referrer); + destination_.set_priority(priority); +} + +SOCKSSocketParams::~SOCKSSocketParams() {} + // SOCKSConnectJobs will time out after this many seconds. Note this is on // top of the timeout for the transport socket. static const int kSOCKSConnectJobTimeoutInSeconds = 30; SOCKSConnectJob::SOCKSConnectJob( const std::string& group_name, - const SOCKSSocketParams& socks_params, + const scoped_refptr<SOCKSSocketParams>& socks_params, const base::TimeDelta& timeout_duration, const scoped_refptr<TCPClientSocketPool>& tcp_pool, const scoped_refptr<HostResolver>& host_resolver, @@ -101,8 +119,8 @@ int SOCKSConnectJob::DoLoop(int result) { int SOCKSConnectJob::DoTCPConnect() { next_state_ = kStateTCPConnectComplete; tcp_socket_handle_.reset(new ClientSocketHandle()); - return tcp_socket_handle_->Init(group_name(), socks_params_.tcp_params(), - socks_params_.destination().priority(), + return tcp_socket_handle_->Init(group_name(), socks_params_->tcp_params(), + socks_params_->destination().priority(), &callback_, tcp_pool_, net_log()); } @@ -122,12 +140,12 @@ int SOCKSConnectJob::DoSOCKSConnect() { next_state_ = kStateSOCKSConnectComplete; // Add a SOCKS connection on top of the tcp socket. - if (socks_params_.is_socks_v5()) { + if (socks_params_->is_socks_v5()) { socket_.reset(new SOCKS5ClientSocket(tcp_socket_handle_.release(), - socks_params_.destination())); + socks_params_->destination())); } else { socket_.reset(new SOCKSClientSocket(tcp_socket_handle_.release(), - socks_params_.destination(), + socks_params_->destination(), resolver_)); } return socket_->Connect(&callback_); @@ -173,30 +191,26 @@ SOCKSClientSocketPool::SOCKSClientSocketPool( SOCKSClientSocketPool::~SOCKSClientSocketPool() {} -int SOCKSClientSocketPool::RequestSocket( - const std::string& group_name, - const void* socket_params, - RequestPriority priority, - ClientSocketHandle* handle, - CompletionCallback* callback, - const BoundNetLog& net_log) { - const SOCKSSocketParams* casted_socket_params = - static_cast<const SOCKSSocketParams*>(socket_params); +int SOCKSClientSocketPool::RequestSocket(const std::string& group_name, + const void* socket_params, + RequestPriority priority, + ClientSocketHandle* handle, + CompletionCallback* callback, + const BoundNetLog& net_log) { + const scoped_refptr<SOCKSSocketParams>* casted_socket_params = + static_cast<const scoped_refptr<SOCKSSocketParams>*>(socket_params); return base_.RequestSocket(group_name, *casted_socket_params, priority, handle, callback, net_log); } -void SOCKSClientSocketPool::CancelRequest( - const std::string& group_name, - const ClientSocketHandle* handle) { +void SOCKSClientSocketPool::CancelRequest(const std::string& group_name, + const ClientSocketHandle* handle) { base_.CancelRequest(group_name, handle); } -void SOCKSClientSocketPool::ReleaseSocket( - const std::string& group_name, - ClientSocket* socket, - int id) { +void SOCKSClientSocketPool::ReleaseSocket(const std::string& group_name, + ClientSocket* socket, int id) { base_.ReleaseSocket(group_name, socket, id); } diff --git a/net/socket/socks_client_socket_pool.h b/net/socket/socks_client_socket_pool.h index 7da2af54..6a2ed80 100644 --- a/net/socket/socks_client_socket_pool.h +++ b/net/socket/socks_client_socket_pool.h @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" +#include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "base/time.h" #include "net/base/host_port_pair.h" @@ -24,28 +25,24 @@ namespace net { class ClientSocketFactory; class ConnectJobFactory; -class SOCKSSocketParams { +class SOCKSSocketParams : public base::RefCounted<SOCKSSocketParams> { public: - SOCKSSocketParams(const TCPSocketParams& proxy_server, bool socks_v5, - const HostPortPair& host_port_pair, - RequestPriority priority, const GURL& referrer) - : tcp_params_(proxy_server), - destination_(host_port_pair.host, host_port_pair.port), - socks_v5_(socks_v5) { - // The referrer is used by the DNS prefetch system to correlate resolutions - // with the page that triggered them. It doesn't impact the actual addresses - // that we resolve to. - destination_.set_referrer(referrer); - destination_.set_priority(priority); - } + SOCKSSocketParams(const scoped_refptr<TCPSocketParams>& proxy_server, + bool socks_v5, const HostPortPair& host_port_pair, + RequestPriority priority, const GURL& referrer); - const TCPSocketParams& tcp_params() const { return tcp_params_; } + const scoped_refptr<TCPSocketParams>& tcp_params() const { + return tcp_params_; + } const HostResolver::RequestInfo& destination() const { return destination_; } bool is_socks_v5() const { return socks_v5_; } private: + friend class base::RefCounted<SOCKSSocketParams>; + ~SOCKSSocketParams(); + // The tcp connection must point toward the proxy server. - const TCPSocketParams tcp_params_; + const scoped_refptr<TCPSocketParams> tcp_params_; // This is the HTTP destination. HostResolver::RequestInfo destination_; const bool socks_v5_; @@ -56,7 +53,7 @@ class SOCKSSocketParams { class SOCKSConnectJob : public ConnectJob { public: SOCKSConnectJob(const std::string& group_name, - const SOCKSSocketParams& params, + const scoped_refptr<SOCKSSocketParams>& params, const base::TimeDelta& timeout_duration, const scoped_refptr<TCPClientSocketPool>& tcp_pool, const scoped_refptr<HostResolver> &host_resolver, @@ -91,7 +88,7 @@ class SOCKSConnectJob : public ConnectJob { int DoSOCKSConnect(); int DoSOCKSConnectComplete(int result); - SOCKSSocketParams socks_params_; + scoped_refptr<SOCKSSocketParams> socks_params_; const scoped_refptr<TCPClientSocketPool> tcp_pool_; const scoped_refptr<HostResolver> resolver_; diff --git a/net/socket/socks_client_socket_pool_unittest.cc b/net/socket/socks_client_socket_pool_unittest.cc index b46789e..14e2bee 100644 --- a/net/socket/socks_client_socket_pool_unittest.cc +++ b/net/socket/socks_client_socket_pool_unittest.cc @@ -53,13 +53,14 @@ class SOCKSClientSocketPoolTest : public ClientSocketPoolTest { }; SOCKSClientSocketPoolTest() - : ignored_tcp_socket_params_( - HostPortPair("proxy", 80), MEDIUM, GURL(), false), + : ignored_tcp_socket_params_(new TCPSocketParams( + HostPortPair("proxy", 80), MEDIUM, GURL(), false)), tcp_histograms_(new ClientSocketPoolHistograms("MockTCP")), tcp_socket_pool_(new MockTCPClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, tcp_histograms_, &tcp_client_socket_factory_)), - ignored_socket_params_(ignored_tcp_socket_params_, true, - HostPortPair("host", 80), MEDIUM, GURL()), + ignored_socket_params_(new SOCKSSocketParams( + ignored_tcp_socket_params_, true, HostPortPair("host", 80), MEDIUM, + GURL())), socks_histograms_(new ClientSocketPoolHistograms("SOCKSUnitTest")), pool_(new SOCKSClientSocketPool(kMaxSockets, kMaxSocketsPerGroup, socks_histograms_, NULL, tcp_socket_pool_, NULL)) { @@ -70,12 +71,12 @@ class SOCKSClientSocketPoolTest : public ClientSocketPoolTest { pool_, group_name, priority, ignored_socket_params_); } - TCPSocketParams ignored_tcp_socket_params_; + scoped_refptr<TCPSocketParams> ignored_tcp_socket_params_; scoped_refptr<ClientSocketPoolHistograms> tcp_histograms_; MockClientSocketFactory tcp_client_socket_factory_; scoped_refptr<MockTCPClientSocketPool> tcp_socket_pool_; - SOCKSSocketParams ignored_socket_params_; + scoped_refptr<SOCKSSocketParams> ignored_socket_params_; scoped_refptr<ClientSocketPoolHistograms> socks_histograms_; scoped_refptr<SOCKSClientSocketPool> pool_; }; diff --git a/net/socket/tcp_client_socket_pool.cc b/net/socket/tcp_client_socket_pool.cc index 7937ef9..7d7c110 100644 --- a/net/socket/tcp_client_socket_pool.cc +++ b/net/socket/tcp_client_socket_pool.cc @@ -20,6 +20,23 @@ using base::TimeDelta; namespace net { +TCPSocketParams::TCPSocketParams(const HostPortPair& host_port_pair, + RequestPriority priority, const GURL& referrer, + bool disable_resolver_cache) + : destination_(host_port_pair.host, host_port_pair.port) { + Initialize(priority, referrer, disable_resolver_cache); +} + +// TODO(willchan): Update all unittests so we don't need this. +TCPSocketParams::TCPSocketParams(const std::string& host, int port, + RequestPriority priority, const GURL& referrer, + bool disable_resolver_cache) + : destination_(host, port) { + Initialize(priority, referrer, disable_resolver_cache); +} + +TCPSocketParams::~TCPSocketParams() {} + // TCPConnectJobs will time out after this many seconds. Note this is the total // time, including both host resolution and TCP connect() times. // @@ -33,7 +50,7 @@ static const int kTCPConnectJobTimeoutInSeconds = 240; // 4 minutes. TCPConnectJob::TCPConnectJob( const std::string& group_name, - const TCPSocketParams& params, + const scoped_refptr<TCPSocketParams>& params, base::TimeDelta timeout_duration, ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, @@ -113,7 +130,7 @@ int TCPConnectJob::DoLoop(int result) { int TCPConnectJob::DoResolveHost() { next_state_ = kStateResolveHostComplete; - return resolver_.Resolve(params_.destination(), &addresses_, &callback_, + return resolver_.Resolve(params_->destination(), &addresses_, &callback_, net_log()); } @@ -197,8 +214,8 @@ int TCPClientSocketPool::RequestSocket( ClientSocketHandle* handle, CompletionCallback* callback, const BoundNetLog& net_log) { - const TCPSocketParams* casted_params = - static_cast<const TCPSocketParams*>(params); + const scoped_refptr<TCPSocketParams>* casted_params = + static_cast<const scoped_refptr<TCPSocketParams>*>(params); if (net_log.HasListener()) { // TODO(eroman): Split out the host and port parameters. @@ -207,8 +224,8 @@ int TCPClientSocketPool::RequestSocket( new NetLogStringParameter( "host_and_port", StringPrintf("%s [port %d]", - casted_params->destination().hostname().c_str(), - casted_params->destination().port()))); + casted_params->get()->destination().hostname().c_str(), + casted_params->get()->destination().port()))); } return base_.RequestSocket(group_name, *casted_params, priority, handle, diff --git a/net/socket/tcp_client_socket_pool.h b/net/socket/tcp_client_socket_pool.h index 6c7d483..49edfed 100644 --- a/net/socket/tcp_client_socket_pool.h +++ b/net/socket/tcp_client_socket_pool.h @@ -22,24 +22,21 @@ namespace net { class ClientSocketFactory; -class TCPSocketParams { +class TCPSocketParams : public base::RefCounted<TCPSocketParams> { public: TCPSocketParams(const HostPortPair& host_port_pair, RequestPriority priority, - const GURL& referrer, bool disable_resolver_cache) - : destination_(host_port_pair.host, host_port_pair.port) { - Initialize(priority, referrer, disable_resolver_cache); - } + const GURL& referrer, bool disable_resolver_cache); // TODO(willchan): Update all unittests so we don't need this. TCPSocketParams(const std::string& host, int port, RequestPriority priority, - const GURL& referrer, bool disable_resolver_cache) - : destination_(host, port) { - Initialize(priority, referrer, disable_resolver_cache); - } + const GURL& referrer, bool disable_resolver_cache); - HostResolver::RequestInfo destination() const { return destination_; } + const HostResolver::RequestInfo& destination() const { return destination_; } private: + friend class base::RefCounted<TCPSocketParams>; + ~TCPSocketParams(); + void Initialize(RequestPriority priority, const GURL& referrer, bool disable_resolver_cache) { // The referrer is used by the DNS prefetch system to correlate resolutions @@ -59,7 +56,7 @@ class TCPSocketParams { class TCPConnectJob : public ConnectJob { public: TCPConnectJob(const std::string& group_name, - const TCPSocketParams& params, + const scoped_refptr<TCPSocketParams>& params, base::TimeDelta timeout_duration, ClientSocketFactory* client_socket_factory, HostResolver* host_resolver, @@ -94,7 +91,7 @@ class TCPConnectJob : public ConnectJob { int DoTCPConnect(); int DoTCPConnectComplete(int result); - const TCPSocketParams params_; + scoped_refptr<TCPSocketParams> params_; ClientSocketFactory* const client_socket_factory_; CompletionCallbackImpl<TCPConnectJob> callback_; SingleRequestHostResolver resolver_; diff --git a/net/socket/tcp_client_socket_pool_unittest.cc b/net/socket/tcp_client_socket_pool_unittest.cc index 0aac7d7e..2b3408c 100644 --- a/net/socket/tcp_client_socket_pool_unittest.cc +++ b/net/socket/tcp_client_socket_pool_unittest.cc @@ -262,8 +262,10 @@ class MockClientSocketFactory : public ClientSocketFactory { class TCPClientSocketPoolTest : public ClientSocketPoolTest { protected: TCPClientSocketPoolTest() - : ignored_socket_params_( - HostPortPair("ignored", 80), MEDIUM, GURL(), false), + : params_(new TCPSocketParams(HostPortPair("www.google.com", 80), + kDefaultPriority, GURL(), false)), + low_params_(new TCPSocketParams(HostPortPair("www.google.com", 80), + LOW, GURL(), false)), histograms_(new ClientSocketPoolHistograms("TCPUnitTest")), host_resolver_(new MockHostResolver), pool_(new TCPClientSocketPool(kMaxSockets, @@ -275,11 +277,13 @@ class TCPClientSocketPoolTest : public ClientSocketPoolTest { } int StartRequest(const std::string& group_name, RequestPriority priority) { - return StartRequestUsingPool( - pool_, group_name, priority, ignored_socket_params_); + scoped_refptr<TCPSocketParams> params = new TCPSocketParams( + HostPortPair("www.google.com", 80), MEDIUM, GURL(), false); + return StartRequestUsingPool(pool_, group_name, priority, params); } - TCPSocketParams ignored_socket_params_; + scoped_refptr<TCPSocketParams> params_; + scoped_refptr<TCPSocketParams> low_params_; scoped_refptr<ClientSocketPoolHistograms> histograms_; scoped_refptr<MockHostResolver> host_resolver_; MockClientSocketFactory client_socket_factory_; @@ -289,8 +293,7 @@ class TCPClientSocketPoolTest : public ClientSocketPoolTest { TEST_F(TCPClientSocketPoolTest, Basic) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest(HostPortPair("www.google.com", 80), LOW, GURL(), false); - int rv = handle.Init("a", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("a", low_params_, LOW, &callback, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); @@ -305,8 +308,8 @@ TEST_F(TCPClientSocketPoolTest, Basic) { TEST_F(TCPClientSocketPoolTest, InitHostResolutionFailure) { host_resolver_->rules()->AddSimulatedFailure("unresolvable.host.name"); TestSocketRequest req(&request_order_, &completion_count_); - TCPSocketParams dest("unresolvable.host.name", 80, kDefaultPriority, GURL(), - false); + scoped_refptr<TCPSocketParams> dest = new TCPSocketParams( + "unresolvable.host.name", 80, kDefaultPriority, GURL(), false); EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", dest, kDefaultPriority, &req, pool_, BoundNetLog())); @@ -317,17 +320,15 @@ TEST_F(TCPClientSocketPoolTest, InitConnectionFailure) { client_socket_factory_.set_client_socket_type( MockClientSocketFactory::MOCK_FAILING_CLIENT_SOCKET); TestSocketRequest req(&request_order_, &completion_count_); - TCPSocketParams dest("a", 80, kDefaultPriority, GURL(), false); - EXPECT_EQ(ERR_IO_PENDING, - req.handle()->Init("a", dest, kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); EXPECT_EQ(ERR_CONNECTION_FAILED, req.WaitForResult()); // Make the host resolutions complete synchronously this time. host_resolver_->set_synchronous_mode(true); - EXPECT_EQ(ERR_CONNECTION_FAILED, - req.handle()->Init("a", dest, kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_CONNECTION_FAILED, req.handle()->Init("a", params_, + kDefaultPriority, &req, + pool_, BoundNetLog())); } TEST_F(TCPClientSocketPoolTest, PendingRequests) { @@ -431,10 +432,8 @@ TEST_F(TCPClientSocketPoolTest, PendingRequests_NoKeepAlive) { // ClientSocketPool which will crash if the group was not cleared properly. TEST_F(TCPClientSocketPoolTest, CancelRequestClearGroup) { TestSocketRequest req(&request_order_, &completion_count_); - TCPSocketParams dest("www.google.com", 80, kDefaultPriority, GURL(), false); - EXPECT_EQ(ERR_IO_PENDING, - req.handle()->Init("a", dest, kDefaultPriority, &req, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); req.handle()->Reset(); // There is a race condition here. If the worker pool doesn't post the task @@ -450,13 +449,10 @@ TEST_F(TCPClientSocketPoolTest, TwoRequestsCancelOne) { TestSocketRequest req(&request_order_, &completion_count_); TestSocketRequest req2(&request_order_, &completion_count_); - TCPSocketParams dest("www.google.com", 80, kDefaultPriority, GURL(), false); - EXPECT_EQ(ERR_IO_PENDING, - req.handle()->Init("a", dest, kDefaultPriority, &req, pool_, - BoundNetLog())); - EXPECT_EQ(ERR_IO_PENDING, - req2.handle()->Init("a", dest, kDefaultPriority, &req2, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req.handle()->Init("a", params_, kDefaultPriority, + &req, pool_, BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, req2.handle()->Init("a", params_, kDefaultPriority, + &req2, pool_, BoundNetLog())); req.handle()->Reset(); @@ -471,17 +467,14 @@ TEST_F(TCPClientSocketPoolTest, ConnectCancelConnect) { TestCompletionCallback callback; TestSocketRequest req(&request_order_, &completion_count_); - TCPSocketParams dest("www.google.com", 80, kDefaultPriority, GURL(), false); - EXPECT_EQ(ERR_IO_PENDING, - handle.Init("a", dest, kDefaultPriority, &callback, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback, pool_, BoundNetLog())); handle.Reset(); TestCompletionCallback callback2; - EXPECT_EQ(ERR_IO_PENDING, - handle.Init("a", dest, kDefaultPriority, &callback2, pool_, - BoundNetLog())); + EXPECT_EQ(ERR_IO_PENDING, handle.Init("a", params_, kDefaultPriority, + &callback2, pool_, BoundNetLog())); host_resolver_->set_synchronous_mode(true); // At this point, handle has two ConnectingSockets out for it. Due to the @@ -579,8 +572,10 @@ class RequestSocketCallback : public CallbackRunner< Tuple1<int> > { MessageLoop::current()->RunAllPending(); } within_callback_ = true; - TCPSocketParams dest("www.google.com", 80, LOWEST, GURL(), false); - int rv = handle_->Init("a", dest, LOWEST, this, pool_, BoundNetLog()); + scoped_refptr<TCPSocketParams> dest = new TCPSocketParams( + HostPortPair("www.google.com", 80), LOWEST, GURL(), false); + int rv = handle_->Init("a", dest, LOWEST, this, pool_, + BoundNetLog()); EXPECT_EQ(OK, rv); } } @@ -599,8 +594,10 @@ class RequestSocketCallback : public CallbackRunner< Tuple1<int> > { TEST_F(TCPClientSocketPoolTest, RequestTwice) { ClientSocketHandle handle; RequestSocketCallback callback(&handle, pool_.get()); - TCPSocketParams dest("www.google.com", 80, LOWEST, GURL(), false); - int rv = handle.Init("a", dest, LOWEST, &callback, pool_, BoundNetLog()); + scoped_refptr<TCPSocketParams> dest = new TCPSocketParams( + HostPortPair("www.google.com", 80), LOWEST, GURL(), false); + int rv = handle.Init("a", dest, LOWEST, &callback, pool_, + BoundNetLog()); ASSERT_EQ(ERR_IO_PENDING, rv); // The callback is going to request "www.google.com". We want it to complete @@ -662,8 +659,7 @@ TEST_F(TCPClientSocketPoolTest, FailingActiveRequestWithPendingRequests) { TEST_F(TCPClientSocketPoolTest, ResetIdleSocketsOnIPAddressChange) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); - int rv = handle.Init("a", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("a", low_params_, LOW, &callback, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); @@ -718,8 +714,8 @@ TEST_F(TCPClientSocketPoolTest, BackupSocketConnect) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); - int rv = handle.Init("b", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("b", low_params_, LOW, &callback, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); @@ -765,8 +761,8 @@ TEST_F(TCPClientSocketPoolTest, BackupSocketCancel) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); - int rv = handle.Init("c", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("c", low_params_, LOW, &callback, pool_, + BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); @@ -810,8 +806,7 @@ TEST_F(TCPClientSocketPoolTest, BackupSocketFailAfterStall) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); - int rv = handle.Init("b", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("b", low_params_, LOW, &callback, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); @@ -856,8 +851,7 @@ TEST_F(TCPClientSocketPoolTest, BackupSocketFailAfterDelay) { TestCompletionCallback callback; ClientSocketHandle handle; - TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); - int rv = handle.Init("b", dest, LOW, &callback, pool_, BoundNetLog()); + int rv = handle.Init("b", low_params_, LOW, &callback, pool_, BoundNetLog()); EXPECT_EQ(ERR_IO_PENDING, rv); EXPECT_FALSE(handle.is_initialized()); EXPECT_FALSE(handle.socket()); diff --git a/net/spdy/spdy_network_transaction.cc b/net/spdy/spdy_network_transaction.cc index 9a3049f..05a4a5a 100644 --- a/net/spdy/spdy_network_transaction.cc +++ b/net/spdy/spdy_network_transaction.cc @@ -227,8 +227,9 @@ int SpdyNetworkTransaction::DoInitConnection() { connection_group.append(host); HostPortPair host_port_pair(host, port); - TCPSocketParams tcp_params(host_port_pair, request_->priority, - request_->referrer, false); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams(host_port_pair, request_->priority, + request_->referrer, false); spdy_ = session_->spdy_session_pool()->Get( host_port_pair, session_, net_log_); diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 7dcc30b..3e748de 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -215,9 +215,10 @@ net::Error SpdySession::InitializeWithSSLSocket( return error; } -net::Error SpdySession::Connect(const std::string& group_name, - const TCPSocketParams& destination, - RequestPriority priority) { +net::Error SpdySession::Connect( + const std::string& group_name, + const scoped_refptr<TCPSocketParams>& destination, + RequestPriority priority) { DCHECK(priority >= SPDY_PRIORITY_HIGHEST && priority <= SPDY_PRIORITY_LOWEST); // If the connect process is started, let the caller continue. diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index 23a92a8..467e839 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h @@ -53,7 +53,7 @@ class SpdySession : public base::RefCounted<SpdySession>, // Note that this call does not wait for the connect to complete. Callers can // immediately start using the SpdySession while it connects. net::Error Connect(const std::string& group_name, - const TCPSocketParams& destination, + const scoped_refptr<TCPSocketParams>& destination, RequestPriority priority); // Get a pushed stream for a given |url|. diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc index 20b73d9..1df4cbb 100644 --- a/net/spdy/spdy_session_unittest.cc +++ b/net/spdy/spdy_session_unittest.cc @@ -138,7 +138,8 @@ TEST_F(SpdySessionTest, GoAway) { test_host_port_pair, http_session.get(), BoundNetLog()); EXPECT_TRUE(spdy_session_pool->HasSession(test_host_port_pair)); - TCPSocketParams tcp_params(kTestHost, kTestPort, MEDIUM, GURL(), false); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams(kTestHost, kTestPort, MEDIUM, GURL(), false); int rv = session->Connect(kTestHost, tcp_params, MEDIUM); ASSERT_EQ(OK, rv); @@ -220,7 +221,8 @@ TEST_F(SpdySessionTest, GetActivePushStream) { EXPECT_EQ(static_cast<SpdyStream*>(NULL), first_stream.get()); // Read in the data which contains a server-issued SYN_STREAM. - TCPSocketParams tcp_params(test_host_port_pair, MEDIUM, GURL(), false); + scoped_refptr<TCPSocketParams> tcp_params = + new TCPSocketParams(test_host_port_pair, MEDIUM, GURL(), false); int rv = session->Connect(kTestHost, tcp_params, MEDIUM); ASSERT_EQ(OK, rv); MessageLoop::current()->RunAllPending(); |