Index: net/socket/socket_test_util.cc |
=================================================================== |
--- net/socket/socket_test_util.cc (revision 57349) |
+++ net/socket/socket_test_util.cc (working copy) |
@@ -1178,4 +1178,102 @@ |
{ 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(), net::NetLog::Source()); |
+ 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 |