| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef IPC_IPC_CHANNEL_MOJO_H_ | 5 #ifndef IPC_IPC_CHANNEL_MOJO_H_ |
| 6 #define IPC_IPC_CHANNEL_MOJO_H_ | 6 #define IPC_IPC_CHANNEL_MOJO_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 // ChannelMojo builds a Mojo MessagePipe using the provided message pipe | 35 // ChannelMojo builds a Mojo MessagePipe using the provided message pipe |
| 36 // |handle| and builds an associated interface for each direction on the | 36 // |handle| and builds an associated interface for each direction on the |
| 37 // channel. | 37 // channel. |
| 38 // | 38 // |
| 39 // TODO(morrita): Add APIs to create extra MessagePipes to let | 39 // TODO(morrita): Add APIs to create extra MessagePipes to let |
| 40 // Mojo-based objects talk over this Channel. | 40 // Mojo-based objects talk over this Channel. |
| 41 // | 41 // |
| 42 class IPC_EXPORT ChannelMojo | 42 class IPC_EXPORT ChannelMojo |
| 43 : public Channel, | 43 : public Channel, |
| 44 public Channel::AssociatedInterfaceSupport, | 44 public Channel::AssociatedInterfaceSupport, |
| 45 public MojoBootstrap::Delegate, | 45 public NON_EXPORTED_BASE(MojoBootstrap::Delegate), |
| 46 public NON_EXPORTED_BASE(internal::MessagePipeReader::Delegate) { | 46 public NON_EXPORTED_BASE(internal::MessagePipeReader::Delegate) { |
| 47 public: | 47 public: |
| 48 // Creates a ChannelMojo. | 48 // Creates a ChannelMojo. |
| 49 static std::unique_ptr<ChannelMojo> | 49 static std::unique_ptr<ChannelMojo> |
| 50 Create(mojo::ScopedMessagePipeHandle handle, | 50 Create(mojo::ScopedMessagePipeHandle handle, |
| 51 Mode mode, | 51 Mode mode, |
| 52 Listener* listener, | 52 Listener* listener, |
| 53 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner = | 53 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner = |
| 54 base::ThreadTaskRunnerHandle::Get()); | 54 base::ThreadTaskRunnerHandle::Get()); |
| 55 | 55 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 83 // These access protected API of IPC::Message, which has ChannelMojo | 83 // These access protected API of IPC::Message, which has ChannelMojo |
| 84 // as a friend class. | 84 // as a friend class. |
| 85 static MojoResult WriteToMessageAttachmentSet( | 85 static MojoResult WriteToMessageAttachmentSet( |
| 86 mojo::Array<mojom::SerializedHandlePtr> handle_buffer, | 86 mojo::Array<mojom::SerializedHandlePtr> handle_buffer, |
| 87 Message* message); | 87 Message* message); |
| 88 static MojoResult ReadFromMessageAttachmentSet( | 88 static MojoResult ReadFromMessageAttachmentSet( |
| 89 Message* message, | 89 Message* message, |
| 90 mojo::Array<mojom::SerializedHandlePtr>* handles); | 90 mojo::Array<mojom::SerializedHandlePtr>* handles); |
| 91 | 91 |
| 92 // MojoBootstrapDelegate implementation | 92 // MojoBootstrapDelegate implementation |
| 93 void OnPipesAvailable(mojom::ChannelAssociatedPtrInfo send_channel, | 93 void OnPipesAvailable(mojom::ChannelAssociatedPtr sender, |
| 94 mojom::ChannelAssociatedRequest receive_channel, | 94 mojom::ChannelAssociatedRequest receiver) override; |
| 95 int32_t peer_pid) override; | 95 |
| 96 void OnBootstrapError() override; | 96 // MessagePipeReader::Delegate |
| 97 void OnPeerPidReceived() override; |
| 98 void OnMessageReceived(const Message& message) override; |
| 99 void OnPipeError() override; |
| 97 void OnAssociatedInterfaceRequest( | 100 void OnAssociatedInterfaceRequest( |
| 98 const std::string& name, | 101 const std::string& name, |
| 99 mojo::ScopedInterfaceEndpointHandle handle) override; | 102 mojo::ScopedInterfaceEndpointHandle handle) override; |
| 100 | 103 |
| 101 // MessagePipeReader::Delegate | |
| 102 void OnMessageReceived(const Message& message) override; | |
| 103 void OnPipeError() override; | |
| 104 | |
| 105 private: | 104 private: |
| 106 ChannelMojo( | 105 ChannelMojo( |
| 107 mojo::ScopedMessagePipeHandle handle, | 106 mojo::ScopedMessagePipeHandle handle, |
| 108 Mode mode, | 107 Mode mode, |
| 109 Listener* listener, | 108 Listener* listener, |
| 110 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner); | 109 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner); |
| 111 | 110 |
| 112 void InitMessageReader(mojom::ChannelAssociatedPtrInfo sender, | |
| 113 mojom::ChannelAssociatedRequest receiver, | |
| 114 base::ProcessId peer_pid); | |
| 115 | |
| 116 // Channel::AssociatedInterfaceSupport: | 111 // Channel::AssociatedInterfaceSupport: |
| 117 mojo::AssociatedGroup* GetAssociatedGroup() override; | 112 mojo::AssociatedGroup* GetAssociatedGroup() override; |
| 118 void AddGenericAssociatedInterface( | 113 void AddGenericAssociatedInterface( |
| 119 const std::string& name, | 114 const std::string& name, |
| 120 const GenericAssociatedInterfaceFactory& factory) override; | 115 const GenericAssociatedInterfaceFactory& factory) override; |
| 121 void GetGenericRemoteAssociatedInterface( | 116 void GetGenericRemoteAssociatedInterface( |
| 122 const std::string& name, | 117 const std::string& name, |
| 123 mojo::ScopedInterfaceEndpointHandle handle) override; | 118 mojo::ScopedInterfaceEndpointHandle handle) override; |
| 124 void SetProxyTaskRunner( | |
| 125 scoped_refptr<base::SingleThreadTaskRunner> task_runner) override; | |
| 126 | |
| 127 // ChannelMojo needs to kill its MessagePipeReader in delayed manner | |
| 128 // because the channel wants to kill these readers during the | |
| 129 // notifications invoked by them. | |
| 130 typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter; | |
| 131 | 119 |
| 132 // A TaskRunner which runs tasks on the ChannelMojo's owning thread. | 120 // A TaskRunner which runs tasks on the ChannelMojo's owning thread. |
| 133 scoped_refptr<base::TaskRunner> task_runner_; | 121 scoped_refptr<base::TaskRunner> task_runner_; |
| 134 | 122 |
| 135 const mojo::MessagePipeHandle pipe_; | 123 const mojo::MessagePipeHandle pipe_; |
| 136 std::unique_ptr<MojoBootstrap> bootstrap_; | 124 std::unique_ptr<MojoBootstrap> bootstrap_; |
| 137 Listener* listener_; | 125 Listener* listener_; |
| 138 | 126 |
| 127 std::unique_ptr<internal::MessagePipeReader> message_reader_; |
| 128 |
| 129 base::Lock associated_interface_lock_; |
| 139 std::map<std::string, GenericAssociatedInterfaceFactory> | 130 std::map<std::string, GenericAssociatedInterfaceFactory> |
| 140 associated_interfaces_; | 131 associated_interfaces_; |
| 141 | 132 |
| 142 // Guards access to the fields below. | |
| 143 mutable base::Lock lock_; | |
| 144 std::unique_ptr<internal::MessagePipeReader, ReaderDeleter> message_reader_; | |
| 145 std::vector<std::unique_ptr<Message>> pending_messages_; | |
| 146 bool waiting_connect_; | |
| 147 | |
| 148 base::WeakPtrFactory<ChannelMojo> weak_factory_; | 133 base::WeakPtrFactory<ChannelMojo> weak_factory_; |
| 149 | 134 |
| 150 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); | 135 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); |
| 151 }; | 136 }; |
| 152 | 137 |
| 153 } // namespace IPC | 138 } // namespace IPC |
| 154 | 139 |
| 155 #endif // IPC_IPC_CHANNEL_MOJO_H_ | 140 #endif // IPC_IPC_CHANNEL_MOJO_H_ |
| OLD | NEW |