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..7f17647b40e876a3533dd30905bb6405d12ee1cd 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,15 @@ bool ClientSocketPoolBaseHelper::CloseOneIdleSocketExceptInGroup( |
} |
void ClientSocketPoolBaseHelper::InvokeUserCallbackLater( |
- ClientSocketHandle* handle, CompletionCallback* callback, int rv) { |
+ ClientSocketHandle* handle, Tr1CompletionCallback callback, int rv) { |
CHECK(!ContainsKey(pending_callback_map_, handle)); |
pending_callback_map_[handle] = CallbackResultPair(callback, rv); |
- MessageLoop::current()->PostTask( |
- FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &ClientSocketPoolBaseHelper::InvokeUserCallback, |
- handle)); |
+ |
+ base::Thunk<void(void)> invoke_thunk = |
+ base::Prebind(&ClientSocketPoolBaseHelper::InvokeUserCallback, |
+ base::Unretained(this), handle); |
+ MessageLoop::current()->PostClosure(FROM_HERE, |
+ thunk_canceller_.Wrap(invoke_thunk)); |
} |
void ClientSocketPoolBaseHelper::InvokeUserCallback( |
@@ -994,15 +992,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(); |
@@ -1012,13 +1009,19 @@ void ClientSocketPoolBaseHelper::Group::StartBackupSocketTimer( |
const std::string& group_name, |
ClientSocketPoolBaseHelper* pool) { |
// Only allow one timer pending to create a backup socket. |
- if (!method_factory_.empty()) |
+ if (!thunk_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. |
+ base::Thunk<void(void)> invoke_thunk = |
+ base::Prebind(&Group::OnBackupSocketTimerFired, |
+ base::Unretained(this), group_name, pool); |
+ |
+ MessageLoop::current()->PostDelayedClosure( |
FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &Group::OnBackupSocketTimerFired, group_name, pool), |
+ thunk_canceller_.Wrap(invoke_thunk), |
pool->ConnectRetryIntervalMs()); |
} |
@@ -1074,7 +1077,7 @@ void ClientSocketPoolBaseHelper::Group::RemoveAllJobs() { |
STLDeleteElements(&jobs_); |
// Cancel pending backup job. |
- method_factory_.RevokeAll(); |
+ thunk_canceller_.RevokeAll(); |
} |
} // namespace internal |