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 <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
55 // TODO(morrita): Extract handle creation part of IPC::Channel into | 55 // TODO(morrita): Extract handle creation part of IPC::Channel into |
56 // separate class to clarify what ChannelMojo relies | 56 // separate class to clarify what ChannelMojo relies |
57 // on. | 57 // on. |
58 // TODO(morrita): Add APIs to create extra MessagePipes to let | 58 // TODO(morrita): Add APIs to create extra MessagePipes to let |
59 // Mojo-based objects talk over this Channel. | 59 // Mojo-based objects talk over this Channel. |
60 // | 60 // |
61 class IPC_MOJO_EXPORT ChannelMojo : public Channel, | 61 class IPC_MOJO_EXPORT ChannelMojo : public Channel, |
62 public MojoBootstrap::Delegate { | 62 public MojoBootstrap::Delegate { |
63 public: | 63 public: |
64 // Create ChannelMojo. A bootstrap channel is created as well. | 64 // Create ChannelMojo. A bootstrap channel is created as well. |
65 // |host| must not be null. | 65 // |host| must not be null for server channels. |
66 static scoped_ptr<ChannelMojo> Create(ChannelMojoHost* host, | 66 static scoped_ptr<ChannelMojo> Create(ChannelMojoHost* host, |
67 const ChannelHandle& channel_handle, | 67 const ChannelHandle& channel_handle, |
68 Mode mode, | 68 Mode mode, |
69 Listener* listener); | 69 Listener* listener); |
70 | 70 |
71 // Create a factory object for ChannelMojo. | 71 // Create a factory object for ChannelMojo. |
72 // The factory is used to create Mojo-based ChannelProxy family. | 72 // The factory is used to create Mojo-based ChannelProxy family. |
73 // |host| must not be null. | 73 // |host| must not be null. |
74 static scoped_ptr<ChannelFactory> CreateServerFactory( | 74 static scoped_ptr<ChannelFactory> CreateServerFactory( |
75 ChannelMojoHost* host, | 75 ChannelMojoHost* host, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
110 mojo::embedder::ScopedPlatformHandle handle) OVERRIDE; | 110 mojo::embedder::ScopedPlatformHandle handle) OVERRIDE; |
111 virtual void OnBootstrapError() OVERRIDE; | 111 virtual void OnBootstrapError() OVERRIDE; |
112 | 112 |
113 // Called from MessagePipeReader implementations | 113 // Called from MessagePipeReader implementations |
114 void OnMessageReceived(Message& message); | 114 void OnMessageReceived(Message& message); |
115 void OnConnected(mojo::ScopedMessagePipeHandle pipe); | 115 void OnConnected(mojo::ScopedMessagePipeHandle pipe); |
116 void OnPipeClosed(internal::MessagePipeReader* reader); | 116 void OnPipeClosed(internal::MessagePipeReader* reader); |
117 void OnPipeError(internal::MessagePipeReader* reader); | 117 void OnPipeError(internal::MessagePipeReader* reader); |
118 void set_peer_pid(base::ProcessId pid) { peer_pid_ = pid; } | 118 void set_peer_pid(base::ProcessId pid) { peer_pid_ = pid; } |
119 | 119 |
120 void HostWasDestroyed(); | |
viettrungluu
2014/09/25 19:38:34
I don't think this is used (or implemented).
Hajime Morrita
2014/09/25 22:00:03
Oops. Removed.
| |
121 | |
120 protected: | 122 protected: |
121 ChannelMojo(ChannelMojoHost* host, | 123 ChannelMojo(ChannelMojoHost* host, |
122 const ChannelHandle& channel_handle, | 124 const ChannelHandle& channel_handle, |
123 Mode mode, | 125 Mode mode, |
124 Listener* listener); | 126 Listener* listener); |
125 | 127 |
126 private: | 128 private: |
127 struct ChannelInfoDeleter { | 129 struct ChannelInfoDeleter { |
128 void operator()(mojo::embedder::ChannelInfo* ptr) const; | 130 void operator()(mojo::embedder::ChannelInfo* ptr) const; |
129 }; | 131 }; |
130 | 132 |
131 // ChannelMojo needs to kill its MessagePipeReader in delayed manner | 133 // ChannelMojo needs to kill its MessagePipeReader in delayed manner |
132 // because the channel wants to kill these readers during the | 134 // because the channel wants to kill these readers during the |
133 // notifications invoked by them. | 135 // notifications invoked by them. |
134 typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter; | 136 typedef internal::MessagePipeReader::DelayedDeleter ReaderDeleter; |
135 | 137 |
136 void InitControlReader(mojo::embedder::ScopedPlatformHandle handle); | 138 void InitControlReader(mojo::embedder::ScopedPlatformHandle handle); |
137 | 139 |
138 scoped_ptr<MojoBootstrap> bootstrap_; | 140 scoped_ptr<MojoBootstrap> bootstrap_; |
139 ChannelMojoHost* const host_; | 141 base::WeakPtr<ChannelMojoHost> host_; |
140 Mode mode_; | 142 Mode mode_; |
141 Listener* listener_; | 143 Listener* listener_; |
142 base::ProcessId peer_pid_; | 144 base::ProcessId peer_pid_; |
143 scoped_ptr<mojo::embedder::ChannelInfo, | 145 scoped_ptr<mojo::embedder::ChannelInfo, |
144 ChannelInfoDeleter> channel_info_; | 146 ChannelInfoDeleter> channel_info_; |
145 | 147 |
146 scoped_ptr<internal::ControlReader, ReaderDeleter> control_reader_; | 148 scoped_ptr<internal::ControlReader, ReaderDeleter> control_reader_; |
147 scoped_ptr<internal::MessageReader, ReaderDeleter> message_reader_; | 149 scoped_ptr<internal::MessageReader, ReaderDeleter> message_reader_; |
148 ScopedVector<Message> pending_messages_; | 150 ScopedVector<Message> pending_messages_; |
149 | 151 |
150 base::WeakPtrFactory<ChannelMojo> weak_factory_; | 152 base::WeakPtrFactory<ChannelMojo> weak_factory_; |
151 | 153 |
152 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); | 154 DISALLOW_COPY_AND_ASSIGN(ChannelMojo); |
153 }; | 155 }; |
154 | 156 |
155 } // namespace IPC | 157 } // namespace IPC |
156 | 158 |
157 #endif // IPC_IPC_CHANNEL_MOJO_H_ | 159 #endif // IPC_IPC_CHANNEL_MOJO_H_ |
OLD | NEW |