Index: net/socket/client_socket_pool_base.cc |
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc |
index 86ba2dd47212c94da9f2816ba22dbdbd7be52909..e9b6b71e37643a2a5c0987cf8ae3cf243f05bc4c 100644 |
--- a/net/socket/client_socket_pool_base.cc |
+++ b/net/socket/client_socket_pool_base.cc |
@@ -133,7 +133,7 @@ namespace internal { |
ClientSocketPoolBaseHelper::Request::Request( |
ClientSocketHandle* handle, |
- CompletionCallback* callback, |
+ Tr1CompletionCallback callback, |
RequestPriority priority, |
Flags flags, |
const BoundNetLog& net_log) |
@@ -160,8 +160,7 @@ ClientSocketPoolBaseHelper::ClientSocketPoolBaseHelper( |
used_idle_socket_timeout_(used_idle_socket_timeout), |
connect_job_factory_(connect_job_factory), |
connect_backup_jobs_enabled_(false), |
- pool_generation_number_(0), |
- method_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
+ pool_generation_number_(0) { |
DCHECK_LE(0, max_sockets_per_group); |
DCHECK_LE(max_sockets_per_group, max_sockets); |
@@ -208,7 +207,6 @@ ClientSocketPoolBaseHelper::RemoveRequestFromQueue( |
int ClientSocketPoolBaseHelper::RequestSocket( |
const std::string& group_name, |
const Request* request) { |
- CHECK(request->callback()); |
CHECK(request->handle()); |
request->net_log().BeginEvent(NetLog::TYPE_SOCKET_POOL, NULL); |
@@ -229,7 +227,6 @@ void ClientSocketPoolBaseHelper::RequestSockets( |
const std::string& group_name, |
const Request& request, |
int num_sockets) { |
- DCHECK(!request.callback()); |
DCHECK(!request.handle()); |
if (num_sockets > max_sockets_per_group_) { |
@@ -975,14 +972,17 @@ bool ClientSocketPoolBaseHelper::CloseOneIdleSocketExceptInGroup( |
} |
void ClientSocketPoolBaseHelper::InvokeUserCallbackLater( |
- ClientSocketHandle* handle, CompletionCallback* callback, int rv) { |
+ ClientSocketHandle* handle, Tr1CompletionCallback callback, int rv) { |
+ using ::std::tr1::bind; |
+ using ::std::tr1::function; |
+ |
CHECK(!ContainsKey(pending_callback_map_, handle)); |
pending_callback_map_[handle] = CallbackResultPair(callback, rv); |
- MessageLoop::current()->PostTask( |
- FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &ClientSocketPoolBaseHelper::InvokeUserCallback, |
- handle)); |
+ |
+ function<void(void)> invoke_thunk = |
+ bind(&ClientSocketPoolBaseHelper::InvokeUserCallback, this, handle); |
+ MessageLoop::current()->PostClosure(FROM_HERE, |
+ closure_canceller_.Wrap(invoke_thunk)); |
} |
void ClientSocketPoolBaseHelper::InvokeUserCallback( |
@@ -994,15 +994,14 @@ void ClientSocketPoolBaseHelper::InvokeUserCallback( |
return; |
CHECK(!handle->is_initialized()); |
- CompletionCallback* callback = it->second.callback; |
+ Tr1CompletionCallback callback = it->second.callback; |
int result = it->second.result; |
pending_callback_map_.erase(it); |
- callback->Run(result); |
+ callback(result); |
} |
ClientSocketPoolBaseHelper::Group::Group() |
- : active_socket_count_(0), |
- ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {} |
+ : active_socket_count_(0) {} |
ClientSocketPoolBaseHelper::Group::~Group() { |
CleanupBackupJob(); |
@@ -1011,14 +1010,22 @@ ClientSocketPoolBaseHelper::Group::~Group() { |
void ClientSocketPoolBaseHelper::Group::StartBackupSocketTimer( |
const std::string& group_name, |
ClientSocketPoolBaseHelper* pool) { |
+ using ::std::tr1::bind; |
+ using ::std::tr1::function; |
+ |
// Only allow one timer pending to create a backup socket. |
- if (!method_factory_.empty()) |
+ if (!closure_canceller_.empty()) |
return; |
- MessageLoop::current()->PostDelayedTask( |
+ // TODO(ajwong): Somethings wrong with inlining this call as opposed to |
+ // breaking out a separate variable. Figure out syntax issue. It's probably |
+ // the template in ClosureCanceller::Wrap. |
+ function<void(void)> invoke_thunk = |
+ bind(&Group::OnBackupSocketTimerFired, this, group_name, pool); |
+ |
+ MessageLoop::current()->PostDelayedClosure( |
FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &Group::OnBackupSocketTimerFired, group_name, pool), |
+ closure_canceller_.Wrap(invoke_thunk), |
pool->ConnectRetryIntervalMs()); |
} |
@@ -1074,7 +1081,7 @@ void ClientSocketPoolBaseHelper::Group::RemoveAllJobs() { |
STLDeleteElements(&jobs_); |
// Cancel pending backup job. |
- method_factory_.RevokeAll(); |
+ closure_canceller_.RevokeAll(); |
} |
} // namespace internal |