Index: remoting/protocol/fake_datagram_socket.cc |
diff --git a/remoting/protocol/fake_datagram_socket.cc b/remoting/protocol/fake_datagram_socket.cc |
index 53d31d098276420b140092c0add0c4a22a479eaa..010cb36b186725b08c1e5c5e319e5a6129e5a2f4 100644 |
--- a/remoting/protocol/fake_datagram_socket.cc |
+++ b/remoting/protocol/fake_datagram_socket.cc |
@@ -69,6 +69,40 @@ int FakeDatagramSocket::Send(const scoped_refptr<net::IOBuffer>& buf, |
int buf_len, |
const net::CompletionCallback& callback) { |
EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
+ EXPECT_FALSE(send_pending_); |
+ |
+ if (async_send_) { |
+ send_pending_ = true; |
+ task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&FakeDatagramSocket::DoAsyncSend, weak_factory_.GetWeakPtr(), |
+ buf, buf_len, callback)); |
+ return net::ERR_IO_PENDING; |
+ } else { |
+ return DoSend(buf, buf_len); |
+ } |
+} |
+ |
+void FakeDatagramSocket::DoAsyncSend(const scoped_refptr<net::IOBuffer>& buf, |
+ int buf_len, |
+ const net::CompletionCallback& callback) { |
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
+ |
+ EXPECT_TRUE(send_pending_); |
+ send_pending_ = false; |
+ callback.Run(DoSend(buf, buf_len)); |
+} |
+ |
+int FakeDatagramSocket::DoSend(const scoped_refptr<net::IOBuffer>& buf, |
+ int buf_len) { |
+ EXPECT_TRUE(task_runner_->BelongsToCurrentThread()); |
+ |
+ if (next_send_error_ != net::OK) { |
+ int r = next_send_error_; |
+ next_send_error_ = net::OK; |
+ return r; |
+ } |
+ |
written_packets_.push_back(std::string()); |
written_packets_.back().assign(buf->data(), buf->data() + buf_len); |