| Index: ipc/mojo/ipc_channel_mojo.cc
|
| diff --git a/ipc/mojo/ipc_channel_mojo.cc b/ipc/mojo/ipc_channel_mojo.cc
|
| index 4689e5f64ec7076d9f06b5345310d98d60c45124..f338c6fcdd96df8656681827bbeb08054c049a42 100644
|
| --- a/ipc/mojo/ipc_channel_mojo.cc
|
| +++ b/ipc/mojo/ipc_channel_mojo.cc
|
| @@ -28,26 +28,20 @@
|
| class MojoChannelFactory : public ChannelFactory {
|
| public:
|
| MojoChannelFactory(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| ChannelHandle channel_handle,
|
| Channel::Mode mode)
|
| - : delegate_(delegate),
|
| - io_runner_(io_runner),
|
| - channel_handle_(channel_handle),
|
| - mode_(mode) {}
|
| + : delegate_(delegate), channel_handle_(channel_handle), mode_(mode) {}
|
|
|
| std::string GetName() const override {
|
| return channel_handle_.name;
|
| }
|
|
|
| scoped_ptr<Channel> BuildChannel(Listener* listener) override {
|
| - return ChannelMojo::Create(delegate_, io_runner_, channel_handle_, mode_,
|
| - listener);
|
| + return ChannelMojo::Create(delegate_, channel_handle_, mode_, listener);
|
| }
|
|
|
| private:
|
| ChannelMojo::Delegate* delegate_;
|
| - scoped_refptr<base::TaskRunner> io_runner_;
|
| ChannelHandle channel_handle_;
|
| Channel::Mode mode_;
|
| };
|
| @@ -59,7 +53,6 @@
|
| public mojo::ErrorHandler {
|
| public:
|
| ClientChannelMojo(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& handle,
|
| Listener* listener);
|
| ~ClientChannelMojo() override;
|
| @@ -80,10 +73,9 @@
|
| };
|
|
|
| ClientChannelMojo::ClientChannelMojo(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& handle,
|
| Listener* listener)
|
| - : ChannelMojo(delegate, io_runner, handle, Channel::MODE_CLIENT, listener),
|
| + : ChannelMojo(delegate, handle, Channel::MODE_CLIENT, listener),
|
| binding_(this) {
|
| }
|
|
|
| @@ -112,7 +104,6 @@
|
| class ServerChannelMojo : public ChannelMojo, public mojo::ErrorHandler {
|
| public:
|
| ServerChannelMojo(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& handle,
|
| Listener* listener);
|
| ~ServerChannelMojo() override;
|
| @@ -135,10 +126,9 @@
|
| };
|
|
|
| ServerChannelMojo::ServerChannelMojo(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& handle,
|
| Listener* listener)
|
| - : ChannelMojo(delegate, io_runner, handle, Channel::MODE_SERVER, listener) {
|
| + : ChannelMojo(delegate, handle, Channel::MODE_SERVER, listener) {
|
| }
|
|
|
| ServerChannelMojo::~ServerChannelMojo() {
|
| @@ -206,19 +196,17 @@
|
| }
|
|
|
| // static
|
| -scoped_ptr<ChannelMojo> ChannelMojo::Create(
|
| - ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| - const ChannelHandle& channel_handle,
|
| - Mode mode,
|
| - Listener* listener) {
|
| +scoped_ptr<ChannelMojo> ChannelMojo::Create(ChannelMojo::Delegate* delegate,
|
| + const ChannelHandle& channel_handle,
|
| + Mode mode,
|
| + Listener* listener) {
|
| switch (mode) {
|
| case Channel::MODE_CLIENT:
|
| return make_scoped_ptr(
|
| - new ClientChannelMojo(delegate, io_runner, channel_handle, listener));
|
| + new ClientChannelMojo(delegate, channel_handle, listener));
|
| case Channel::MODE_SERVER:
|
| return make_scoped_ptr(
|
| - new ServerChannelMojo(delegate, io_runner, channel_handle, listener));
|
| + new ServerChannelMojo(delegate, channel_handle, listener));
|
| default:
|
| NOTREACHED();
|
| return nullptr;
|
| @@ -228,23 +216,20 @@
|
| // static
|
| scoped_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
|
| ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& channel_handle) {
|
| - return make_scoped_ptr(new MojoChannelFactory(
|
| - delegate, io_runner, channel_handle, Channel::MODE_SERVER));
|
| + return make_scoped_ptr(
|
| + new MojoChannelFactory(delegate, channel_handle, Channel::MODE_SERVER));
|
| }
|
|
|
| // static
|
| scoped_ptr<ChannelFactory> ChannelMojo::CreateClientFactory(
|
| ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& channel_handle) {
|
| - return make_scoped_ptr(new MojoChannelFactory(
|
| - delegate, io_runner, channel_handle, Channel::MODE_CLIENT));
|
| + return make_scoped_ptr(
|
| + new MojoChannelFactory(delegate, channel_handle, Channel::MODE_CLIENT));
|
| }
|
|
|
| ChannelMojo::ChannelMojo(ChannelMojo::Delegate* delegate,
|
| - scoped_refptr<base::TaskRunner> io_runner,
|
| const ChannelHandle& handle,
|
| Mode mode,
|
| Listener* listener)
|
| @@ -255,12 +240,16 @@
|
| // Create MojoBootstrap after all members are set as it touches
|
| // ChannelMojo from a different thread.
|
| bootstrap_ = MojoBootstrap::Create(handle, mode, this);
|
| - if (io_runner == base::MessageLoop::current()->message_loop_proxy()) {
|
| - InitOnIOThread(delegate);
|
| - } else {
|
| - io_runner->PostTask(FROM_HERE,
|
| - base::Bind(&ChannelMojo::InitOnIOThread,
|
| - base::Unretained(this), delegate));
|
| + if (delegate) {
|
| + if (delegate->GetIOTaskRunner() ==
|
| + base::MessageLoop::current()->message_loop_proxy()) {
|
| + InitDelegate(delegate);
|
| + } else {
|
| + delegate->GetIOTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &ChannelMojo::InitDelegate, base::Unretained(this), delegate));
|
| + }
|
| }
|
| }
|
|
|
| @@ -268,11 +257,9 @@
|
| Close();
|
| }
|
|
|
| -void ChannelMojo::InitOnIOThread(ChannelMojo::Delegate* delegate) {
|
| +void ChannelMojo::InitDelegate(ChannelMojo::Delegate* delegate) {
|
| ipc_support_.reset(
|
| new ScopedIPCSupport(base::MessageLoop::current()->task_runner()));
|
| - if (!delegate)
|
| - return;
|
| delegate_ = delegate->ToWeakPtr();
|
| delegate_->OnChannelCreated(weak_factory_.GetWeakPtr());
|
| }
|
|
|