Index: remoting/protocol/fake_session.cc |
diff --git a/remoting/protocol/fake_session.cc b/remoting/protocol/fake_session.cc |
index 69f87db58137c131c5fd18f5d11b777a89163a8f..c65e863108c94d4df5cd80c670aa8427a4d1c718 100644 |
--- a/remoting/protocol/fake_session.cc |
+++ b/remoting/protocol/fake_session.cc |
@@ -18,7 +18,10 @@ namespace protocol { |
const char kTestJid[] = "host1@gmail.com/chromoting123"; |
FakeSocket::FakeSocket() |
- : next_read_error_(net::OK), |
+ : async_write_(false), |
simonmorris
2012/07/31 20:19:50
Initialize write_pending_.
Sergey Ulanov
2012/07/31 21:37:53
Done.
|
+ write_limit_(0), |
+ next_write_error_(net::OK), |
+ next_read_error_(net::OK), |
read_pending_(false), |
read_buffer_size_(0), |
input_pos_(0), |
@@ -81,6 +84,37 @@ int FakeSocket::Read(net::IOBuffer* buf, int buf_len, |
int FakeSocket::Write(net::IOBuffer* buf, int buf_len, |
const net::CompletionCallback& callback) { |
EXPECT_EQ(message_loop_, MessageLoop::current()); |
+ EXPECT_FALSE(write_pending_); |
+ |
+ if (next_write_error_ != net::OK) { |
+ int r = next_write_error_; |
+ next_write_error_ = net::OK; |
+ return r; |
+ } |
simonmorris
2012/07/31 20:19:50
Is next_write_error_ used anywhere else?
Sergey Ulanov
2012/07/31 21:37:53
It's set in set_next_write_error() and used only h
|
+ |
+ if (write_limit_ > 0) |
+ buf_len = std::min(write_limit_, buf_len); |
+ |
+ if (async_write_) { |
+ message_loop_->PostTask(FROM_HERE, base::Bind( |
+ &FakeSocket::DoAsyncWrite, weak_factory_.GetWeakPtr(), |
+ scoped_refptr<net::IOBuffer>(buf), buf_len, callback)); |
+ write_pending_ = true; |
+ return net::ERR_IO_PENDING; |
+ } else { |
+ DoWrite(buf, buf_len); |
+ return buf_len; |
+ } |
+} |
+ |
+void FakeSocket::DoAsyncWrite(scoped_refptr<net::IOBuffer> buf, int buf_len, |
+ const net::CompletionCallback& callback) { |
+ write_pending_ = false; |
+ DoWrite(buf, buf_len); |
+ callback.Run(buf_len); |
+} |
+ |
+void FakeSocket::DoWrite(net::IOBuffer* buf, int buf_len) { |
written_data_.insert(written_data_.end(), |
buf->data(), buf->data() + buf_len); |
@@ -89,8 +123,6 @@ int FakeSocket::Write(net::IOBuffer* buf, int buf_len, |
&FakeSocket::AppendInputData, peer_socket_, |
std::vector<char>(buf->data(), buf->data() + buf_len))); |
} |
- |
- return buf_len; |
} |
bool FakeSocket::SetReceiveBufferSize(int32 size) { |