Chromium Code Reviews| Index: jingle/glue/pseudotcp_adapter_unittest.cc |
| diff --git a/jingle/glue/pseudotcp_adapter_unittest.cc b/jingle/glue/pseudotcp_adapter_unittest.cc |
| index 959348e74b215ff2b26a51fb1e9c3ec2c08ab6a3..ada769e0e4757407510f75e58ddb48af651dc648 100644 |
| --- a/jingle/glue/pseudotcp_adapter_unittest.cc |
| +++ b/jingle/glue/pseudotcp_adapter_unittest.cc |
| @@ -80,7 +80,7 @@ class LeakyBucket : public RateLimiter { |
| class FakeSocket : public net::Socket { |
| public: |
| FakeSocket() |
| - : read_callback_(NULL), |
| + : old_read_callback_(NULL), |
| rate_limiter_(NULL), |
| latency_ms_(0) { |
| } |
| @@ -90,13 +90,20 @@ class FakeSocket : public net::Socket { |
| if (rate_limiter_ && rate_limiter_->DropNextPacket()) |
| return; // Lose the packet. |
| - if (read_callback_) { |
| + if (old_read_callback_ || !read_callback_.is_null()) { |
| int size = std::min(read_buffer_size_, static_cast<int>(data.size())); |
| memcpy(read_buffer_->data(), &data[0], data.size()); |
| - net::OldCompletionCallback* cb = read_callback_; |
| - read_callback_ = NULL; |
| - read_buffer_ = NULL; |
| - cb->Run(size); |
| + if (old_read_callback_) { |
| + net::OldCompletionCallback* cb = old_read_callback_; |
| + old_read_callback_ = NULL; |
| + read_buffer_ = NULL; |
| + cb->Run(size); |
| + } else { |
| + net::CompletionCallback cb = read_callback_; |
| + read_callback_.Reset(); |
| + read_buffer_ = NULL; |
| + cb.Run(size); |
| + } |
| } else { |
| incoming_packets_.push_back(data); |
| } |
| @@ -112,10 +119,29 @@ class FakeSocket : public net::Socket { |
| void set_latency(int latency_ms) { latency_ms_ = latency_ms; }; |
| - // net::Socket interface. |
| + // net::Socket implementation. |
| virtual int Read(net::IOBuffer* buf, int buf_len, |
| net::OldCompletionCallback* callback) { |
| - CHECK(!read_callback_); |
| + CHECK(!old_read_callback_ && read_callback_.is_null()); |
| + CHECK(buf); |
| + |
| + if (incoming_packets_.size() > 0) { |
| + scoped_refptr<net::IOBuffer> buffer(buf); |
| + int size = std::min( |
| + static_cast<int>(incoming_packets_.front().size()), buf_len); |
| + memcpy(buffer->data(), &*incoming_packets_.front().begin(), size); |
| + incoming_packets_.pop_front(); |
| + return size; |
| + } else { |
| + old_read_callback_ = callback; |
| + read_buffer_ = buf; |
| + read_buffer_size_ = buf_len; |
| + return net::ERR_IO_PENDING; |
| + } |
| + } |
| + virtual int Read(net::IOBuffer* buf, int buf_len, |
| + const net::CompletionCallback& callback) { |
| + CHECK(!old_read_callback_ && read_callback_.is_null()); |
| CHECK(buf); |
| if (incoming_packets_.size() > 0) { |
| @@ -160,7 +186,8 @@ class FakeSocket : public net::Socket { |
| private: |
| scoped_refptr<net::IOBuffer> read_buffer_; |
| int read_buffer_size_; |
| - net::OldCompletionCallback* read_callback_; |
| + net::OldCompletionCallback* old_read_callback_; |
| + net::CompletionCallback read_callback_; |
|
James Hawkins
2011/12/07 00:01:57
#include "net/base/completion_callback.h"
James Hawkins
2011/12/07 00:08:11
Done.
|
| std::deque<std::vector<char> > incoming_packets_; |