| 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> |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <string> | 12 #include <string> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 17 #include "base/memory/scoped_vector.h" | 17 #include "base/memory/scoped_vector.h" |
| 18 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
| 19 #include "base/single_thread_task_runner.h" | 19 #include "base/single_thread_task_runner.h" |
| 20 #include "base/synchronization/lock.h" | 20 #include "base/synchronization/lock.h" |
| 21 #include "base/task_runner.h" | 21 #include "base/task_runner.h" |
| 22 #include "base/threading/thread_task_runner_handle.h" | 22 #include "base/threading/thread_task_runner_handle.h" |
| 23 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 24 #include "ipc/ipc.mojom.h" |
| 24 #include "ipc/ipc_channel.h" | 25 #include "ipc/ipc_channel.h" |
| 25 #include "ipc/ipc_channel_factory.h" | 26 #include "ipc/ipc_channel_factory.h" |
| 26 #include "ipc/ipc_export.h" | 27 #include "ipc/ipc_export.h" |
| 27 #include "ipc/ipc_message_pipe_reader.h" | 28 #include "ipc/ipc_message_pipe_reader.h" |
| 28 #include "ipc/ipc_mojo_bootstrap.h" | 29 #include "ipc/ipc_mojo_bootstrap.h" |
| 30 #include "mojo/public/cpp/bindings/thread_safe_interface_ptr.h" |
| 29 #include "mojo/public/cpp/system/core.h" | 31 #include "mojo/public/cpp/system/core.h" |
| 30 | 32 |
| 31 namespace IPC { | 33 namespace IPC { |
| 32 | 34 |
| 33 // Mojo-based IPC::Channel implementation over a Mojo message pipe. | 35 // Mojo-based IPC::Channel implementation over a Mojo message pipe. |
| 34 // | 36 // |
| 35 // ChannelMojo builds a Mojo MessagePipe using the provided message pipe | 37 // ChannelMojo builds a Mojo MessagePipe using the provided message pipe |
| 36 // |handle| and builds an associated interface for each direction on the | 38 // |handle| and builds an associated interface for each direction on the |
| 37 // channel. | 39 // channel. |
| 38 // | 40 // |
| 39 // TODO(morrita): Add APIs to create extra MessagePipes to let | 41 // TODO(morrita): Add APIs to create extra MessagePipes to let |
| 40 // Mojo-based objects talk over this Channel. | 42 // Mojo-based objects talk over this Channel. |
| 41 // | 43 // |
| 42 class IPC_EXPORT ChannelMojo | 44 class IPC_EXPORT ChannelMojo |
| 43 : public Channel, | 45 : public Channel, |
| 44 public Channel::AssociatedInterfaceSupport, | 46 public Channel::AssociatedInterfaceSupport, |
| 45 public NON_EXPORTED_BASE(MojoBootstrap::Delegate), | |
| 46 public NON_EXPORTED_BASE(internal::MessagePipeReader::Delegate) { | 47 public NON_EXPORTED_BASE(internal::MessagePipeReader::Delegate) { |
| 47 public: | 48 public: |
| 48 // Creates a ChannelMojo. | 49 // Creates a ChannelMojo. |
| 49 static std::unique_ptr<ChannelMojo> | 50 static std::unique_ptr<ChannelMojo> |
| 50 Create(mojo::ScopedMessagePipeHandle handle, | 51 Create(mojo::ScopedMessagePipeHandle handle, |
| 51 Mode mode, | 52 Mode mode, |
| 52 Listener* listener, | 53 Listener* listener, |
| 53 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner = | 54 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner = |
| 54 base::ThreadTaskRunnerHandle::Get()); | 55 base::ThreadTaskRunnerHandle::Get()); |
| 55 | 56 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 77 | 78 |
| 78 // These access protected API of IPC::Message, which has ChannelMojo | 79 // These access protected API of IPC::Message, which has ChannelMojo |
| 79 // as a friend class. | 80 // as a friend class. |
| 80 static MojoResult WriteToMessageAttachmentSet( | 81 static MojoResult WriteToMessageAttachmentSet( |
| 81 base::Optional<std::vector<mojom::SerializedHandlePtr>> handle_buffer, | 82 base::Optional<std::vector<mojom::SerializedHandlePtr>> handle_buffer, |
| 82 Message* message); | 83 Message* message); |
| 83 static MojoResult ReadFromMessageAttachmentSet( | 84 static MojoResult ReadFromMessageAttachmentSet( |
| 84 Message* message, | 85 Message* message, |
| 85 base::Optional<std::vector<mojom::SerializedHandlePtr>>* handles); | 86 base::Optional<std::vector<mojom::SerializedHandlePtr>>* handles); |
| 86 | 87 |
| 87 // MojoBootstrapDelegate implementation | |
| 88 void OnPipesAvailable(mojom::ChannelAssociatedPtr sender, | |
| 89 mojom::ChannelAssociatedRequest receiver) override; | |
| 90 | |
| 91 // MessagePipeReader::Delegate | 88 // MessagePipeReader::Delegate |
| 92 void OnPeerPidReceived(int32_t peer_pid) override; | 89 void OnPeerPidReceived(int32_t peer_pid) override; |
| 93 void OnMessageReceived(const Message& message) override; | 90 void OnMessageReceived(const Message& message) override; |
| 94 void OnPipeError() override; | 91 void OnPipeError() override; |
| 95 void OnAssociatedInterfaceRequest( | 92 void OnAssociatedInterfaceRequest( |
| 96 const std::string& name, | 93 const std::string& name, |
| 97 mojo::ScopedInterfaceEndpointHandle handle) override; | 94 mojo::ScopedInterfaceEndpointHandle handle) override; |
| 98 | 95 |
| 99 private: | 96 private: |
| 100 ChannelMojo( | 97 ChannelMojo( |
| 101 mojo::ScopedMessagePipeHandle handle, | 98 mojo::ScopedMessagePipeHandle handle, |
| 102 Mode mode, | 99 Mode mode, |
| 103 Listener* listener, | 100 Listener* listener, |
| 104 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner); | 101 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner); |
| 105 | 102 |
| 103 void ForwardMessageFromThreadSafePtr(mojo::Message message); |
| 104 void ForwardMessageWithResponderFromThreadSafePtr( |
| 105 mojo::Message message, |
| 106 std::unique_ptr<mojo::MessageReceiver> responder); |
| 107 |
| 106 // Channel::AssociatedInterfaceSupport: | 108 // Channel::AssociatedInterfaceSupport: |
| 107 mojo::AssociatedGroup* GetAssociatedGroup() override; | 109 mojo::AssociatedGroup* GetAssociatedGroup() override; |
| 110 std::unique_ptr<mojo::ThreadSafeForwarder<mojom::Channel>> |
| 111 CreateThreadSafeChannel() override; |
| 108 void AddGenericAssociatedInterface( | 112 void AddGenericAssociatedInterface( |
| 109 const std::string& name, | 113 const std::string& name, |
| 110 const GenericAssociatedInterfaceFactory& factory) override; | 114 const GenericAssociatedInterfaceFactory& factory) override; |
| 111 void GetGenericRemoteAssociatedInterface( | 115 void GetGenericRemoteAssociatedInterface( |
| 112 const std::string& name, | 116 const std::string& name, |
| 113 mojo::ScopedInterfaceEndpointHandle handle) override; | 117 mojo::ScopedInterfaceEndpointHandle handle) override; |
| 114 | 118 |
| 115 // A TaskRunner which runs tasks on the ChannelMojo's owning thread. | 119 // A TaskRunner which runs tasks on the ChannelMojo's owning thread. |
| 116 scoped_refptr<base::TaskRunner> task_runner_; | 120 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 117 | 121 |
| 118 const mojo::MessagePipeHandle pipe_; | 122 const mojo::MessagePipeHandle pipe_; |
| 119 std::unique_ptr<MojoBootstrap> bootstrap_; | 123 std::unique_ptr<MojoBootstrap> bootstrap_; |
| 120 Listener* listener_; | 124 Listener* listener_; |
| 121 | 125 |
| 122 std::unique_ptr<internal::MessagePipeReader> message_reader_; | 126 std::unique_ptr<internal::MessagePipeReader> message_reader_; |
| 123 | 127 |
| 124 base::Lock associated_interface_lock_; | 128 base::Lock associated_interface_lock_; |
| 125 std::map<std::string, GenericAssociatedInterfaceFactory> | 129 std::map<std::string, GenericAssociatedInterfaceFactory> |
| 126 associated_interfaces_; | 130 associated_interfaces_; |
| 127 | 131 |
| 128 base::WeakPtrFactory<ChannelMojo> weak_factory_; | 132 base::WeakPtrFactory<ChannelMojo> weak_factory_; |
| 129 | 133 |
| 130 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); | 134 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); |
| 131 }; | 135 }; |
| 132 | 136 |
| 133 } // namespace IPC | 137 } // namespace IPC |
| 134 | 138 |
| 135 #endif // IPC_IPC_CHANNEL_MOJO_H_ | 139 #endif // IPC_IPC_CHANNEL_MOJO_H_ |
| OLD | NEW |