| Index: net/socket/socket_test_util.cc | 
| diff --git a/net/socket/socket_test_util.cc b/net/socket/socket_test_util.cc | 
| index 9e74d88291f7f3bc6c84bf8a69d910d35fd12b1e..360f34fc12d5b95f1c2716814e03aab6b9e97631 100644 | 
| --- a/net/socket/socket_test_util.cc | 
| +++ b/net/socket/socket_test_util.cc | 
| @@ -256,10 +256,6 @@ MockSSLClientSocket::~MockSSLClientSocket() { | 
| Disconnect(); | 
| } | 
|  | 
| -void MockSSLClientSocket::GetSSLInfo(net::SSLInfo* ssl_info) { | 
| -  ssl_info->Reset(); | 
| -} | 
| - | 
| int MockSSLClientSocket::Connect(net::CompletionCallback* callback) { | 
| ConnectCallback* connect_callback = new ConnectCallback( | 
| this, callback, data_->connect.result); | 
| @@ -293,6 +289,16 @@ int MockSSLClientSocket::Write(net::IOBuffer* buf, int buf_len, | 
| return transport_->Write(buf, buf_len, callback); | 
| } | 
|  | 
| +void MockSSLClientSocket::GetSSLInfo(net::SSLInfo* ssl_info) { | 
| +  ssl_info->Reset(); | 
| +} | 
| + | 
| +SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( | 
| +    std::string* proto) { | 
| +  *proto = data_->next_proto; | 
| +  return data_->next_proto_status; | 
| +} | 
| + | 
| MockRead StaticSocketDataProvider::GetNextRead() { | 
| DCHECK(!at_read_eof()); | 
| reads_[read_index_].time_stamp = base::Time::Now(); | 
| @@ -386,6 +392,51 @@ void DynamicSocketDataProvider::SimulateRead(const char* data) { | 
| reads_.push_back(MockRead(data)); | 
| } | 
|  | 
| +DelayedSocketData::DelayedSocketData( | 
| +    int write_delay, MockRead* reads, size_t reads_count, | 
| +    MockWrite* writes, size_t writes_count) | 
| +    : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 
| +      write_delay_(write_delay), | 
| +      ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) { | 
| +  DCHECK_GE(write_delay_, 0); | 
| +} | 
| + | 
| +DelayedSocketData::DelayedSocketData( | 
| +    const MockConnect& connect, int write_delay, MockRead* reads, | 
| +    size_t reads_count, MockWrite* writes, size_t writes_count) | 
| +    : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 
| +      write_delay_(write_delay), | 
| +      ALLOW_THIS_IN_INITIALIZER_LIST(factory_(this)) { | 
| +  DCHECK_GE(write_delay_, 0); | 
| +  set_connect_data(connect); | 
| +} | 
| + | 
| +MockRead DelayedSocketData::GetNextRead() { | 
| +  if (write_delay_) | 
| +    return MockRead(true, ERR_IO_PENDING); | 
| +  return StaticSocketDataProvider::GetNextRead(); | 
| +} | 
| + | 
| +MockWriteResult DelayedSocketData::OnWrite(const std::string& data) { | 
| +  MockWriteResult rv = StaticSocketDataProvider::OnWrite(data); | 
| +  // Now that our write has completed, we can allow reads to continue. | 
| +  if (!--write_delay_) | 
| +    MessageLoop::current()->PostDelayedTask(FROM_HERE, | 
| +      factory_.NewRunnableMethod(&DelayedSocketData::CompleteRead), 100); | 
| +  return rv; | 
| +} | 
| + | 
| +void DelayedSocketData::Reset() { | 
| +  set_socket(NULL); | 
| +  factory_.RevokeAll(); | 
| +  StaticSocketDataProvider::Reset(); | 
| +} | 
| + | 
| +void DelayedSocketData::CompleteRead() { | 
| +  if (socket()) | 
| +    socket()->OnReadComplete(GetNextRead()); | 
| +} | 
| + | 
| void MockClientSocketFactory::AddSocketDataProvider( | 
| SocketDataProvider* data) { | 
| mock_data_.Add(data); | 
|  |