Index: ipc/ipc_channel_proxy.cc |
diff --git a/ipc/ipc_channel_proxy.cc b/ipc/ipc_channel_proxy.cc |
index 6d2209da4acb7940ba56c3696cb05a940fc8f8fc..0668b151a858731d05c73146c107cfb8079ce8c3 100644 |
--- a/ipc/ipc_channel_proxy.cc |
+++ b/ipc/ipc_channel_proxy.cc |
@@ -8,6 +8,8 @@ |
#include "base/location.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/single_thread_task_runner.h" |
+#include "base/thread_task_runner_handle.h" |
#include "ipc/ipc_channel_proxy.h" |
#include "ipc/ipc_listener.h" |
#include "ipc/ipc_logging.h" |
@@ -43,17 +45,22 @@ ChannelProxy::MessageFilter::~MessageFilter() {} |
//------------------------------------------------------------------------------ |
ChannelProxy::Context::Context(Listener* listener, |
- base::MessageLoopProxy* ipc_message_loop) |
- : listener_message_loop_(base::MessageLoopProxy::current()), |
+ base::SingleThreadTaskRunner* ipc_task_runner) |
+ : listener_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
listener_(listener), |
- ipc_message_loop_(ipc_message_loop), |
+ ipc_task_runner_(ipc_task_runner), |
channel_connected_called_(false), |
peer_pid_(base::kNullProcessId) { |
+ DCHECK(ipc_task_runner_); |
} |
ChannelProxy::Context::~Context() { |
} |
+void ChannelProxy::Context::ClearIPCTaskRunner() { |
+ ipc_task_runner_ = NULL; |
+} |
+ |
void ChannelProxy::Context::CreateChannel(const IPC::ChannelHandle& handle, |
const Channel::Mode& mode) { |
DCHECK(channel_.get() == NULL); |
@@ -94,7 +101,7 @@ bool ChannelProxy::Context::OnMessageReceivedNoFilter(const Message& message) { |
// this thread is active. That should be a reasonable assumption, but it |
// feels risky. We may want to invent some more indirect way of referring to |
// a MessageLoop if this becomes a problem. |
- listener_message_loop_->PostTask( |
+ listener_task_runner_->PostTask( |
FROM_HERE, base::Bind(&Context::OnDispatchMessage, this, message)); |
return true; |
} |
@@ -112,8 +119,8 @@ void ChannelProxy::Context::OnChannelConnected(int32 peer_pid) { |
for (size_t i = 0; i < filters_.size(); ++i) |
filters_[i]->OnChannelConnected(peer_pid); |
- // See above comment about using listener_message_loop_ here. |
- listener_message_loop_->PostTask( |
+ // See above comment about using listener_task_runner_ here. |
+ listener_task_runner_->PostTask( |
FROM_HERE, base::Bind(&Context::OnDispatchConnected, this)); |
} |
@@ -122,8 +129,8 @@ void ChannelProxy::Context::OnChannelError() { |
for (size_t i = 0; i < filters_.size(); ++i) |
filters_[i]->OnChannelError(); |
- // See above comment about using listener_message_loop_ here. |
- listener_message_loop_->PostTask( |
+ // See above comment about using listener_task_runner_ here. |
+ listener_task_runner_->PostTask( |
FROM_HERE, base::Bind(&Context::OnDispatchError, this)); |
} |
@@ -214,7 +221,7 @@ void ChannelProxy::Context::OnRemoveFilter(MessageFilter* filter) { |
void ChannelProxy::Context::AddFilter(MessageFilter* filter) { |
base::AutoLock auto_lock(pending_filters_lock_); |
pending_filters_.push_back(make_scoped_refptr(filter)); |
- ipc_message_loop_->PostTask( |
+ ipc_task_runner_->PostTask( |
FROM_HERE, base::Bind(&Context::OnAddFilter, this)); |
} |
@@ -276,8 +283,8 @@ void ChannelProxy::Context::OnDispatchError() { |
ChannelProxy::ChannelProxy(const IPC::ChannelHandle& channel_handle, |
Channel::Mode mode, |
Listener* listener, |
- base::MessageLoopProxy* ipc_thread) |
- : context_(new Context(listener, ipc_thread)), |
+ base::SingleThreadTaskRunner* ipc_task_runner) |
+ : context_(new Context(listener, ipc_task_runner)), |
outgoing_message_filter_(NULL), |
did_init_(false) { |
Init(channel_handle, mode, true); |
@@ -314,13 +321,13 @@ void ChannelProxy::Init(const IPC::ChannelHandle& channel_handle, |
// to connect and get an error since the pipe doesn't exist yet. |
context_->CreateChannel(channel_handle, mode); |
} else { |
- context_->ipc_message_loop()->PostTask( |
+ context_->ipc_task_runner()->PostTask( |
FROM_HERE, base::Bind(&Context::CreateChannel, context_.get(), |
channel_handle, mode)); |
} |
// complete initialization on the background thread |
- context_->ipc_message_loop()->PostTask( |
+ context_->ipc_task_runner()->PostTask( |
FROM_HERE, base::Bind(&Context::OnChannelOpened, context_.get())); |
did_init_ = true; |
@@ -332,8 +339,8 @@ void ChannelProxy::Close() { |
// possible that the channel could be closed while it is receiving messages! |
context_->Clear(); |
- if (context_->ipc_message_loop()) { |
- context_->ipc_message_loop()->PostTask( |
+ if (context_->ipc_task_runner()) { |
+ context_->ipc_task_runner()->PostTask( |
FROM_HERE, base::Bind(&Context::OnChannelClosed, context_.get())); |
} |
} |
@@ -347,7 +354,7 @@ bool ChannelProxy::Send(Message* message) { |
Logging::GetInstance()->OnSendMessage(message, context_->channel_id()); |
#endif |
- context_->ipc_message_loop()->PostTask( |
+ context_->ipc_task_runner()->PostTask( |
FROM_HERE, |
base::Bind(&ChannelProxy::Context::OnSendMessage, |
context_, base::Passed(scoped_ptr<Message>(message)))); |
@@ -359,13 +366,13 @@ void ChannelProxy::AddFilter(MessageFilter* filter) { |
} |
void ChannelProxy::RemoveFilter(MessageFilter* filter) { |
- context_->ipc_message_loop()->PostTask( |
+ context_->ipc_task_runner()->PostTask( |
FROM_HERE, base::Bind(&Context::OnRemoveFilter, context_.get(), |
make_scoped_refptr(filter))); |
} |
-void ChannelProxy::ClearIPCMessageLoop() { |
- context()->ClearIPCMessageLoop(); |
+void ChannelProxy::ClearIPCTaskRunner() { |
+ context()->ClearIPCTaskRunner(); |
} |
#if defined(OS_POSIX) && !defined(OS_NACL) |