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 #include "ipc/ipc_channel_mojo.h" | 5 #include "ipc/ipc_channel_mojo.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 Listener* listener, | 275 Listener* listener, |
276 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) | 276 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) |
277 : task_runner_(ipc_task_runner), | 277 : task_runner_(ipc_task_runner), |
278 pipe_(handle.get()), | 278 pipe_(handle.get()), |
279 listener_(listener), | 279 listener_(listener), |
280 weak_factory_(this) { | 280 weak_factory_(this) { |
281 bootstrap_ = MojoBootstrap::Create(std::move(handle), mode, ipc_task_runner); | 281 bootstrap_ = MojoBootstrap::Create(std::move(handle), mode, ipc_task_runner); |
282 } | 282 } |
283 | 283 |
284 void ChannelMojo::ForwardMessageFromThreadSafePtr(mojo::Message message) { | 284 void ChannelMojo::ForwardMessageFromThreadSafePtr(mojo::Message message) { |
285 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 285 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
286 if (!message_reader_ || !message_reader_->sender().is_bound()) | 286 if (!message_reader_ || !message_reader_->sender().is_bound()) |
287 return; | 287 return; |
288 message_reader_->sender().internal_state()->ForwardMessage( | 288 message_reader_->sender().internal_state()->ForwardMessage( |
289 std::move(message)); | 289 std::move(message)); |
290 } | 290 } |
291 | 291 |
292 void ChannelMojo::ForwardMessageWithResponderFromThreadSafePtr( | 292 void ChannelMojo::ForwardMessageWithResponderFromThreadSafePtr( |
293 mojo::Message message, | 293 mojo::Message message, |
294 std::unique_ptr<mojo::MessageReceiver> responder) { | 294 std::unique_ptr<mojo::MessageReceiver> responder) { |
295 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 295 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
296 if (!message_reader_ || !message_reader_->sender().is_bound()) | 296 if (!message_reader_ || !message_reader_->sender().is_bound()) |
297 return; | 297 return; |
298 message_reader_->sender().internal_state()->ForwardMessageWithResponder( | 298 message_reader_->sender().internal_state()->ForwardMessageWithResponder( |
299 std::move(message), std::move(responder)); | 299 std::move(message), std::move(responder)); |
300 } | 300 } |
301 | 301 |
302 ChannelMojo::~ChannelMojo() { | 302 ChannelMojo::~ChannelMojo() { |
303 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 303 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
304 Close(); | 304 Close(); |
305 } | 305 } |
306 | 306 |
307 bool ChannelMojo::Connect() { | 307 bool ChannelMojo::Connect() { |
308 DCHECK(task_runner_->RunsTasksOnCurrentThread()); | 308 DCHECK(task_runner_->RunsTasksInCurrentSequence()); |
309 | 309 |
310 WillConnect(); | 310 WillConnect(); |
311 | 311 |
312 mojom::ChannelAssociatedPtr sender; | 312 mojom::ChannelAssociatedPtr sender; |
313 mojom::ChannelAssociatedRequest receiver; | 313 mojom::ChannelAssociatedRequest receiver; |
314 bootstrap_->Connect(&sender, &receiver); | 314 bootstrap_->Connect(&sender, &receiver); |
315 | 315 |
316 DCHECK(!message_reader_); | 316 DCHECK(!message_reader_); |
317 sender->SetPeerPid(GetSelfPID()); | 317 sender->SetPeerPid(GetSelfPID()); |
318 message_reader_.reset(new internal::MessagePipeReader( | 318 message_reader_.reset(new internal::MessagePipeReader( |
(...skipping 21 matching lines...) Expand all Loading... |
340 std::unique_ptr<internal::MessagePipeReader> reader = | 340 std::unique_ptr<internal::MessagePipeReader> reader = |
341 std::move(message_reader_); | 341 std::move(message_reader_); |
342 reader.reset(); | 342 reader.reset(); |
343 | 343 |
344 base::AutoLock lock(associated_interface_lock_); | 344 base::AutoLock lock(associated_interface_lock_); |
345 associated_interfaces_.clear(); | 345 associated_interfaces_.clear(); |
346 } | 346 } |
347 | 347 |
348 void ChannelMojo::OnPipeError() { | 348 void ChannelMojo::OnPipeError() { |
349 DCHECK(task_runner_); | 349 DCHECK(task_runner_); |
350 if (task_runner_->RunsTasksOnCurrentThread()) { | 350 if (task_runner_->RunsTasksInCurrentSequence()) { |
351 listener_->OnChannelError(); | 351 listener_->OnChannelError(); |
352 } else { | 352 } else { |
353 task_runner_->PostTask( | 353 task_runner_->PostTask( |
354 FROM_HERE, | 354 FROM_HERE, |
355 base::Bind(&ChannelMojo::OnPipeError, weak_factory_.GetWeakPtr())); | 355 base::Bind(&ChannelMojo::OnPipeError, weak_factory_.GetWeakPtr())); |
356 } | 356 } |
357 } | 357 } |
358 | 358 |
359 void ChannelMojo::OnAssociatedInterfaceRequest( | 359 void ChannelMojo::OnAssociatedInterfaceRequest( |
360 const std::string& name, | 360 const std::string& name, |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 message_reader_->GetRemoteInterface(name, std::move(handle)); | 483 message_reader_->GetRemoteInterface(name, std::move(handle)); |
484 } else { | 484 } else { |
485 // Attach the associated interface to a disconnected pipe, so that the | 485 // Attach the associated interface to a disconnected pipe, so that the |
486 // associated interface pointer can be used to make calls (which are | 486 // associated interface pointer can be used to make calls (which are |
487 // dropped). | 487 // dropped). |
488 mojo::GetIsolatedInterface(std::move(handle)); | 488 mojo::GetIsolatedInterface(std::move(handle)); |
489 } | 489 } |
490 } | 490 } |
491 | 491 |
492 } // namespace IPC | 492 } // namespace IPC |
OLD | NEW |