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

Unified Diff: net/socket/web_socket_server_socket_unittest.cc

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: net/socket/web_socket_server_socket_unittest.cc
diff --git a/net/socket/web_socket_server_socket_unittest.cc b/net/socket/web_socket_server_socket_unittest.cc
index 476fc3329d451913df957077114f3c93e6464961..cabb4b9c922bcd733a8ccc0d9f5a4c51196c3579 100644
--- a/net/socket/web_socket_server_socket_unittest.cc
+++ b/net/socket/web_socket_server_socket_unittest.cc
@@ -79,16 +79,22 @@ class TestingTransportSocket : public net::Socket {
net::DrainableIOBuffer* sample, net::DrainableIOBuffer* answer)
: sample_(sample),
answer_(answer),
- final_read_callback_(NULL),
+ old_final_read_callback_(NULL),
method_factory_(this) {
}
~TestingTransportSocket() {
- if (final_read_callback_) {
+ if (old_final_read_callback_) {
MessageLoop::current()->PostTask(FROM_HERE,
method_factory_.NewRunnableMethod(
+ &TestingTransportSocket::DoOldReadCallback,
+ old_final_read_callback_, 0));
+ } else if (!final_read_callback_.is_null()) {
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ method_factory_.NewRunnableMethod(
&TestingTransportSocket::DoReadCallback,
- final_read_callback_, 0));
+ final_read_callback_, 0));
}
}
@@ -98,7 +104,28 @@ class TestingTransportSocket : public net::Socket {
CHECK_GT(buf_len, 0);
int remaining = sample_->BytesRemaining();
if (remaining < 1) {
- if (final_read_callback_)
+ if (old_final_read_callback_ || !final_read_callback_.is_null())
+ return 0;
+ old_final_read_callback_ = callback;
+ return net::ERR_IO_PENDING;
+ }
+ int lot = GetRand(1, std::min(remaining, buf_len));
+ std::copy(sample_->data(), sample_->data() + lot, buf->data());
+ sample_->DidConsume(lot);
+ if (GetRand(0, 1)) {
+ return lot;
+ }
+ MessageLoop::current()->PostTask(FROM_HERE,
+ method_factory_.NewRunnableMethod(
+ &TestingTransportSocket::DoOldReadCallback, callback, lot));
+ return net::ERR_IO_PENDING;
+ }
+ virtual int Read(net::IOBuffer* buf, int buf_len,
+ const net::CompletionCallback& callback) {
+ CHECK_GT(buf_len, 0);
+ int remaining = sample_->BytesRemaining();
+ if (remaining < 1) {
+ if (old_final_read_callback_ || !final_read_callback_.is_null())
return 0;
final_read_callback_ = callback;
return net::ERR_IO_PENDING;
@@ -144,16 +171,26 @@ class TestingTransportSocket : public net::Socket {
net::DrainableIOBuffer* answer() { return answer_.get(); }
- void DoReadCallback(net::OldCompletionCallback* callback, int result) {
+ void DoOldReadCallback(net::OldCompletionCallback* callback, int result) {
if (result == 0 && !is_closed_) {
MessageLoop::current()->PostTask(FROM_HERE,
method_factory_.NewRunnableMethod(
- &TestingTransportSocket::DoReadCallback, callback, 0));
+ &TestingTransportSocket::DoOldReadCallback, callback, 0));
} else {
if (callback)
callback->Run(result);
}
}
+ void DoReadCallback(const net::CompletionCallback& callback, int result) {
+ if (result == 0 && !is_closed_) {
+ MessageLoop::current()->PostTask(FROM_HERE,
+ method_factory_.NewRunnableMethod(
+ &TestingTransportSocket::DoReadCallback, callback, 0));
+ } else {
+ if (!callback.is_null())
+ callback.Run(result);
+ }
+ }
void DoWriteCallback(net::OldCompletionCallback* callback, int result) {
if (callback)
@@ -169,7 +206,8 @@ class TestingTransportSocket : public net::Socket {
scoped_refptr<net::DrainableIOBuffer> answer_;
// Final read callback to report zero (zero stands for EOF).
- net::OldCompletionCallback* final_read_callback_;
+ net::OldCompletionCallback* old_final_read_callback_;
+ net::CompletionCallback final_read_callback_;
ScopedRunnableMethodFactory<TestingTransportSocket> method_factory_;
csilv 2011/12/07 00:03:48 could we update this to a WeakFactory and get rid
James Hawkins 2011/12/07 00:19:37 Prob best done in a followup CL.
};

Powered by Google App Engine
This is Rietveld 408576698