Commit df7a30d0 authored by jhawkins@chromium.org's avatar jhawkins@chromium.org

base::Bind: Convert ServerSocket::Accept.

BUG=none
TEST=none
R=csilv

Review URL: http://codereview.chromium.org/8771030

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112863 0039d316-1c4b-4281-b951-d872f2087c98
parent 2e36b401
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "content/browser/renderer_host/p2p/socket_host_tcp_server.h" #include "content/browser/renderer_host/p2p/socket_host_tcp_server.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "content/browser/renderer_host/p2p/socket_host_tcp.h" #include "content/browser/renderer_host/p2p/socket_host_tcp.h"
#include "content/common/p2p_messages.h" #include "content/common/p2p_messages.h"
...@@ -24,8 +26,9 @@ P2PSocketHostTcpServer::P2PSocketHostTcpServer( ...@@ -24,8 +26,9 @@ P2PSocketHostTcpServer::P2PSocketHostTcpServer(
int routing_id, int id) int routing_id, int id)
: P2PSocketHost(message_sender, routing_id, id), : P2PSocketHost(message_sender, routing_id, id),
socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())), socket_(new net::TCPServerSocket(NULL, net::NetLog::Source())),
ALLOW_THIS_IN_INITIALIZER_LIST( ALLOW_THIS_IN_INITIALIZER_LIST(accept_callback_(
accept_callback_(this, &P2PSocketHostTcpServer::OnAccepted)) { base::Bind(&P2PSocketHostTcpServer::OnAccepted,
base::Unretained(this)))) {
} }
P2PSocketHostTcpServer::~P2PSocketHostTcpServer() { P2PSocketHostTcpServer::~P2PSocketHostTcpServer() {
...@@ -76,7 +79,7 @@ void P2PSocketHostTcpServer::OnError() { ...@@ -76,7 +79,7 @@ void P2PSocketHostTcpServer::OnError() {
void P2PSocketHostTcpServer::DoAccept() { void P2PSocketHostTcpServer::DoAccept() {
while (true) { while (true) {
int result = socket_->Accept(&accept_socket_, &accept_callback_); int result = socket_->Accept(&accept_socket_, accept_callback_);
if (result == net::ERR_IO_PENDING) { if (result == net::ERR_IO_PENDING) {
break; break;
} else { } else {
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "content/browser/renderer_host/p2p/socket_host.h" #include "content/browser/renderer_host/p2p/socket_host.h"
#include "content/common/content_export.h" #include "content/common/content_export.h"
#include "content/common/p2p_sockets.h" #include "content/common/p2p_sockets.h"
#include "net/base/completion_callback.h"
#include "net/socket/tcp_server_socket.h" #include "net/socket/tcp_server_socket.h"
namespace net { namespace net {
...@@ -55,7 +56,7 @@ class CONTENT_EXPORT P2PSocketHostTcpServer : public P2PSocketHost { ...@@ -55,7 +56,7 @@ class CONTENT_EXPORT P2PSocketHostTcpServer : public P2PSocketHost {
scoped_ptr<net::StreamSocket> accept_socket_; scoped_ptr<net::StreamSocket> accept_socket_;
AcceptedSocketsMap accepted_sockets_; AcceptedSocketsMap accepted_sockets_;
net::OldCompletionCallbackImpl<P2PSocketHostTcpServer> accept_callback_; net::CompletionCallback accept_callback_;
DISALLOW_COPY_AND_ASSIGN(P2PSocketHostTcpServer); DISALLOW_COPY_AND_ASSIGN(P2PSocketHostTcpServer);
}; };
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "content/browser/renderer_host/p2p/socket_host_tcp.h" #include "content/browser/renderer_host/p2p/socket_host_tcp.h"
#include "content/browser/renderer_host/p2p/socket_host_test_utils.h" #include "content/browser/renderer_host/p2p/socket_host_test_utils.h"
#include "net/base/completion_callback.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -20,22 +21,25 @@ class FakeServerSocket : public net::ServerSocket { ...@@ -20,22 +21,25 @@ class FakeServerSocket : public net::ServerSocket {
public: public:
FakeServerSocket() FakeServerSocket()
: listening_(false), : listening_(false),
accept_socket_(NULL), accept_socket_(NULL) {
accept_callback_(NULL) {
} }
~FakeServerSocket() { } virtual ~FakeServerSocket() {}
bool listening() { return listening_; } bool listening() { return listening_; }
void AddIncoming(net::StreamSocket* socket) { void AddIncoming(net::StreamSocket* socket) {
if (accept_callback_) { if (!accept_callback_.is_null()) {
DCHECK(incoming_sockets_.empty()); DCHECK(incoming_sockets_.empty());
accept_socket_->reset(socket); accept_socket_->reset(socket);
accept_socket_ = NULL; accept_socket_ = NULL;
net::OldCompletionCallback* cb = accept_callback_;
accept_callback_ = NULL; // This copy is necessary because this implementation of ServerSocket
cb->Run(net::OK); // bases logic on the null-ness of |accept_callback_| in the bound
// callback.
net::CompletionCallback cb = accept_callback_;
accept_callback_.Reset();
cb.Run(net::OK);
} else { } else {
incoming_sockets_.push_back(socket); incoming_sockets_.push_back(socket);
} }
...@@ -54,7 +58,7 @@ class FakeServerSocket : public net::ServerSocket { ...@@ -54,7 +58,7 @@ class FakeServerSocket : public net::ServerSocket {
} }
virtual int Accept(scoped_ptr<net::StreamSocket>* socket, virtual int Accept(scoped_ptr<net::StreamSocket>* socket,
net::OldCompletionCallback* callback) OVERRIDE { const net::CompletionCallback& callback) OVERRIDE {
DCHECK(socket); DCHECK(socket);
if (!incoming_sockets_.empty()) { if (!incoming_sockets_.empty()) {
socket->reset(incoming_sockets_.front()); socket->reset(incoming_sockets_.front());
...@@ -73,7 +77,7 @@ class FakeServerSocket : public net::ServerSocket { ...@@ -73,7 +77,7 @@ class FakeServerSocket : public net::ServerSocket {
net::IPEndPoint local_address_; net::IPEndPoint local_address_;
scoped_ptr<net::StreamSocket>* accept_socket_; scoped_ptr<net::StreamSocket>* accept_socket_;
net::OldCompletionCallback* accept_callback_; net::CompletionCallback accept_callback_;
std::list<net::StreamSocket*> incoming_sockets_; std::list<net::StreamSocket*> incoming_sockets_;
}; };
......
...@@ -29,7 +29,7 @@ class NET_EXPORT ServerSocket { ...@@ -29,7 +29,7 @@ class NET_EXPORT ServerSocket {
// Accept connection. Callback is called when new connection is // Accept connection. Callback is called when new connection is
// accepted. // accepted.
virtual int Accept(scoped_ptr<StreamSocket>* socket, virtual int Accept(scoped_ptr<StreamSocket>* socket,
OldCompletionCallback* callback) = 0; const CompletionCallback& callback) = 0;
private: private:
DISALLOW_COPY_AND_ASSIGN(ServerSocket); DISALLOW_COPY_AND_ASSIGN(ServerSocket);
......
...@@ -41,9 +41,9 @@ TEST(TCPClientSocketTest, BindLoopbackToLoopback) { ...@@ -41,9 +41,9 @@ TEST(TCPClientSocketTest, BindLoopbackToLoopback) {
TestOldCompletionCallback connect_callback; TestOldCompletionCallback connect_callback;
EXPECT_EQ(ERR_IO_PENDING, socket.Connect(&connect_callback)); EXPECT_EQ(ERR_IO_PENDING, socket.Connect(&connect_callback));
TestOldCompletionCallback accept_callback; TestCompletionCallback accept_callback;
scoped_ptr<StreamSocket> accepted_socket; scoped_ptr<StreamSocket> accepted_socket;
int result = server.Accept(&accepted_socket, &accept_callback); int result = server.Accept(&accepted_socket, accept_callback.callback());
if (result == ERR_IO_PENDING) if (result == ERR_IO_PENDING)
result = accept_callback.WaitForResult(); result = accept_callback.WaitForResult();
ASSERT_EQ(OK, result); ASSERT_EQ(OK, result);
......
...@@ -34,7 +34,6 @@ TCPServerSocketLibevent::TCPServerSocketLibevent( ...@@ -34,7 +34,6 @@ TCPServerSocketLibevent::TCPServerSocketLibevent(
const net::NetLog::Source& source) const net::NetLog::Source& source)
: socket_(kInvalidSocket), : socket_(kInvalidSocket),
accept_socket_(NULL), accept_socket_(NULL),
accept_callback_(NULL),
net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) { net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) {
scoped_refptr<NetLog::EventParameters> params; scoped_refptr<NetLog::EventParameters> params;
if (source.is_valid()) if (source.is_valid())
...@@ -106,11 +105,11 @@ int TCPServerSocketLibevent::GetLocalAddress(IPEndPoint* address) const { ...@@ -106,11 +105,11 @@ int TCPServerSocketLibevent::GetLocalAddress(IPEndPoint* address) const {
} }
int TCPServerSocketLibevent::Accept( int TCPServerSocketLibevent::Accept(
scoped_ptr<StreamSocket>* socket, OldCompletionCallback* callback) { scoped_ptr<StreamSocket>* socket, const CompletionCallback& callback) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK(socket); DCHECK(socket);
DCHECK(callback); DCHECK(!callback.is_null());
DCHECK(!accept_callback_); DCHECK(accept_callback_.is_null());
net_log_.BeginEvent(NetLog::TYPE_TCP_ACCEPT, NULL); net_log_.BeginEvent(NetLog::TYPE_TCP_ACCEPT, NULL);
...@@ -185,12 +184,11 @@ void TCPServerSocketLibevent::OnFileCanReadWithoutBlocking(int fd) { ...@@ -185,12 +184,11 @@ void TCPServerSocketLibevent::OnFileCanReadWithoutBlocking(int fd) {
int result = AcceptInternal(accept_socket_); int result = AcceptInternal(accept_socket_);
if (result != ERR_IO_PENDING) { if (result != ERR_IO_PENDING) {
OldCompletionCallback* c = accept_callback_;
accept_callback_ = NULL;
accept_socket_ = NULL; accept_socket_ = NULL;
bool ok = accept_socket_watcher_.StopWatchingFileDescriptor(); bool ok = accept_socket_watcher_.StopWatchingFileDescriptor();
DCHECK(ok); DCHECK(ok);
c->Run(result); accept_callback_.Run(result);
accept_callback_.Reset();
} }
} }
......
...@@ -29,7 +29,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketLibevent ...@@ -29,7 +29,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketLibevent
virtual int Listen(const net::IPEndPoint& address, int backlog) OVERRIDE; virtual int Listen(const net::IPEndPoint& address, int backlog) OVERRIDE;
virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE; virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE;
virtual int Accept(scoped_ptr<StreamSocket>* socket, virtual int Accept(scoped_ptr<StreamSocket>* socket,
OldCompletionCallback* callback) OVERRIDE; const CompletionCallback& callback) OVERRIDE;
// MessageLoopForIO::Watcher implementation. // MessageLoopForIO::Watcher implementation.
virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE; virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
...@@ -44,7 +44,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketLibevent ...@@ -44,7 +44,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketLibevent
MessageLoopForIO::FileDescriptorWatcher accept_socket_watcher_; MessageLoopForIO::FileDescriptorWatcher accept_socket_watcher_;
scoped_ptr<StreamSocket>* accept_socket_; scoped_ptr<StreamSocket>* accept_socket_;
OldCompletionCallback* accept_callback_; CompletionCallback accept_callback_;
BoundNetLog net_log_; BoundNetLog net_log_;
}; };
......
...@@ -82,9 +82,9 @@ TEST_F(TCPServerSocketTest, Accept) { ...@@ -82,9 +82,9 @@ TEST_F(TCPServerSocketTest, Accept) {
NULL, NetLog::Source()); NULL, NetLog::Source());
connecting_socket.Connect(&connect_callback); connecting_socket.Connect(&connect_callback);
TestOldCompletionCallback accept_callback; TestCompletionCallback accept_callback;
scoped_ptr<StreamSocket> accepted_socket; scoped_ptr<StreamSocket> accepted_socket;
int result = socket_.Accept(&accepted_socket, &accept_callback); int result = socket_.Accept(&accepted_socket, accept_callback.callback());
if (result == ERR_IO_PENDING) if (result == ERR_IO_PENDING)
result = accept_callback.WaitForResult(); result = accept_callback.WaitForResult();
ASSERT_EQ(OK, result); ASSERT_EQ(OK, result);
...@@ -102,10 +102,11 @@ TEST_F(TCPServerSocketTest, Accept) { ...@@ -102,10 +102,11 @@ TEST_F(TCPServerSocketTest, Accept) {
TEST_F(TCPServerSocketTest, AcceptAsync) { TEST_F(TCPServerSocketTest, AcceptAsync) {
ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
TestOldCompletionCallback accept_callback; TestCompletionCallback accept_callback;
scoped_ptr<StreamSocket> accepted_socket; scoped_ptr<StreamSocket> accepted_socket;
ASSERT_EQ(ERR_IO_PENDING, socket_.Accept(&accepted_socket, &accept_callback)); ASSERT_EQ(ERR_IO_PENDING,
socket_.Accept(&accepted_socket, accept_callback.callback()));
TestOldCompletionCallback connect_callback; TestOldCompletionCallback connect_callback;
TCPClientSocket connecting_socket(local_address_list(), TCPClientSocket connecting_socket(local_address_list(),
...@@ -126,11 +127,11 @@ TEST_F(TCPServerSocketTest, AcceptAsync) { ...@@ -126,11 +127,11 @@ TEST_F(TCPServerSocketTest, AcceptAsync) {
TEST_F(TCPServerSocketTest, Accept2Connections) { TEST_F(TCPServerSocketTest, Accept2Connections) {
ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
TestOldCompletionCallback accept_callback; TestCompletionCallback accept_callback;
scoped_ptr<StreamSocket> accepted_socket; scoped_ptr<StreamSocket> accepted_socket;
ASSERT_EQ(ERR_IO_PENDING, ASSERT_EQ(ERR_IO_PENDING,
socket_.Accept(&accepted_socket, &accept_callback)); socket_.Accept(&accepted_socket, accept_callback.callback()));
TestOldCompletionCallback connect_callback; TestOldCompletionCallback connect_callback;
TCPClientSocket connecting_socket(local_address_list(), TCPClientSocket connecting_socket(local_address_list(),
...@@ -144,9 +145,9 @@ TEST_F(TCPServerSocketTest, Accept2Connections) { ...@@ -144,9 +145,9 @@ TEST_F(TCPServerSocketTest, Accept2Connections) {
EXPECT_EQ(OK, accept_callback.WaitForResult()); EXPECT_EQ(OK, accept_callback.WaitForResult());
TestOldCompletionCallback accept_callback2; TestCompletionCallback accept_callback2;
scoped_ptr<StreamSocket> accepted_socket2; scoped_ptr<StreamSocket> accepted_socket2;
int result = socket_.Accept(&accepted_socket2, &accept_callback2); int result = socket_.Accept(&accepted_socket2, accept_callback2.callback());
if (result == ERR_IO_PENDING) if (result == ERR_IO_PENDING)
result = accept_callback2.WaitForResult(); result = accept_callback2.WaitForResult();
ASSERT_EQ(OK, result); ASSERT_EQ(OK, result);
...@@ -174,9 +175,9 @@ TEST_F(TCPServerSocketTest, AcceptIPv6) { ...@@ -174,9 +175,9 @@ TEST_F(TCPServerSocketTest, AcceptIPv6) {
NULL, NetLog::Source()); NULL, NetLog::Source());
connecting_socket.Connect(&connect_callback); connecting_socket.Connect(&connect_callback);
TestOldCompletionCallback accept_callback; TestCompletionCallback accept_callback;
scoped_ptr<StreamSocket> accepted_socket; scoped_ptr<StreamSocket> accepted_socket;
int result = socket_.Accept(&accepted_socket, &accept_callback); int result = socket_.Accept(&accepted_socket, accept_callback.callback());
if (result == ERR_IO_PENDING) if (result == ERR_IO_PENDING)
result = accept_callback.WaitForResult(); result = accept_callback.WaitForResult();
ASSERT_EQ(OK, result); ASSERT_EQ(OK, result);
......
...@@ -20,7 +20,6 @@ TCPServerSocketWin::TCPServerSocketWin(net::NetLog* net_log, ...@@ -20,7 +20,6 @@ TCPServerSocketWin::TCPServerSocketWin(net::NetLog* net_log,
: socket_(INVALID_SOCKET), : socket_(INVALID_SOCKET),
socket_event_(WSA_INVALID_EVENT), socket_event_(WSA_INVALID_EVENT),
accept_socket_(NULL), accept_socket_(NULL),
accept_callback_(NULL),
net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) { net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)) {
scoped_refptr<NetLog::EventParameters> params; scoped_refptr<NetLog::EventParameters> params;
if (source.is_valid()) if (source.is_valid())
...@@ -99,11 +98,11 @@ int TCPServerSocketWin::GetLocalAddress(IPEndPoint* address) const { ...@@ -99,11 +98,11 @@ int TCPServerSocketWin::GetLocalAddress(IPEndPoint* address) const {
} }
int TCPServerSocketWin::Accept( int TCPServerSocketWin::Accept(
scoped_ptr<StreamSocket>* socket, OldCompletionCallback* callback) { scoped_ptr<StreamSocket>* socket, const CompletionCallback& callback) {
DCHECK(CalledOnValidThread()); DCHECK(CalledOnValidThread());
DCHECK(socket); DCHECK(socket);
DCHECK(callback); DCHECK(!callback.is_null());
DCHECK(!accept_callback_); DCHECK(accept_callback_.is_null());
net_log_.BeginEvent(NetLog::TYPE_TCP_ACCEPT, NULL); net_log_.BeginEvent(NetLog::TYPE_TCP_ACCEPT, NULL);
...@@ -182,10 +181,9 @@ void TCPServerSocketWin::OnObjectSignaled(HANDLE object) { ...@@ -182,10 +181,9 @@ void TCPServerSocketWin::OnObjectSignaled(HANDLE object) {
if (ev.lNetworkEvents & FD_ACCEPT) { if (ev.lNetworkEvents & FD_ACCEPT) {
int result = AcceptInternal(accept_socket_); int result = AcceptInternal(accept_socket_);
if (result != ERR_IO_PENDING) { if (result != ERR_IO_PENDING) {
OldCompletionCallback* c = accept_callback_;
accept_callback_ = NULL;
accept_socket_ = NULL; accept_socket_ = NULL;
c->Run(result); accept_callback_.Run(result);
accept_callback_.Reset();
} }
} }
} }
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "base/message_loop.h" #include "base/message_loop.h"
#include "base/win/object_watcher.h" #include "base/win/object_watcher.h"
#include "base/threading/non_thread_safe.h" #include "base/threading/non_thread_safe.h"
#include "net/base/completion_callback.h"
#include "net/base/net_log.h" #include "net/base/net_log.h"
#include "net/socket/server_socket.h" #include "net/socket/server_socket.h"
...@@ -31,7 +32,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketWin ...@@ -31,7 +32,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketWin
virtual int Listen(const net::IPEndPoint& address, int backlog); virtual int Listen(const net::IPEndPoint& address, int backlog);
virtual int GetLocalAddress(IPEndPoint* address) const; virtual int GetLocalAddress(IPEndPoint* address) const;
virtual int Accept(scoped_ptr<StreamSocket>* socket, virtual int Accept(scoped_ptr<StreamSocket>* socket,
OldCompletionCallback* callback); const CompletionCallback& callback);
// base::ObjectWatcher::Delegate implementation. // base::ObjectWatcher::Delegate implementation.
virtual void OnObjectSignaled(HANDLE object); virtual void OnObjectSignaled(HANDLE object);
...@@ -46,7 +47,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketWin ...@@ -46,7 +47,7 @@ class NET_EXPORT_PRIVATE TCPServerSocketWin
base::win::ObjectWatcher accept_watcher_; base::win::ObjectWatcher accept_watcher_;
scoped_ptr<StreamSocket>* accept_socket_; scoped_ptr<StreamSocket>* accept_socket_;
OldCompletionCallback* accept_callback_; CompletionCallback accept_callback_;
BoundNetLog net_log_; BoundNetLog net_log_;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment