diff options
Diffstat (limited to 'net/socket')
-rw-r--r-- | net/socket/socket_test_util.cc | 98 | ||||
-rw-r--r-- | net/socket/socket_test_util.h | 57 | ||||
-rw-r--r-- | net/socket/ssl_client_socket_pool.cc | 4 | ||||
-rw-r--r-- | net/socket/ssl_client_socket_pool_unittest.cc | 3 |
4 files changed, 160 insertions, 2 deletions
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc index 5ffd1d4..8d09a6d 100644 --- a/net/socket/socket_test_util.cc +++ b/net/socket/socket_test_util.cc @@ -1174,4 +1174,102 @@ const char kSOCKS5OkResponse[] = { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); +MockSSLClientSocketPool::MockSSLClientSocketPool( + int max_sockets, + int max_sockets_per_group, + const scoped_refptr<ClientSocketPoolHistograms>& histograms, + ClientSocketFactory* socket_factory) + : SSLClientSocketPool(max_sockets, max_sockets_per_group, histograms, + NULL, socket_factory, + new MockTCPClientSocketPool(max_sockets, + max_sockets_per_group, + histograms, + socket_factory), + NULL, NULL, NULL), + client_socket_factory_(socket_factory), + release_count_(0), + cancel_count_(0) { +} + +int MockSSLClientSocketPool::RequestSocket(const std::string& group_name, + const void* socket_params, + RequestPriority priority, + ClientSocketHandle* handle, + CompletionCallback* callback, + const BoundNetLog& net_log) { + ClientSocket* socket = client_socket_factory_->CreateTCPClientSocket( + AddressList(), net_log.net_log()); + MockConnectJob* job = new MockConnectJob(socket, handle, callback); + job_list_.push_back(job); + handle->set_pool_id(1); + return job->Connect(); +} + +void MockSSLClientSocketPool::CancelRequest(const std::string& group_name, + ClientSocketHandle* handle) { + std::vector<MockConnectJob*>::iterator i; + for (i = job_list_.begin(); i != job_list_.end(); ++i) { + if ((*i)->CancelHandle(handle)) { + cancel_count_++; + break; + } + } +} + +void MockSSLClientSocketPool::ReleaseSocket(const std::string& group_name, + ClientSocket* socket, int id) { + EXPECT_EQ(1, id); + release_count_++; + delete socket; +} + +MockSSLClientSocketPool::~MockSSLClientSocketPool() {} + +MockSSLClientSocketPool::MockConnectJob::MockConnectJob( + ClientSocket* socket, + ClientSocketHandle* handle, + CompletionCallback* callback) + : socket_(socket), + handle_(handle), + user_callback_(callback), + ALLOW_THIS_IN_INITIALIZER_LIST( + connect_callback_(this, &MockConnectJob::OnConnect)) { +} + +int MockSSLClientSocketPool::MockConnectJob::Connect() { + int rv = socket_->Connect(&connect_callback_); + if (rv == OK) { + user_callback_ = NULL; + OnConnect(OK); + } + return rv; +} + +bool MockSSLClientSocketPool::MockConnectJob::CancelHandle( + const ClientSocketHandle* handle) { + if (handle != handle_) + return false; + socket_.reset(); + handle_ = NULL; + user_callback_ = NULL; + return true; +} + +void MockSSLClientSocketPool::MockConnectJob::OnConnect(int rv) { + if (!socket_.get()) + return; + if (rv == OK) { + handle_->set_socket(socket_.release()); + } else { + socket_.reset(); + } + + handle_ = NULL; + + if (user_callback_) { + CompletionCallback* callback = user_callback_; + user_callback_ = NULL; + callback->Run(rv); + } +} } // namespace net diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h index 533a18d..e62e12b 100644 --- a/net/socket/socket_test_util.h +++ b/net/socket/socket_test_util.h @@ -30,6 +30,7 @@ #include "net/socket/client_socket_handle.h" #include "net/socket/socks_client_socket_pool.h" #include "net/socket/ssl_client_socket.h" +#include "net/socket/ssl_client_socket_pool.h" #include "net/socket/tcp_client_socket_pool.h" #include "testing/gtest/include/gtest/gtest.h" @@ -867,6 +868,62 @@ extern const int kSOCKS5OkRequestLength; extern const char kSOCKS5OkResponse[]; extern const int kSOCKS5OkResponseLength; +class MockSSLClientSocketPool : public SSLClientSocketPool { + public: + class MockConnectJob { + public: + MockConnectJob(ClientSocket* socket, ClientSocketHandle* handle, + CompletionCallback* callback); + + int Connect(); + bool CancelHandle(const ClientSocketHandle* handle); + + private: + void OnConnect(int rv); + + scoped_ptr<ClientSocket> socket_; + ClientSocketHandle* handle_; + CompletionCallback* user_callback_; + CompletionCallbackImpl<MockConnectJob> connect_callback_; + + DISALLOW_COPY_AND_ASSIGN(MockConnectJob); + }; + + MockSSLClientSocketPool( + int max_sockets, + int max_sockets_per_group, + const scoped_refptr<ClientSocketPoolHistograms>& histograms, + ClientSocketFactory* socket_factory); + + int release_count() const { return release_count_; } + int cancel_count() const { return cancel_count_; } + + // SSLClientSocketPool methods. + virtual int RequestSocket(const std::string& group_name, + const void* socket_params, + RequestPriority priority, + ClientSocketHandle* handle, + CompletionCallback* callback, + const BoundNetLog& net_log); + + virtual void CancelRequest(const std::string& group_name, + ClientSocketHandle* handle); + virtual void ReleaseSocket(const std::string& group_name, + ClientSocket* socket, int id); + + protected: + virtual ~MockSSLClientSocketPool(); + + private: + ClientSocketFactory* client_socket_factory_; + int release_count_; + int cancel_count_; + ScopedVector<MockConnectJob> job_list_; + + DISALLOW_COPY_AND_ASSIGN(MockSSLClientSocketPool); +}; + + } // namespace net #endif // NET_SOCKET_SOCKET_TEST_UTIL_H_ diff --git a/net/socket/ssl_client_socket_pool.cc b/net/socket/ssl_client_socket_pool.cc index 541792f..90da3de 100644 --- a/net/socket/ssl_client_socket_pool.cc +++ b/net/socket/ssl_client_socket_pool.cc @@ -42,6 +42,7 @@ SSLSocketParams::SSLSocketParams( DCHECK(socks_params_.get() == NULL); break; case ProxyServer::SCHEME_HTTP: + case ProxyServer::SCHEME_HTTPS: DCHECK(tcp_params_.get() == NULL); DCHECK(http_proxy_params_.get() != NULL); DCHECK(socks_params_.get() == NULL); @@ -114,6 +115,7 @@ int SSLConnectJob::ConnectInternal() { next_state_ = STATE_TCP_CONNECT; break; case ProxyServer::SCHEME_HTTP: + case ProxyServer::SCHEME_HTTPS: next_state_ = STATE_TUNNEL_CONNECT; break; case ProxyServer::SCHEME_SOCKS4: @@ -222,7 +224,7 @@ int SSLConnectJob::DoTunnelConnect() { params_->http_proxy_params(); return transport_socket_handle_->Init( group_name(), http_proxy_params, - http_proxy_params->tcp_params()->destination().priority(), &callback_, + http_proxy_params->destination().priority(), &callback_, http_proxy_pool_, net_log()); } diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc index 72c46df..93ea2de 100644 --- a/net/socket/ssl_client_socket_pool_unittest.cc +++ b/net/socket/ssl_client_socket_pool_unittest.cc @@ -54,7 +54,7 @@ class SSLClientSocketPoolTest : public ClientSocketPoolTest { proxy_tcp_socket_params_(new TCPSocketParams( HostPortPair("proxy", 443), MEDIUM, GURL(), false)), http_proxy_socket_params_(new HttpProxySocketParams( - proxy_tcp_socket_params_, GURL("http://host"), "", + proxy_tcp_socket_params_, NULL, GURL("http://host"), "", HostPortPair("host", 80), session_, true)), http_proxy_socket_pool_(new HttpProxyClientSocketPool( kMaxSockets, @@ -62,6 +62,7 @@ class SSLClientSocketPoolTest : public ClientSocketPoolTest { make_scoped_refptr(new ClientSocketPoolHistograms("MockHttpProxy")), new MockHostResolver, tcp_socket_pool_, + NULL, NULL)), socks_socket_params_(new SOCKSSocketParams( proxy_tcp_socket_params_, true, HostPortPair("sockshost", 443), |