Index: net/socket/ssl_server_socket_unittest.cc |
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc |
index 5af50f8f4764ad3ac1191cf2edb9cb00b5a7d3c7..eb9dc7cbed22cbc61bbce78e623d1389dd8b30c9 100644 |
--- a/net/socket/ssl_server_socket_unittest.cc |
+++ b/net/socket/ssl_server_socket_unittest.cc |
@@ -51,7 +51,7 @@ namespace { |
class FakeDataChannel { |
public: |
FakeDataChannel() |
- : read_callback_(NULL), |
+ : old_read_callback_(NULL), |
read_buf_len_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)) { |
} |
@@ -59,6 +59,16 @@ class FakeDataChannel { |
virtual int Read(IOBuffer* buf, int buf_len, |
OldCompletionCallback* callback) { |
if (data_.empty()) { |
+ old_read_callback_ = callback; |
+ read_buf_ = buf; |
+ read_buf_len_ = buf_len; |
+ return net::ERR_IO_PENDING; |
+ } |
+ return PropogateData(buf, buf_len); |
+ } |
+ virtual int Read(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) { |
+ if (data_.empty()) { |
read_callback_ = callback; |
read_buf_ = buf; |
read_buf_len_ = buf_len; |
@@ -78,15 +88,23 @@ class FakeDataChannel { |
private: |
void DoReadCallback() { |
- if (!read_callback_ || data_.empty()) |
+ if ((!old_read_callback_ && read_callback_.is_null()) || data_.empty()) |
return; |
int copied = PropogateData(read_buf_, read_buf_len_); |
- net::OldCompletionCallback* callback = read_callback_; |
- read_callback_ = NULL; |
- read_buf_ = NULL; |
- read_buf_len_ = 0; |
- callback->Run(copied); |
+ if (old_read_callback_) { |
+ net::OldCompletionCallback* callback = old_read_callback_; |
+ old_read_callback_ = NULL; |
+ read_buf_ = NULL; |
+ read_buf_len_ = 0; |
+ callback->Run(copied); |
+ } else { |
+ net::CompletionCallback callback = read_callback_; |
+ read_callback_.Reset(); |
+ read_buf_ = NULL; |
+ read_buf_len_ = 0; |
+ callback.Run(copied); |
+ } |
} |
int PropogateData(scoped_refptr<net::IOBuffer> read_buf, int read_buf_len) { |
@@ -100,7 +118,8 @@ class FakeDataChannel { |
return copied; |
} |
- net::OldCompletionCallback* read_callback_; |
+ net::OldCompletionCallback* old_read_callback_; |
+ net::CompletionCallback read_callback_; |
scoped_refptr<net::IOBuffer> read_buf_; |
int read_buf_len_; |
@@ -128,6 +147,12 @@ class FakeSocket : public StreamSocket { |
buf_len = rand() % buf_len + 1; |
return incoming_->Read(buf, buf_len, callback); |
} |
+ virtual int Read(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) { |
+ // Read random number of bytes. |
+ buf_len = rand() % buf_len + 1; |
+ return incoming_->Read(buf, buf_len, callback); |
+ } |
virtual int Write(IOBuffer* buf, int buf_len, |
OldCompletionCallback* callback) { |