| 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();
|
| }
|
|
|