| 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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 handle = reinterpret_cast<base::PlatformFile>(platform_handle.value); | 228 handle = reinterpret_cast<base::PlatformFile>(platform_handle.value); |
| 229 *attachment = new internal::HandleAttachmentWin( | 229 *attachment = new internal::HandleAttachmentWin( |
| 230 handle, internal::HandleAttachmentWin::FROM_WIRE); | 230 handle, internal::HandleAttachmentWin::FROM_WIRE); |
| 231 return MOJO_RESULT_OK; | 231 return MOJO_RESULT_OK; |
| 232 } | 232 } |
| 233 #endif // defined(OS_WIN) | 233 #endif // defined(OS_WIN) |
| 234 NOTREACHED(); | 234 NOTREACHED(); |
| 235 return MOJO_RESULT_UNKNOWN; | 235 return MOJO_RESULT_UNKNOWN; |
| 236 } | 236 } |
| 237 | 237 |
| 238 base::ProcessId GetSelfPID() { |
| 239 #if defined(OS_LINUX) |
| 240 if (int global_pid = Channel::GetGlobalPid()) |
| 241 return global_pid; |
| 242 #endif // OS_LINUX |
| 243 #if defined(OS_NACL) |
| 244 return -1; |
| 245 #else |
| 246 return base::GetCurrentProcId(); |
| 247 #endif // defined(OS_NACL) |
| 248 } |
| 249 |
| 238 } // namespace | 250 } // namespace |
| 239 | 251 |
| 240 //------------------------------------------------------------------------------ | 252 //------------------------------------------------------------------------------ |
| 241 | 253 |
| 242 // static | 254 // static |
| 243 std::unique_ptr<ChannelMojo> ChannelMojo::Create( | 255 std::unique_ptr<ChannelMojo> ChannelMojo::Create( |
| 244 mojo::ScopedMessagePipeHandle handle, | 256 mojo::ScopedMessagePipeHandle handle, |
| 245 Mode mode, | 257 Mode mode, |
| 246 Listener* listener, | 258 Listener* listener, |
| 247 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) { | 259 const scoped_refptr<base::SingleThreadTaskRunner>& ipc_task_runner) { |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 // this object, and that would be bad if we are called from Send(). Instead, | 375 // this object, and that would be bad if we are called from Send(). Instead, |
| 364 // we return false and hope the caller will close the pipe. If they do not, | 376 // we return false and hope the caller will close the pipe. If they do not, |
| 365 // the pipe will still be closed next time OnFileCanReadWithoutBlocking is | 377 // the pipe will still be closed next time OnFileCanReadWithoutBlocking is |
| 366 // called. | 378 // called. |
| 367 // | 379 // |
| 368 // With Mojo, there's no OnFileCanReadWithoutBlocking, but we expect the | 380 // With Mojo, there's no OnFileCanReadWithoutBlocking, but we expect the |
| 369 // pipe's connection error handler will be invoked in its place. | 381 // pipe's connection error handler will be invoked in its place. |
| 370 return message_reader_->Send(std::move(scoped_message)); | 382 return message_reader_->Send(std::move(scoped_message)); |
| 371 } | 383 } |
| 372 | 384 |
| 373 base::ProcessId ChannelMojo::GetPeerPID() const { | |
| 374 if (!message_reader_) | |
| 375 return base::kNullProcessId; | |
| 376 return message_reader_->GetPeerPid(); | |
| 377 } | |
| 378 | |
| 379 base::ProcessId ChannelMojo::GetSelfPID() const { | |
| 380 #if defined(OS_LINUX) | |
| 381 if (int global_pid = GetGlobalPid()) | |
| 382 return global_pid; | |
| 383 #endif // OS_LINUX | |
| 384 #if defined(OS_NACL) | |
| 385 return -1; | |
| 386 #else | |
| 387 return base::GetCurrentProcId(); | |
| 388 #endif // defined(OS_NACL) | |
| 389 } | |
| 390 | |
| 391 Channel::AssociatedInterfaceSupport* | 385 Channel::AssociatedInterfaceSupport* |
| 392 ChannelMojo::GetAssociatedInterfaceSupport() { return this; } | 386 ChannelMojo::GetAssociatedInterfaceSupport() { return this; } |
| 393 | 387 |
| 394 void ChannelMojo::OnPeerPidReceived() { | 388 void ChannelMojo::OnPeerPidReceived(int32_t peer_pid) { |
| 395 listener_->OnChannelConnected(static_cast<int32_t>(GetPeerPID())); | 389 listener_->OnChannelConnected(peer_pid); |
| 396 } | 390 } |
| 397 | 391 |
| 398 void ChannelMojo::OnMessageReceived(const Message& message) { | 392 void ChannelMojo::OnMessageReceived(const Message& message) { |
| 399 TRACE_EVENT2("ipc,toplevel", "ChannelMojo::OnMessageReceived", | 393 TRACE_EVENT2("ipc,toplevel", "ChannelMojo::OnMessageReceived", |
| 400 "class", IPC_MESSAGE_ID_CLASS(message.type()), | 394 "class", IPC_MESSAGE_ID_CLASS(message.type()), |
| 401 "line", IPC_MESSAGE_ID_LINE(message.type())); | 395 "line", IPC_MESSAGE_ID_LINE(message.type())); |
| 402 listener_->OnMessageReceived(message); | 396 listener_->OnMessageReceived(message); |
| 403 if (message.dispatch_error()) | 397 if (message.dispatch_error()) |
| 404 listener_->OnBadMessageReceived(message); | 398 listener_->OnBadMessageReceived(message); |
| 405 } | 399 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 } | 473 } |
| 480 | 474 |
| 481 void ChannelMojo::GetGenericRemoteAssociatedInterface( | 475 void ChannelMojo::GetGenericRemoteAssociatedInterface( |
| 482 const std::string& name, | 476 const std::string& name, |
| 483 mojo::ScopedInterfaceEndpointHandle handle) { | 477 mojo::ScopedInterfaceEndpointHandle handle) { |
| 484 if (message_reader_) | 478 if (message_reader_) |
| 485 message_reader_->GetRemoteInterface(name, std::move(handle)); | 479 message_reader_->GetRemoteInterface(name, std::move(handle)); |
| 486 } | 480 } |
| 487 | 481 |
| 488 } // namespace IPC | 482 } // namespace IPC |
| OLD | NEW |