summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/net/preconnect.cc5
-rw-r--r--net/http/http_network_transaction.cc21
-rw-r--r--net/http/http_network_transaction_unittest.cc3
-rw-r--r--net/http/http_proxy_client_socket_pool.cc36
-rw-r--r--net/http/http_proxy_client_socket_pool.h26
-rw-r--r--net/http/http_proxy_client_socket_pool_unittest.cc20
-rw-r--r--net/socket/client_socket_handle.h10
-rw-r--r--net/socket/client_socket_pool.h8
-rw-r--r--net/socket/client_socket_pool_base.h8
-rw-r--r--net/socket/client_socket_pool_base_unittest.cc302
-rw-r--r--net/socket/socket_test_util.h2
-rw-r--r--net/socket/socks_client_socket_pool.cc58
-rw-r--r--net/socket/socks_client_socket_pool.h31
-rw-r--r--net/socket/socks_client_socket_pool_unittest.cc13
-rw-r--r--net/socket/tcp_client_socket_pool.cc29
-rw-r--r--net/socket/tcp_client_socket_pool.h21
-rw-r--r--net/socket/tcp_client_socket_pool_unittest.cc90
-rw-r--r--net/spdy/spdy_network_transaction.cc5
-rw-r--r--net/spdy/spdy_session.cc7
-rw-r--r--net/spdy/spdy_session.h2
-rw-r--r--net/spdy/spdy_session_unittest.cc6
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();