| Index: ipc/mojo/ipc_channel_mojo.cc
|
| diff --git a/ipc/mojo/ipc_channel_mojo.cc b/ipc/mojo/ipc_channel_mojo.cc
|
| index 0c6c99478c2670cb752cb18e1739c4c4ae3b1400..6cf8130e84717d44e217c9f81679f0095b83ef8b 100644
|
| --- a/ipc/mojo/ipc_channel_mojo.cc
|
| +++ b/ipc/mojo/ipc_channel_mojo.cc
|
| @@ -48,9 +48,9 @@ class MojoChannelFactory : public ChannelFactory {
|
|
|
| //------------------------------------------------------------------------------
|
|
|
| -class ClientChannelMojo
|
| - : public ChannelMojo,
|
| - public NON_EXPORTED_BASE(mojo::InterfaceImpl<ClientChannel>) {
|
| +class ClientChannelMojo : public ChannelMojo,
|
| + public ClientChannel,
|
| + public mojo::ErrorHandler {
|
| public:
|
| ClientChannelMojo(ChannelMojo::Delegate* delegate,
|
| const ChannelHandle& handle,
|
| @@ -58,7 +58,7 @@ class ClientChannelMojo
|
| ~ClientChannelMojo() override;
|
| // MojoBootstrap::Delegate implementation
|
| void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override;
|
| - // InterfaceImpl implementation
|
| + // mojo::ErrorHandler implementation
|
| void OnConnectionError() override;
|
| // ClientChannel implementation
|
| void Init(
|
| @@ -66,13 +66,17 @@ class ClientChannelMojo
|
| int32_t peer_pid,
|
| const mojo::Callback<void(int32_t)>& callback) override;
|
|
|
| + private:
|
| + mojo::Binding<ClientChannel> binding_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(ClientChannelMojo);
|
| };
|
|
|
| ClientChannelMojo::ClientChannelMojo(ChannelMojo::Delegate* delegate,
|
| const ChannelHandle& handle,
|
| Listener* listener)
|
| - : ChannelMojo(delegate, handle, Channel::MODE_CLIENT, listener) {
|
| + : ChannelMojo(delegate, handle, Channel::MODE_CLIENT, listener),
|
| + binding_(this) {
|
| }
|
|
|
| ClientChannelMojo::~ClientChannelMojo() {
|
| @@ -80,7 +84,7 @@ ClientChannelMojo::~ClientChannelMojo() {
|
|
|
| void ClientChannelMojo::OnPipeAvailable(
|
| mojo::embedder::ScopedPlatformHandle handle) {
|
| - mojo::WeakBindToPipe(this, CreateMessagingPipe(handle.Pass()));
|
| + binding_.Bind(CreateMessagingPipe(handle.Pass()));
|
| }
|
|
|
| void ClientChannelMojo::OnConnectionError() {
|
| @@ -106,7 +110,7 @@ class ServerChannelMojo : public ChannelMojo, public mojo::ErrorHandler {
|
|
|
| // MojoBootstrap::Delegate implementation
|
| void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override;
|
| - // ErrorHandler implementation
|
| + // mojo::ErrorHandler implementation
|
| void OnConnectionError() override;
|
| // Channel override
|
| void Close() override;
|
| @@ -180,7 +184,7 @@ base::ScopedFD TakeOrDupFile(internal::PlatformFileAttachment* attachment) {
|
|
|
| void ChannelMojo::ChannelInfoDeleter::operator()(
|
| mojo::embedder::ChannelInfo* ptr) const {
|
| - mojo::embedder::DestroyChannel(ptr);
|
| + mojo::embedder::DestroyChannel(ptr, base::Bind(&base::DoNothing), nullptr);
|
| }
|
|
|
| //------------------------------------------------------------------------------
|
| @@ -219,9 +223,10 @@ scoped_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
|
|
|
| // static
|
| scoped_ptr<ChannelFactory> ChannelMojo::CreateClientFactory(
|
| + ChannelMojo::Delegate* delegate,
|
| const ChannelHandle& channel_handle) {
|
| return make_scoped_ptr(
|
| - new MojoChannelFactory(NULL, channel_handle, Channel::MODE_CLIENT));
|
| + new MojoChannelFactory(delegate, channel_handle, Channel::MODE_CLIENT));
|
| }
|
|
|
| ChannelMojo::ChannelMojo(ChannelMojo::Delegate* delegate,
|
| @@ -253,6 +258,8 @@ ChannelMojo::~ChannelMojo() {
|
| }
|
|
|
| void ChannelMojo::InitDelegate(ChannelMojo::Delegate* delegate) {
|
| + ipc_support_.reset(
|
| + new ScopedIPCSupport(base::MessageLoop::current()->task_runner()));
|
| delegate_ = delegate->ToWeakPtr();
|
| delegate_->OnChannelCreated(weak_factory_.GetWeakPtr());
|
| }
|
| @@ -275,6 +282,7 @@ bool ChannelMojo::Connect() {
|
| void ChannelMojo::Close() {
|
| message_reader_.reset();
|
| channel_info_.reset();
|
| + ipc_support_.reset();
|
| }
|
|
|
| void ChannelMojo::OnBootstrapError() {
|
| @@ -288,7 +296,7 @@ void ChannelMojo::InitMessageReader(mojo::ScopedMessagePipeHandle pipe,
|
|
|
| for (size_t i = 0; i < pending_messages_.size(); ++i) {
|
| bool sent = message_reader_->Send(make_scoped_ptr(pending_messages_[i]));
|
| - pending_messages_[i] = NULL;
|
| + pending_messages_[i] = nullptr;
|
| if (!sent) {
|
| pending_messages_.clear();
|
| listener_->OnChannelError();
|
|
|