| Index: ipc/ipc_channel_mojo.h
|
| diff --git a/ipc/ipc_channel_mojo.h b/ipc/ipc_channel_mojo.h
|
| index cfadb50adc27bb1ac920cd8f3b47319b1cc2d888..940dcf0bbb085a3f32f39a9931366c82a925c6e7 100644
|
| --- a/ipc/ipc_channel_mojo.h
|
| +++ b/ipc/ipc_channel_mojo.h
|
| @@ -42,7 +42,7 @@
|
| class IPC_EXPORT ChannelMojo
|
| : public Channel,
|
| public Channel::AssociatedInterfaceSupport,
|
| - public NON_EXPORTED_BASE(MojoBootstrap::Delegate),
|
| + public MojoBootstrap::Delegate,
|
| public NON_EXPORTED_BASE(internal::MessagePipeReader::Delegate) {
|
| public:
|
| // Creates a ChannelMojo.
|
| @@ -90,16 +90,17 @@
|
| mojo::Array<mojom::SerializedHandlePtr>* handles);
|
|
|
| // MojoBootstrapDelegate implementation
|
| - void OnPipesAvailable(mojom::ChannelAssociatedPtr sender,
|
| - mojom::ChannelAssociatedRequest receiver) override;
|
| -
|
| - // MessagePipeReader::Delegate
|
| - void OnPeerPidReceived() override;
|
| - void OnMessageReceived(const Message& message) override;
|
| - void OnPipeError() override;
|
| + void OnPipesAvailable(mojom::ChannelAssociatedPtrInfo send_channel,
|
| + mojom::ChannelAssociatedRequest receive_channel,
|
| + int32_t peer_pid) override;
|
| + void OnBootstrapError() override;
|
| void OnAssociatedInterfaceRequest(
|
| const std::string& name,
|
| mojo::ScopedInterfaceEndpointHandle handle) override;
|
| +
|
| + // MessagePipeReader::Delegate
|
| + void OnMessageReceived(const Message& message) override;
|
| + void OnPipeError() override;
|
|
|
| private:
|
| ChannelMojo(
|
| @@ -107,6 +108,10 @@
|
| Mode mode,
|
| Listener* listener,
|
| const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner);
|
| +
|
| + void InitMessageReader(mojom::ChannelAssociatedPtrInfo sender,
|
| + mojom::ChannelAssociatedRequest receiver,
|
| + base::ProcessId peer_pid);
|
|
|
| // Channel::AssociatedInterfaceSupport:
|
| mojo::AssociatedGroup* GetAssociatedGroup() override;
|
| @@ -116,6 +121,13 @@
|
| void GetGenericRemoteAssociatedInterface(
|
| const std::string& name,
|
| mojo::ScopedInterfaceEndpointHandle handle) override;
|
| + void SetProxyTaskRunner(
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) override;
|
| +
|
| + // ChannelMojo needs to kill its MessagePipeReader in delayed manner
|
| + // because the channel wants to kill these readers during the
|
| + // notifications invoked by them.
|
| + typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter;
|
|
|
| // A TaskRunner which runs tasks on the ChannelMojo's owning thread.
|
| scoped_refptr<base::TaskRunner> task_runner_;
|
| @@ -124,11 +136,14 @@
|
| std::unique_ptr<MojoBootstrap> bootstrap_;
|
| Listener* listener_;
|
|
|
| - std::unique_ptr<internal::MessagePipeReader> message_reader_;
|
| -
|
| - base::Lock associated_interface_lock_;
|
| std::map<std::string, GenericAssociatedInterfaceFactory>
|
| associated_interfaces_;
|
| +
|
| + // Guards access to the fields below.
|
| + mutable base::Lock lock_;
|
| + std::unique_ptr<internal::MessagePipeReader, ReaderDeleter> message_reader_;
|
| + std::vector<std::unique_ptr<Message>> pending_messages_;
|
| + bool waiting_connect_;
|
|
|
| base::WeakPtrFactory<ChannelMojo> weak_factory_;
|
|
|
|
|