Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: net/socket/socket_test_util.cc

Issue 8801004: base::Bind: Convert StreamSocket::Connect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/socket/socks5_client_socket.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/socket/socket_test_util.h" 5 #include "net/socket/socket_test_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10
11 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/bind.h"
12 #include "base/bind_helpers.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
13 #include "base/message_loop.h" 14 #include "base/message_loop.h"
14 #include "base/time.h" 15 #include "base/time.h"
15 #include "net/base/address_family.h" 16 #include "net/base/address_family.h"
16 #include "net/base/address_list.h" 17 #include "net/base/address_list.h"
17 #include "net/base/auth.h" 18 #include "net/base/auth.h"
18 #include "net/base/ssl_cert_request_info.h" 19 #include "net/base/ssl_cert_request_info.h"
19 #include "net/base/ssl_info.h" 20 #include "net/base/ssl_info.h"
20 #include "net/http/http_network_session.h" 21 #include "net/http/http_network_session.h"
21 #include "net/http/http_request_headers.h" 22 #include "net/http/http_request_headers.h"
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 new MockSSLClientSocket(transport_socket, host_and_port, ssl_config, 624 new MockSSLClientSocket(transport_socket, host_and_port, ssl_config,
624 ssl_host_info, mock_ssl_data_.GetNext()); 625 ssl_host_info, mock_ssl_data_.GetNext());
625 ssl_client_sockets_.push_back(socket); 626 ssl_client_sockets_.push_back(socket);
626 return socket; 627 return socket;
627 } 628 }
628 629
629 void MockClientSocketFactory::ClearSSLSessionCache() { 630 void MockClientSocketFactory::ClearSSLSessionCache() {
630 } 631 }
631 632
632 MockClientSocket::MockClientSocket(net::NetLog* net_log) 633 MockClientSocket::MockClientSocket(net::NetLog* net_log)
633 : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), 634 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)),
634 connected_(false), 635 connected_(false),
635 net_log_(NetLog::Source(), net_log) { 636 net_log_(NetLog::Source(), net_log) {
636 } 637 }
637 638
638 bool MockClientSocket::SetReceiveBufferSize(int32 size) { 639 bool MockClientSocket::SetReceiveBufferSize(int32 size) {
639 return true; 640 return true;
640 } 641 }
641 642
642 bool MockClientSocket::SetSendBufferSize(int32 size) { 643 bool MockClientSocket::SetSendBufferSize(int32 size) {
643 return true; 644 return true;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 MockClientSocket::GetNextProto(std::string* proto) { 696 MockClientSocket::GetNextProto(std::string* proto) {
696 proto->clear(); 697 proto->clear();
697 return SSLClientSocket::kNextProtoUnsupported; 698 return SSLClientSocket::kNextProtoUnsupported;
698 } 699 }
699 700
700 MockClientSocket::~MockClientSocket() {} 701 MockClientSocket::~MockClientSocket() {}
701 702
702 void MockClientSocket::RunCallbackAsync(net::OldCompletionCallback* callback, 703 void MockClientSocket::RunCallbackAsync(net::OldCompletionCallback* callback,
703 int result) { 704 int result) {
704 MessageLoop::current()->PostTask(FROM_HERE, 705 MessageLoop::current()->PostTask(FROM_HERE,
705 method_factory_.NewRunnableMethod( 706 base::Bind(&MockClientSocket::RunOldCallback, weak_factory_.GetWeakPtr(),
706 &MockClientSocket::RunCallback, callback, result)); 707 callback, result));
708 }
709 void MockClientSocket::RunCallbackAsync(const net::CompletionCallback& callback,
710 int result) {
711 MessageLoop::current()->PostTask(FROM_HERE,
712 base::Bind(&MockClientSocket::RunCallback, weak_factory_.GetWeakPtr(),
713 callback, result));
707 } 714 }
708 715
709 void MockClientSocket::RunCallback(net::OldCompletionCallback* callback, 716 void MockClientSocket::RunOldCallback(net::OldCompletionCallback* callback,
710 int result) { 717 int result) {
711 if (callback) 718 if (callback)
712 callback->Run(result); 719 callback->Run(result);
713 } 720 }
721 void MockClientSocket::RunCallback(const net::CompletionCallback& callback,
722 int result) {
723 if (!callback.is_null())
724 callback.Run(result);
725 }
714 726
715 MockTCPClientSocket::MockTCPClientSocket(const net::AddressList& addresses, 727 MockTCPClientSocket::MockTCPClientSocket(const net::AddressList& addresses,
716 net::NetLog* net_log, 728 net::NetLog* net_log,
717 net::SocketDataProvider* data) 729 net::SocketDataProvider* data)
718 : MockClientSocket(net_log), 730 : MockClientSocket(net_log),
719 addresses_(addresses), 731 addresses_(addresses),
720 data_(data), 732 data_(data),
721 read_offset_(0), 733 read_offset_(0),
722 num_bytes_read_(0), 734 num_bytes_read_(0),
723 read_data_(false, net::ERR_UNEXPECTED), 735 read_data_(false, net::ERR_UNEXPECTED),
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 if (connected_) 801 if (connected_)
790 return net::OK; 802 return net::OK;
791 connected_ = true; 803 connected_ = true;
792 peer_closed_connection_ = false; 804 peer_closed_connection_ = false;
793 if (data_->connect_data().async) { 805 if (data_->connect_data().async) {
794 RunCallbackAsync(callback, data_->connect_data().result); 806 RunCallbackAsync(callback, data_->connect_data().result);
795 return net::ERR_IO_PENDING; 807 return net::ERR_IO_PENDING;
796 } 808 }
797 return data_->connect_data().result; 809 return data_->connect_data().result;
798 } 810 }
811 int MockTCPClientSocket::Connect(const net::CompletionCallback& callback) {
812 if (connected_)
813 return net::OK;
814
815 connected_ = true;
816 peer_closed_connection_ = false;
817 if (data_->connect_data().async) {
818 RunCallbackAsync(callback, data_->connect_data().result);
819 return net::ERR_IO_PENDING;
820 }
821
822 return data_->connect_data().result;
823 }
799 824
800 void MockTCPClientSocket::Disconnect() { 825 void MockTCPClientSocket::Disconnect() {
801 MockClientSocket::Disconnect(); 826 MockClientSocket::Disconnect();
802 pending_callback_ = NULL; 827 pending_callback_ = NULL;
803 } 828 }
804 829
805 bool MockTCPClientSocket::IsConnected() const { 830 bool MockTCPClientSocket::IsConnected() const {
806 return connected_ && !peer_closed_connection_; 831 return connected_ && !peer_closed_connection_;
807 } 832 }
808 833
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 870
846 read_data_ = data; 871 read_data_ = data;
847 need_read_data_ = false; 872 need_read_data_ = false;
848 873
849 // The caller is simulating that this IO completes right now. Don't 874 // The caller is simulating that this IO completes right now. Don't
850 // let CompleteRead() schedule a callback. 875 // let CompleteRead() schedule a callback.
851 read_data_.async = false; 876 read_data_.async = false;
852 877
853 net::OldCompletionCallback* callback = pending_callback_; 878 net::OldCompletionCallback* callback = pending_callback_;
854 int rv = CompleteRead(); 879 int rv = CompleteRead();
855 RunCallback(callback, rv); 880 RunOldCallback(callback, rv);
856 } 881 }
857 882
858 int MockTCPClientSocket::CompleteRead() { 883 int MockTCPClientSocket::CompleteRead() {
859 DCHECK(pending_buf_); 884 DCHECK(pending_buf_);
860 DCHECK(pending_buf_len_ > 0); 885 DCHECK(pending_buf_len_ > 0);
861 886
862 was_used_to_convey_data_ = true; 887 was_used_to_convey_data_ = true;
863 888
864 // Save the pending async IO data and reset our |pending_| state. 889 // Save the pending async IO data and reset our |pending_| state.
865 net::IOBuffer* buf = pending_buf_; 890 net::IOBuffer* buf = pending_buf_;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
998 net::OldCompletionCallback* callback) { 1023 net::OldCompletionCallback* callback) {
999 if (connected_) 1024 if (connected_)
1000 return net::OK; 1025 return net::OK;
1001 connected_ = true; 1026 connected_ = true;
1002 if (data_->connect_data().async) { 1027 if (data_->connect_data().async) {
1003 RunCallbackAsync(callback, data_->connect_data().result); 1028 RunCallbackAsync(callback, data_->connect_data().result);
1004 return net::ERR_IO_PENDING; 1029 return net::ERR_IO_PENDING;
1005 } 1030 }
1006 return data_->connect_data().result; 1031 return data_->connect_data().result;
1007 } 1032 }
1033 int DeterministicMockTCPClientSocket::Connect(
1034 const net::CompletionCallback& callback) {
1035 if (connected_)
1036 return net::OK;
1037
1038 connected_ = true;
1039 if (data_->connect_data().async) {
1040 RunCallbackAsync(callback, data_->connect_data().result);
1041 return net::ERR_IO_PENDING;
1042 }
1043
1044 return data_->connect_data().result;
1045 }
1008 1046
1009 void DeterministicMockTCPClientSocket::Disconnect() { 1047 void DeterministicMockTCPClientSocket::Disconnect() {
1010 MockClientSocket::Disconnect(); 1048 MockClientSocket::Disconnect();
1011 } 1049 }
1012 1050
1013 bool DeterministicMockTCPClientSocket::IsConnected() const { 1051 bool DeterministicMockTCPClientSocket::IsConnected() const {
1014 return connected_; 1052 return connected_;
1015 } 1053 }
1016 1054
1017 bool DeterministicMockTCPClientSocket::IsConnectedAndIdle() const { 1055 bool DeterministicMockTCPClientSocket::IsConnectedAndIdle() const {
(...skipping 11 matching lines...) Expand all
1029 int64 DeterministicMockTCPClientSocket::NumBytesRead() const { 1067 int64 DeterministicMockTCPClientSocket::NumBytesRead() const {
1030 return -1; 1068 return -1;
1031 } 1069 }
1032 1070
1033 base::TimeDelta DeterministicMockTCPClientSocket::GetConnectTimeMicros() const { 1071 base::TimeDelta DeterministicMockTCPClientSocket::GetConnectTimeMicros() const {
1034 return base::TimeDelta::FromMicroseconds(-1); 1072 return base::TimeDelta::FromMicroseconds(-1);
1035 } 1073 }
1036 1074
1037 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {} 1075 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {}
1038 1076
1039 class MockSSLClientSocket::ConnectCallback 1077 class MockSSLClientSocket::OldConnectCallback
1040 : public net::OldCompletionCallbackImpl<MockSSLClientSocket::ConnectCallback > { 1078 : public net::OldCompletionCallbackImpl<
1079 MockSSLClientSocket::OldConnectCallback> {
1041 public: 1080 public:
1042 ConnectCallback(MockSSLClientSocket *ssl_client_socket, 1081 OldConnectCallback(MockSSLClientSocket *ssl_client_socket,
1043 net::OldCompletionCallback* user_callback, 1082 net::OldCompletionCallback* user_callback,
1044 int rv) 1083 int rv)
1045 : ALLOW_THIS_IN_INITIALIZER_LIST( 1084 : ALLOW_THIS_IN_INITIALIZER_LIST(
1046 net::OldCompletionCallbackImpl<MockSSLClientSocket::ConnectCallback>( 1085 net::OldCompletionCallbackImpl<
1047 this, &ConnectCallback::Wrapper)), 1086 MockSSLClientSocket::OldConnectCallback>(
1087 this, &OldConnectCallback::Wrapper)),
1048 ssl_client_socket_(ssl_client_socket), 1088 ssl_client_socket_(ssl_client_socket),
1049 user_callback_(user_callback), 1089 user_callback_(user_callback),
1050 rv_(rv) { 1090 rv_(rv) {
1051 } 1091 }
1052 1092
1053 private: 1093 private:
1054 void Wrapper(int rv) { 1094 void Wrapper(int rv) {
1055 if (rv_ == net::OK) 1095 if (rv_ == net::OK)
1056 ssl_client_socket_->connected_ = true; 1096 ssl_client_socket_->connected_ = true;
1057 user_callback_->Run(rv_); 1097 user_callback_->Run(rv_);
1058 delete this; 1098 delete this;
1059 } 1099 }
1060 1100
1061 MockSSLClientSocket* ssl_client_socket_; 1101 MockSSLClientSocket* ssl_client_socket_;
1062 net::OldCompletionCallback* user_callback_; 1102 net::OldCompletionCallback* user_callback_;
1063 int rv_; 1103 int rv_;
1064 }; 1104 };
1105 class MockSSLClientSocket::ConnectCallback {
1106 public:
1107 ConnectCallback(MockSSLClientSocket *ssl_client_socket,
1108 const CompletionCallback& user_callback,
1109 int rv)
1110 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
1111 base::Bind(&ConnectCallback::Wrapper, base::Unretained(this)))),
1112 ssl_client_socket_(ssl_client_socket),
1113 user_callback_(user_callback),
1114 rv_(rv) {
1115 }
1116
1117 const CompletionCallback& callback() const { return callback_; }
1118
1119 private:
1120 void Wrapper(int rv) {
1121 if (rv_ == net::OK)
1122 ssl_client_socket_->connected_ = true;
1123 user_callback_.Run(rv_);
1124 }
1125
1126 CompletionCallback callback_;
1127 MockSSLClientSocket* ssl_client_socket_;
1128 CompletionCallback user_callback_;
1129 int rv_;
1130 };
1065 1131
1066 MockSSLClientSocket::MockSSLClientSocket( 1132 MockSSLClientSocket::MockSSLClientSocket(
1067 net::ClientSocketHandle* transport_socket, 1133 net::ClientSocketHandle* transport_socket,
1068 const HostPortPair& host_port_pair, 1134 const HostPortPair& host_port_pair,
1069 const net::SSLConfig& ssl_config, 1135 const net::SSLConfig& ssl_config,
1070 SSLHostInfo* ssl_host_info, 1136 SSLHostInfo* ssl_host_info,
1071 net::SSLSocketDataProvider* data) 1137 net::SSLSocketDataProvider* data)
1072 : MockClientSocket(transport_socket->socket()->NetLog().net_log()), 1138 : MockClientSocket(transport_socket->socket()->NetLog().net_log()),
1073 transport_(transport_socket), 1139 transport_(transport_socket),
1074 data_(data), 1140 data_(data),
(...skipping 11 matching lines...) Expand all
1086 net::OldCompletionCallback* callback) { 1152 net::OldCompletionCallback* callback) {
1087 return transport_->socket()->Read(buf, buf_len, callback); 1153 return transport_->socket()->Read(buf, buf_len, callback);
1088 } 1154 }
1089 1155
1090 int MockSSLClientSocket::Write(net::IOBuffer* buf, int buf_len, 1156 int MockSSLClientSocket::Write(net::IOBuffer* buf, int buf_len,
1091 net::OldCompletionCallback* callback) { 1157 net::OldCompletionCallback* callback) {
1092 return transport_->socket()->Write(buf, buf_len, callback); 1158 return transport_->socket()->Write(buf, buf_len, callback);
1093 } 1159 }
1094 1160
1095 int MockSSLClientSocket::Connect(net::OldCompletionCallback* callback) { 1161 int MockSSLClientSocket::Connect(net::OldCompletionCallback* callback) {
1096 ConnectCallback* connect_callback = new ConnectCallback( 1162 OldConnectCallback* connect_callback = new OldConnectCallback(
1097 this, callback, data_->connect.result); 1163 this, callback, data_->connect.result);
1098 int rv = transport_->socket()->Connect(connect_callback); 1164 int rv = transport_->socket()->Connect(connect_callback);
1099 if (rv == net::OK) { 1165 if (rv == net::OK) {
1100 delete connect_callback; 1166 delete connect_callback;
1101 if (data_->connect.result == net::OK) 1167 if (data_->connect.result == net::OK)
1102 connected_ = true; 1168 connected_ = true;
1103 if (data_->connect.async) { 1169 if (data_->connect.async) {
1104 RunCallbackAsync(callback, data_->connect.result); 1170 RunCallbackAsync(callback, data_->connect.result);
1105 return net::ERR_IO_PENDING; 1171 return net::ERR_IO_PENDING;
1106 } 1172 }
1107 return data_->connect.result; 1173 return data_->connect.result;
1108 } 1174 }
1109 return rv; 1175 return rv;
1110 } 1176 }
1177 int MockSSLClientSocket::Connect(const net::CompletionCallback& callback) {
1178 ConnectCallback connect_callback(this, callback, data_->connect.result);
1179 int rv = transport_->socket()->Connect(connect_callback.callback());
1180 if (rv == net::OK) {
1181 if (data_->connect.result == net::OK)
1182 connected_ = true;
1183 if (data_->connect.async) {
1184 RunCallbackAsync(callback, data_->connect.result);
1185 return net::ERR_IO_PENDING;
1186 }
1187 return data_->connect.result;
1188 }
1189 return rv;
1190 }
1111 1191
1112 void MockSSLClientSocket::Disconnect() { 1192 void MockSSLClientSocket::Disconnect() {
1113 MockClientSocket::Disconnect(); 1193 MockClientSocket::Disconnect();
1114 if (transport_->socket() != NULL) 1194 if (transport_->socket() != NULL)
1115 transport_->socket()->Disconnect(); 1195 transport_->socket()->Disconnect();
1116 } 1196 }
1117 1197
1118 bool MockSSLClientSocket::IsConnected() const { 1198 bool MockSSLClientSocket::IsConnected() const {
1119 return transport_->socket()->IsConnected(); 1199 return transport_->socket()->IsConnected();
1120 } 1200 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 net::NetLog* net_log) 1258 net::NetLog* net_log)
1179 : connected_(false), 1259 : connected_(false),
1180 data_(data), 1260 data_(data),
1181 read_offset_(0), 1261 read_offset_(0),
1182 read_data_(false, net::ERR_UNEXPECTED), 1262 read_data_(false, net::ERR_UNEXPECTED),
1183 need_read_data_(true), 1263 need_read_data_(true),
1184 pending_buf_(NULL), 1264 pending_buf_(NULL),
1185 pending_buf_len_(0), 1265 pending_buf_len_(0),
1186 pending_callback_(NULL), 1266 pending_callback_(NULL),
1187 net_log_(NetLog::Source(), net_log), 1267 net_log_(NetLog::Source(), net_log),
1188 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { 1268 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
1189 DCHECK(data_); 1269 DCHECK(data_);
1190 data_->Reset(); 1270 data_->Reset();
1191 } 1271 }
1192 1272
1193 MockUDPClientSocket::~MockUDPClientSocket() {} 1273 MockUDPClientSocket::~MockUDPClientSocket() {}
1194 1274
1195 int MockUDPClientSocket::Read(net::IOBuffer* buf, int buf_len, 1275 int MockUDPClientSocket::Read(net::IOBuffer* buf, int buf_len,
1196 net::OldCompletionCallback* callback) { 1276 net::OldCompletionCallback* callback) {
1197 if (!connected_) 1277 if (!connected_)
1198 return net::ERR_UNEXPECTED; 1278 return net::ERR_UNEXPECTED;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 DCHECK(callback); 1401 DCHECK(callback);
1322 RunCallbackAsync(callback, result); 1402 RunCallbackAsync(callback, result);
1323 return net::ERR_IO_PENDING; 1403 return net::ERR_IO_PENDING;
1324 } 1404 }
1325 return result; 1405 return result;
1326 } 1406 }
1327 1407
1328 void MockUDPClientSocket::RunCallbackAsync(net::OldCompletionCallback* callback, 1408 void MockUDPClientSocket::RunCallbackAsync(net::OldCompletionCallback* callback,
1329 int result) { 1409 int result) {
1330 MessageLoop::current()->PostTask(FROM_HERE, 1410 MessageLoop::current()->PostTask(FROM_HERE,
1331 method_factory_.NewRunnableMethod( 1411 base::Bind(&MockUDPClientSocket::RunCallback, weak_factory_.GetWeakPtr(),
1332 &MockUDPClientSocket::RunCallback, callback, result)); 1412 callback, result));
1333 } 1413 }
1334 1414
1335 void MockUDPClientSocket::RunCallback(net::OldCompletionCallback* callback, 1415 void MockUDPClientSocket::RunCallback(net::OldCompletionCallback* callback,
1336 int result) { 1416 int result) {
1337 if (callback) 1417 if (callback)
1338 callback->Run(result); 1418 callback->Run(result);
1339 } 1419 }
1340 1420
1341 TestSocketRequest::TestSocketRequest( 1421 TestSocketRequest::TestSocketRequest(
1342 std::vector<TestSocketRequest*>* request_order, 1422 std::vector<TestSocketRequest*>* request_order,
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1606 1686
1607 const char kSOCKS5OkRequest[] = 1687 const char kSOCKS5OkRequest[] =
1608 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; 1688 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 };
1609 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); 1689 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest);
1610 1690
1611 const char kSOCKS5OkResponse[] = 1691 const char kSOCKS5OkResponse[] =
1612 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; 1692 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 };
1613 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); 1693 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse);
1614 1694
1615 } // namespace net 1695 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/socket/socks5_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698