Index: net/socket/socket_test_util.cc |
diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc |
index f993801adeb2814aede788bcf82c693bfa99696f..d66f37c9c154f50038eeaafe8501624de998171c 100644 |
--- a/net/socket/socket_test_util.cc |
+++ b/net/socket/socket_test_util.cc |
@@ -653,6 +653,8 @@ MockClientSocketFactory::MockClientSocketFactory() {} |
MockClientSocketFactory::~MockClientSocketFactory() {} |
+bool MockClientSocketFactory::leader_connected_ = false; |
+ |
void MockClientSocketFactory::AddSocketDataProvider( |
SocketDataProvider* data) { |
mock_data_.Add(data); |
@@ -668,6 +670,14 @@ void MockClientSocketFactory::ResetNextMockIndexes() { |
mock_ssl_data_.ResetNextIndex(); |
} |
+void MockClientSocketFactory::SetLeaderConnected() { |
+ leader_connected_ = true; |
+} |
+ |
+bool MockClientSocketFactory::IsLeaderConnected() { |
+ return leader_connected_; |
+} |
+ |
scoped_ptr<DatagramClientSocket> |
MockClientSocketFactory::CreateDatagramClientSocket( |
DatagramSocket::BindType bind_type, |
@@ -699,15 +709,23 @@ scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket( |
const HostPortPair& host_and_port, |
const SSLConfig& ssl_config, |
const SSLClientSocketContext& context) { |
- return scoped_ptr<SSLClientSocket>( |
+ scoped_ptr<MockSSLClientSocket> socket( |
new MockSSLClientSocket(transport_socket.Pass(), |
- host_and_port, ssl_config, |
+ host_and_port, |
+ ssl_config, |
mock_ssl_data_.GetNext())); |
+ ssl_client_sockets_.push_back(socket.get()); |
+ return socket.PassAs<SSLClientSocket>(); |
} |
void MockClientSocketFactory::ClearSSLSessionCache() { |
} |
+std::vector<MockSSLClientSocket*> |
+MockClientSocketFactory::GetSSLClientSockets() { |
+ return ssl_client_sockets_; |
+} |
+ |
const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ"; |
MockClientSocket::MockClientSocket(const BoundNetLog& net_log) |
@@ -762,6 +780,22 @@ void MockClientSocket::GetSSLCertRequestInfo( |
SSLCertRequestInfo* cert_request_info) { |
} |
+bool MockClientSocket::InSessionCache() const { |
+ return true; |
+} |
+ |
+void MockClientSocket::WatchSessionForCompletion(const base::Closure& cb) { |
+} |
+ |
+void MockClientSocket::SetSocketFailureCallback(const base::Closure& cb) { |
+} |
+ |
+void MockClientSocket::OnSocketFailure() { |
+} |
+ |
+void MockClientSocket::SetIsLeader() { |
+} |
+ |
int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label, |
bool has_context, |
const base::StringPiece& context, |
@@ -1314,9 +1348,12 @@ MockSSLClientSocket::MockSSLClientSocket( |
const SSLConfig& ssl_config, |
SSLSocketDataProvider* data) |
: MockClientSocket( |
- // Have to use the right BoundNetLog for LoadTimingInfo regression |
- // tests. |
- transport_socket->socket()->NetLog()), |
+ // Have to use the right BoundNetLog for LoadTimingInfo regression |
+ // tests. |
+ transport_socket->socket()->NetLog()), |
+ process_pending_jobs_callback_( |
+ base::Bind(&SSLConnectJobMessenger::OnJobSucceeded, |
+ base::Unretained(new SSLConnectJobMessenger))), |
transport_(transport_socket.Pass()), |
data_(data), |
is_npn_state_set_(false), |
@@ -1342,9 +1379,24 @@ int MockSSLClientSocket::Write(IOBuffer* buf, int buf_len, |
} |
int MockSSLClientSocket::Connect(const CompletionCallback& callback) { |
+ if (SSLClientSocket::GetEnableConnectJobWaiting()) { |
+ // The socket should only be starting to connect if the leader has already |
+ // connected -- unless the socket is the leader. |
+ if (!MockClientSocketFactory::IsLeaderConnected()) |
+ good_ordering_ = false; |
+ else |
+ good_ordering_ = true; |
+ } |
int rv = transport_->socket()->Connect( |
base::Bind(&ConnectCallback, base::Unretained(this), callback)); |
if (rv == OK) { |
+ if (SSLClientSocket::GetEnableConnectJobWaiting()) { |
+ if (data_->is_leader_) { |
+ good_ordering_ = true; |
+ MockClientSocketFactory::SetLeaderConnected(); |
+ } |
+ process_pending_jobs_callback_.Run(); |
+ } |
if (data_->connect.result == OK) |
connected_ = true; |
if (data_->connect.mode == ASYNC) { |
@@ -1399,6 +1451,20 @@ void MockSSLClientSocket::GetSSLCertRequestInfo( |
} |
} |
+bool MockSSLClientSocket::InSessionCache() const { |
+ return data_->is_in_session_cache_; |
+} |
+ |
+void MockSSLClientSocket::WatchSessionForCompletion(const base::Closure& cb) { |
+ process_pending_jobs_callback_ = cb; |
+} |
+ |
+void MockSSLClientSocket::SetSocketFailureCallback(const base::Closure& cb) { |
+} |
+ |
+void MockSSLClientSocket::OnSocketFailure() { |
+} |
+ |
SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( |
std::string* proto, std::string* server_protos) { |
*proto = data_->next_proto; |
@@ -1441,6 +1507,10 @@ ServerBoundCertService* MockSSLClientSocket::GetServerBoundCertService() const { |
return data_->server_bound_cert_service; |
} |
+bool MockSSLClientSocket::IsGoodOrdering() const { |
+ return good_ordering_; |
+} |
+ |
void MockSSLClientSocket::OnReadComplete(const MockRead& data) { |
NOTIMPLEMENTED(); |
} |