| 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 |