| 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 cabb4b9c922bcd733a8ccc0d9f5a4c51196c3579..d64cf195be67b7dab2e7d2a38b6ccbfea05df542 100644
|
| --- a/net/socket/web_socket_server_socket_unittest.cc
|
| +++ b/net/socket/web_socket_server_socket_unittest.cc
|
| @@ -79,53 +79,25 @@ class TestingTransportSocket : public net::Socket {
|
| net::DrainableIOBuffer* sample, net::DrainableIOBuffer* answer)
|
| : sample_(sample),
|
| answer_(answer),
|
| - old_final_read_callback_(NULL),
|
| - method_factory_(this) {
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
|
| }
|
|
|
| ~TestingTransportSocket() {
|
| - if (old_final_read_callback_) {
|
| + if (!final_read_callback_.is_null()) {
|
| 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));
|
| + base::Bind(&TestingTransportSocket::DoReadCallback,
|
| + weak_factory_.GetWeakPtr(),
|
| + final_read_callback_, 0));
|
| }
|
| }
|
|
|
| // Socket implementation.
|
| virtual int Read(net::IOBuffer* buf, int buf_len,
|
| - net::OldCompletionCallback* 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;
|
| - 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())
|
| + if (!final_read_callback_.is_null())
|
| return 0;
|
| final_read_callback_ = callback;
|
| return net::ERR_IO_PENDING;
|
| @@ -136,14 +108,15 @@ class TestingTransportSocket : public net::Socket {
|
| if (GetRand(0, 1)) {
|
| return lot;
|
| }
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - method_factory_.NewRunnableMethod(
|
| - &TestingTransportSocket::DoReadCallback, callback, lot));
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&TestingTransportSocket::DoReadCallback,
|
| + weak_factory_.GetWeakPtr(), callback, lot));
|
| return net::ERR_IO_PENDING;
|
| }
|
|
|
| virtual int Write(net::IOBuffer* buf, int buf_len,
|
| - net::OldCompletionCallback* callback) {
|
| + const net::CompletionCallback& callback) {
|
| CHECK_GT(buf_len, 0);
|
| int remaining = answer_->BytesRemaining();
|
| CHECK_GE(remaining, buf_len);
|
| @@ -155,9 +128,10 @@ class TestingTransportSocket : public net::Socket {
|
| if (GetRand(0, 1)) {
|
| return lot;
|
| }
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - method_factory_.NewRunnableMethod(
|
| - &TestingTransportSocket::DoWriteCallback, callback, lot));
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&TestingTransportSocket::DoWriteCallback,
|
| + weak_factory_.GetWeakPtr(), callback, lot));
|
| return net::ERR_IO_PENDING;
|
| }
|
|
|
| @@ -171,30 +145,22 @@ class TestingTransportSocket : public net::Socket {
|
|
|
| net::DrainableIOBuffer* answer() { return answer_.get(); }
|
|
|
| - void DoOldReadCallback(net::OldCompletionCallback* callback, int result) {
|
| - if (result == 0 && !is_closed_) {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - method_factory_.NewRunnableMethod(
|
| - &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));
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &TestingTransportSocket::DoReadCallback,
|
| + weak_factory_.GetWeakPtr(), callback, 0));
|
| } else {
|
| if (!callback.is_null())
|
| callback.Run(result);
|
| }
|
| }
|
|
|
| - void DoWriteCallback(net::OldCompletionCallback* callback, int result) {
|
| - if (callback)
|
| - callback->Run(result);
|
| + void DoWriteCallback(const net::CompletionCallback& callback, int result) {
|
| + if (!callback.is_null())
|
| + callback.Run(result);
|
| }
|
|
|
| bool is_closed_;
|
| @@ -206,10 +172,9 @@ class TestingTransportSocket : public net::Socket {
|
| scoped_refptr<net::DrainableIOBuffer> answer_;
|
|
|
| // Final read callback to report zero (zero stands for EOF).
|
| - net::OldCompletionCallback* old_final_read_callback_;
|
| net::CompletionCallback final_read_callback_;
|
|
|
| - ScopedRunnableMethodFactory<TestingTransportSocket> method_factory_;
|
| + base::WeakPtrFactory<TestingTransportSocket> weak_factory_;
|
| };
|
|
|
| class Validator : public net::WebSocketServerSocket::Delegate {
|
| @@ -256,9 +221,8 @@ class ReadWriteTracker {
|
| net::WebSocketServerSocket* ws, int bytes_to_read, int bytes_to_write)
|
| : ws_(ws),
|
| buf_size_(1 << 14),
|
| - accept_callback_(NewCallback(this, &ReadWriteTracker::OnAccept)),
|
| - read_callback_(NewCallback(this, &ReadWriteTracker::OnRead)),
|
| - write_callback_(NewCallback(this, &ReadWriteTracker::OnWrite)),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(
|
| + accept_callback_(this, &ReadWriteTracker::OnAccept)),
|
| read_buf_(new net::IOBuffer(buf_size_)),
|
| write_buf_(new net::IOBuffer(buf_size_)),
|
| bytes_remaining_to_read_(bytes_to_read),
|
| @@ -266,7 +230,7 @@ class ReadWriteTracker {
|
| read_initiated_(false),
|
| write_initiated_(false),
|
| got_final_zero_(false) {
|
| - int rv = ws_->Accept(accept_callback_.get());
|
| + int rv = ws_->Accept(&accept_callback_);
|
| if (rv != net::ERR_IO_PENDING)
|
| OnAccept(rv);
|
| }
|
| @@ -295,7 +259,8 @@ class ReadWriteTracker {
|
| for (int i = 0; i < lot; ++i)
|
| write_buf_->data()[i] = ReferenceSeq(
|
| bytes_remaining_to_write_ - i - 1, kWriteSalt);
|
| - int rv = ws_->Write(write_buf_, lot, write_callback_.get());
|
| + int rv = ws_->Write(write_buf_, lot, base::Bind(&ReadWriteTracker::OnWrite,
|
| + base::Unretained(this)));
|
| if (rv != net::ERR_IO_PENDING)
|
| OnWrite(rv);
|
| }
|
| @@ -309,7 +274,8 @@ class ReadWriteTracker {
|
| lot = GetRand(1, bytes_remaining_to_read_);
|
| lot = std::min(lot, buf_size_);
|
| }
|
| - int rv = ws_->Read(read_buf_, lot, read_callback_.get());
|
| + int rv = ws_->Read(read_buf_, lot, base::Bind(&ReadWriteTracker::OnRead,
|
| + base::Unretained(this)));
|
| if (rv != net::ERR_IO_PENDING)
|
| OnRead(rv);
|
| }
|
| @@ -340,9 +306,7 @@ class ReadWriteTracker {
|
| private:
|
| net::WebSocketServerSocket* const ws_;
|
| int const buf_size_;
|
| - scoped_ptr<net::OldCompletionCallback> accept_callback_;
|
| - scoped_ptr<net::OldCompletionCallback> read_callback_;
|
| - scoped_ptr<net::OldCompletionCallback> write_callback_;
|
| + net::OldCompletionCallbackImpl<ReadWriteTracker> accept_callback_;
|
| scoped_refptr<net::IOBuffer> read_buf_;
|
| scoped_refptr<net::IOBuffer> write_buf_;
|
| int bytes_remaining_to_read_;
|
|
|