summaryrefslogtreecommitdiffstats
path: root/ipc/mojo/ipc_channel_mojo.cc
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-12 21:44:01 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-12 21:46:05 +0000
commitefbf95de6aaf8745dacc06a7cbff6feb3b4213cd (patch)
treee7a8725dfffcd6b676f546b852279c8e63b31c68 /ipc/mojo/ipc_channel_mojo.cc
parent73e5366c84edaed23d9a335e68d91ca54052eaea (diff)
downloadchromium_src-efbf95de6aaf8745dacc06a7cbff6feb3b4213cd.zip
chromium_src-efbf95de6aaf8745dacc06a7cbff6feb3b4213cd.tar.gz
chromium_src-efbf95de6aaf8745dacc06a7cbff6feb3b4213cd.tar.bz2
Convert IPC::ChannelMojo initialization to use new mojo::embedder::CreateChannelOnIOThread().
(Also simplify things a bit.) R=morrita@chromium.org Review URL: https://codereview.chromium.org/459613009 Cr-Commit-Position: refs/heads/master@{#289071} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289071 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/mojo/ipc_channel_mojo.cc')
-rw-r--r--ipc/mojo/ipc_channel_mojo.cc60
1 files changed, 24 insertions, 36 deletions
diff --git a/ipc/mojo/ipc_channel_mojo.cc b/ipc/mojo/ipc_channel_mojo.cc
index d13f78b..8e205ac 100644
--- a/ipc/mojo/ipc_channel_mojo.cc
+++ b/ipc/mojo/ipc_channel_mojo.cc
@@ -272,7 +272,7 @@ bool ChannelMojo::MessageReader::Send(scoped_ptr<Message> message) {
//------------------------------------------------------------------------------
-// MessagePipeReader implemenation for control messages.
+// MessagePipeReader implementation for control messages.
// Actual message handling is implemented by sublcasses.
class ChannelMojo::ControlReader : public internal::MessagePipeReader {
public:
@@ -488,26 +488,12 @@ ChannelMojo::ChannelMojo(
bootstrap_(bootstrap.Pass()),
mode_(mode), listener_(listener),
peer_pid_(base::kNullProcessId) {
- DCHECK(mode_ == MODE_SERVER || mode_ == MODE_CLIENT);
- mojo::ScopedMessagePipeHandle control_pipe
- = mojo::embedder::CreateChannel(
- mojo::embedder::ScopedPlatformHandle(
- ToPlatformHandle(bootstrap_->TakePipeHandle())),
- io_thread_task_runner,
- base::Bind(&ChannelMojo::DidCreateChannel, base::Unretained(this)),
- io_thread_task_runner);
-
- // MessagePipeReader, that is crated in InitOnIOThread(), should live only in
- // IO thread, but IPC::Channel can be instantiated outside of it.
- // So we move the creation to the appropriate thread.
if (base::MessageLoopProxy::current() == io_thread_task_runner) {
- InitOnIOThread(control_pipe.Pass());
+ InitOnIOThread();
} else {
- io_thread_task_runner->PostTask(
- FROM_HERE,
- base::Bind(&ChannelMojo::InitOnIOThread,
- weak_factory_.GetWeakPtr(),
- base::Passed(control_pipe.Pass())));
+ io_thread_task_runner->PostTask(FROM_HERE,
+ base::Bind(&ChannelMojo::InitOnIOThread,
+ weak_factory_.GetWeakPtr()));
}
}
@@ -515,20 +501,26 @@ ChannelMojo::~ChannelMojo() {
Close();
}
-void ChannelMojo::InitOnIOThread(mojo::ScopedMessagePipeHandle control_pipe) {
- control_reader_ = CreateControlReader(control_pipe.Pass());
-}
-
-scoped_ptr<ChannelMojo::ControlReader> ChannelMojo::CreateControlReader(
- mojo::ScopedMessagePipeHandle pipe) {
- if (MODE_SERVER == mode_) {
- return make_scoped_ptr(
- new ServerControlReader(pipe.Pass(), this)).PassAs<ControlReader>();
+void ChannelMojo::InitOnIOThread() {
+ mojo::embedder::ChannelInfo* channel_info;
+ mojo::ScopedMessagePipeHandle control_pipe =
+ mojo::embedder::CreateChannelOnIOThread(
+ mojo::embedder::ScopedPlatformHandle(
+ ToPlatformHandle(bootstrap_->TakePipeHandle())),
+ &channel_info);
+ channel_info_.reset(channel_info);
+
+ switch (mode_) {
+ case MODE_SERVER:
+ control_reader_.reset(new ServerControlReader(control_pipe.Pass(), this));
+ break;
+ case MODE_CLIENT:
+ control_reader_.reset(new ClientControlReader(control_pipe.Pass(), this));
+ break;
+ default:
+ NOTREACHED();
+ break;
}
-
- DCHECK(mode_ == MODE_CLIENT);
- return make_scoped_ptr(
- new ClientControlReader(pipe.Pass(), this)).PassAs<ControlReader>();
}
bool ChannelMojo::Connect() {
@@ -585,10 +577,6 @@ ChannelHandle ChannelMojo::TakePipeHandle() {
return bootstrap_->TakePipeHandle();
}
-void ChannelMojo::DidCreateChannel(mojo::embedder::ChannelInfo* info) {
- channel_info_.reset(info);
-}
-
void ChannelMojo::OnMessageReceived(Message& message) {
listener_->OnMessageReceived(message);
if (message.dispatch_error())