Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: ipc/mojo/ipc_channel_mojo.cc

Issue 954643002: Update mojo sdk to rev 3d23dae011859a2aae49f1d1adde705c8e85d819 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use run_renderer_in_process() Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ipc/mojo/ipc_channel_mojo.h ('k') | ipc/mojo/ipc_channel_mojo_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "ipc/mojo/ipc_channel_mojo.h" 5 #include "ipc/mojo/ipc_channel_mojo.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "ipc/ipc_listener.h" 10 #include "ipc/ipc_listener.h"
(...skipping 30 matching lines...) Expand all
41 } 41 }
42 42
43 private: 43 private:
44 ChannelMojo::Delegate* delegate_; 44 ChannelMojo::Delegate* delegate_;
45 ChannelHandle channel_handle_; 45 ChannelHandle channel_handle_;
46 Channel::Mode mode_; 46 Channel::Mode mode_;
47 }; 47 };
48 48
49 //------------------------------------------------------------------------------ 49 //------------------------------------------------------------------------------
50 50
51 class ClientChannelMojo 51 class ClientChannelMojo : public ChannelMojo,
52 : public ChannelMojo, 52 public ClientChannel,
53 public NON_EXPORTED_BASE(mojo::InterfaceImpl<ClientChannel>) { 53 public mojo::ErrorHandler {
54 public: 54 public:
55 ClientChannelMojo(ChannelMojo::Delegate* delegate, 55 ClientChannelMojo(ChannelMojo::Delegate* delegate,
56 const ChannelHandle& handle, 56 const ChannelHandle& handle,
57 Listener* listener); 57 Listener* listener);
58 ~ClientChannelMojo() override; 58 ~ClientChannelMojo() override;
59 // MojoBootstrap::Delegate implementation 59 // MojoBootstrap::Delegate implementation
60 void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override; 60 void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override;
61 // InterfaceImpl implementation 61 // mojo::ErrorHandler implementation
62 void OnConnectionError() override; 62 void OnConnectionError() override;
63 // ClientChannel implementation 63 // ClientChannel implementation
64 void Init( 64 void Init(
65 mojo::ScopedMessagePipeHandle pipe, 65 mojo::ScopedMessagePipeHandle pipe,
66 int32_t peer_pid, 66 int32_t peer_pid,
67 const mojo::Callback<void(int32_t)>& callback) override; 67 const mojo::Callback<void(int32_t)>& callback) override;
68 68
69 private:
70 mojo::Binding<ClientChannel> binding_;
71
69 DISALLOW_COPY_AND_ASSIGN(ClientChannelMojo); 72 DISALLOW_COPY_AND_ASSIGN(ClientChannelMojo);
70 }; 73 };
71 74
72 ClientChannelMojo::ClientChannelMojo(ChannelMojo::Delegate* delegate, 75 ClientChannelMojo::ClientChannelMojo(ChannelMojo::Delegate* delegate,
73 const ChannelHandle& handle, 76 const ChannelHandle& handle,
74 Listener* listener) 77 Listener* listener)
75 : ChannelMojo(delegate, handle, Channel::MODE_CLIENT, listener) { 78 : ChannelMojo(delegate, handle, Channel::MODE_CLIENT, listener),
79 binding_(this) {
76 } 80 }
77 81
78 ClientChannelMojo::~ClientChannelMojo() { 82 ClientChannelMojo::~ClientChannelMojo() {
79 } 83 }
80 84
81 void ClientChannelMojo::OnPipeAvailable( 85 void ClientChannelMojo::OnPipeAvailable(
82 mojo::embedder::ScopedPlatformHandle handle) { 86 mojo::embedder::ScopedPlatformHandle handle) {
83 mojo::WeakBindToPipe(this, CreateMessagingPipe(handle.Pass())); 87 binding_.Bind(CreateMessagingPipe(handle.Pass()));
84 } 88 }
85 89
86 void ClientChannelMojo::OnConnectionError() { 90 void ClientChannelMojo::OnConnectionError() {
87 listener()->OnChannelError(); 91 listener()->OnChannelError();
88 } 92 }
89 93
90 void ClientChannelMojo::Init( 94 void ClientChannelMojo::Init(
91 mojo::ScopedMessagePipeHandle pipe, 95 mojo::ScopedMessagePipeHandle pipe,
92 int32_t peer_pid, 96 int32_t peer_pid,
93 const mojo::Callback<void(int32_t)>& callback) { 97 const mojo::Callback<void(int32_t)>& callback) {
94 InitMessageReader(pipe.Pass(), static_cast<base::ProcessId>(peer_pid)); 98 InitMessageReader(pipe.Pass(), static_cast<base::ProcessId>(peer_pid));
95 callback.Run(GetSelfPID()); 99 callback.Run(GetSelfPID());
96 } 100 }
97 101
98 //------------------------------------------------------------------------------ 102 //------------------------------------------------------------------------------
99 103
100 class ServerChannelMojo : public ChannelMojo, public mojo::ErrorHandler { 104 class ServerChannelMojo : public ChannelMojo, public mojo::ErrorHandler {
101 public: 105 public:
102 ServerChannelMojo(ChannelMojo::Delegate* delegate, 106 ServerChannelMojo(ChannelMojo::Delegate* delegate,
103 const ChannelHandle& handle, 107 const ChannelHandle& handle,
104 Listener* listener); 108 Listener* listener);
105 ~ServerChannelMojo() override; 109 ~ServerChannelMojo() override;
106 110
107 // MojoBootstrap::Delegate implementation 111 // MojoBootstrap::Delegate implementation
108 void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override; 112 void OnPipeAvailable(mojo::embedder::ScopedPlatformHandle handle) override;
109 // ErrorHandler implementation 113 // mojo::ErrorHandler implementation
110 void OnConnectionError() override; 114 void OnConnectionError() override;
111 // Channel override 115 // Channel override
112 void Close() override; 116 void Close() override;
113 117
114 private: 118 private:
115 // ClientChannelClient implementation 119 // ClientChannelClient implementation
116 void ClientChannelWasInitialized(int32_t peer_pid); 120 void ClientChannelWasInitialized(int32_t peer_pid);
117 121
118 mojo::InterfacePtr<ClientChannel> client_channel_; 122 mojo::InterfacePtr<ClientChannel> client_channel_;
119 mojo::ScopedMessagePipeHandle message_pipe_; 123 mojo::ScopedMessagePipeHandle message_pipe_;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 177 }
174 178
175 #endif 179 #endif
176 180
177 } // namespace 181 } // namespace
178 182
179 //------------------------------------------------------------------------------ 183 //------------------------------------------------------------------------------
180 184
181 void ChannelMojo::ChannelInfoDeleter::operator()( 185 void ChannelMojo::ChannelInfoDeleter::operator()(
182 mojo::embedder::ChannelInfo* ptr) const { 186 mojo::embedder::ChannelInfo* ptr) const {
183 mojo::embedder::DestroyChannel(ptr); 187 mojo::embedder::DestroyChannel(ptr, base::Bind(&base::DoNothing), nullptr);
184 } 188 }
185 189
186 //------------------------------------------------------------------------------ 190 //------------------------------------------------------------------------------
187 191
188 // static 192 // static
189 bool ChannelMojo::ShouldBeUsed() { 193 bool ChannelMojo::ShouldBeUsed() {
190 // TODO(morrita): Remove this if it sticks. 194 // TODO(morrita): Remove this if it sticks.
191 return true; 195 return true;
192 } 196 }
193 197
(...skipping 18 matching lines...) Expand all
212 // static 216 // static
213 scoped_ptr<ChannelFactory> ChannelMojo::CreateServerFactory( 217 scoped_ptr<ChannelFactory> ChannelMojo::CreateServerFactory(
214 ChannelMojo::Delegate* delegate, 218 ChannelMojo::Delegate* delegate,
215 const ChannelHandle& channel_handle) { 219 const ChannelHandle& channel_handle) {
216 return make_scoped_ptr( 220 return make_scoped_ptr(
217 new MojoChannelFactory(delegate, channel_handle, Channel::MODE_SERVER)); 221 new MojoChannelFactory(delegate, channel_handle, Channel::MODE_SERVER));
218 } 222 }
219 223
220 // static 224 // static
221 scoped_ptr<ChannelFactory> ChannelMojo::CreateClientFactory( 225 scoped_ptr<ChannelFactory> ChannelMojo::CreateClientFactory(
226 ChannelMojo::Delegate* delegate,
222 const ChannelHandle& channel_handle) { 227 const ChannelHandle& channel_handle) {
223 return make_scoped_ptr( 228 return make_scoped_ptr(
224 new MojoChannelFactory(NULL, channel_handle, Channel::MODE_CLIENT)); 229 new MojoChannelFactory(delegate, channel_handle, Channel::MODE_CLIENT));
225 } 230 }
226 231
227 ChannelMojo::ChannelMojo(ChannelMojo::Delegate* delegate, 232 ChannelMojo::ChannelMojo(ChannelMojo::Delegate* delegate,
228 const ChannelHandle& handle, 233 const ChannelHandle& handle,
229 Mode mode, 234 Mode mode,
230 Listener* listener) 235 Listener* listener)
231 : mode_(mode), 236 : mode_(mode),
232 listener_(listener), 237 listener_(listener),
233 peer_pid_(base::kNullProcessId), 238 peer_pid_(base::kNullProcessId),
234 weak_factory_(this) { 239 weak_factory_(this) {
(...skipping 11 matching lines...) Expand all
246 &ChannelMojo::InitDelegate, base::Unretained(this), delegate)); 251 &ChannelMojo::InitDelegate, base::Unretained(this), delegate));
247 } 252 }
248 } 253 }
249 } 254 }
250 255
251 ChannelMojo::~ChannelMojo() { 256 ChannelMojo::~ChannelMojo() {
252 Close(); 257 Close();
253 } 258 }
254 259
255 void ChannelMojo::InitDelegate(ChannelMojo::Delegate* delegate) { 260 void ChannelMojo::InitDelegate(ChannelMojo::Delegate* delegate) {
261 ipc_support_.reset(
262 new ScopedIPCSupport(base::MessageLoop::current()->task_runner()));
256 delegate_ = delegate->ToWeakPtr(); 263 delegate_ = delegate->ToWeakPtr();
257 delegate_->OnChannelCreated(weak_factory_.GetWeakPtr()); 264 delegate_->OnChannelCreated(weak_factory_.GetWeakPtr());
258 } 265 }
259 266
260 mojo::ScopedMessagePipeHandle ChannelMojo::CreateMessagingPipe( 267 mojo::ScopedMessagePipeHandle ChannelMojo::CreateMessagingPipe(
261 mojo::embedder::ScopedPlatformHandle handle) { 268 mojo::embedder::ScopedPlatformHandle handle) {
262 DCHECK(!channel_info_.get()); 269 DCHECK(!channel_info_.get());
263 mojo::embedder::ChannelInfo* channel_info; 270 mojo::embedder::ChannelInfo* channel_info;
264 mojo::ScopedMessagePipeHandle pipe = 271 mojo::ScopedMessagePipeHandle pipe =
265 mojo::embedder::CreateChannelOnIOThread(handle.Pass(), &channel_info); 272 mojo::embedder::CreateChannelOnIOThread(handle.Pass(), &channel_info);
266 channel_info_.reset(channel_info); 273 channel_info_.reset(channel_info);
267 return pipe.Pass(); 274 return pipe.Pass();
268 } 275 }
269 276
270 bool ChannelMojo::Connect() { 277 bool ChannelMojo::Connect() {
271 DCHECK(!message_reader_); 278 DCHECK(!message_reader_);
272 return bootstrap_->Connect(); 279 return bootstrap_->Connect();
273 } 280 }
274 281
275 void ChannelMojo::Close() { 282 void ChannelMojo::Close() {
276 message_reader_.reset(); 283 message_reader_.reset();
277 channel_info_.reset(); 284 channel_info_.reset();
285 ipc_support_.reset();
278 } 286 }
279 287
280 void ChannelMojo::OnBootstrapError() { 288 void ChannelMojo::OnBootstrapError() {
281 listener_->OnChannelError(); 289 listener_->OnChannelError();
282 } 290 }
283 291
284 void ChannelMojo::InitMessageReader(mojo::ScopedMessagePipeHandle pipe, 292 void ChannelMojo::InitMessageReader(mojo::ScopedMessagePipeHandle pipe,
285 int32_t peer_pid) { 293 int32_t peer_pid) {
286 message_reader_ = 294 message_reader_ =
287 make_scoped_ptr(new internal::MessagePipeReader(pipe.Pass(), this)); 295 make_scoped_ptr(new internal::MessagePipeReader(pipe.Pass(), this));
288 296
289 for (size_t i = 0; i < pending_messages_.size(); ++i) { 297 for (size_t i = 0; i < pending_messages_.size(); ++i) {
290 bool sent = message_reader_->Send(make_scoped_ptr(pending_messages_[i])); 298 bool sent = message_reader_->Send(make_scoped_ptr(pending_messages_[i]));
291 pending_messages_[i] = NULL; 299 pending_messages_[i] = nullptr;
292 if (!sent) { 300 if (!sent) {
293 pending_messages_.clear(); 301 pending_messages_.clear();
294 listener_->OnChannelError(); 302 listener_->OnChannelError();
295 return; 303 return;
296 } 304 }
297 } 305 }
298 306
299 pending_messages_.clear(); 307 pending_messages_.clear();
300 308
301 set_peer_pid(peer_pid); 309 set_peer_pid(peer_pid);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 if (!ok) { 430 if (!ok) {
423 DLOG(ERROR) << "Failed to add new Mojo handle."; 431 DLOG(ERROR) << "Failed to add new Mojo handle.";
424 return MOJO_RESULT_UNKNOWN; 432 return MOJO_RESULT_UNKNOWN;
425 } 433 }
426 } 434 }
427 435
428 return MOJO_RESULT_OK; 436 return MOJO_RESULT_OK;
429 } 437 }
430 438
431 } // namespace IPC 439 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/mojo/ipc_channel_mojo.h ('k') | ipc/mojo/ipc_channel_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698