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

Side by Side Diff: ipc/ipc_channel_mojo.cc

Issue 2137353002: Adds associated interface support to IPC::Channel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@channel-bindings-1
Patch Set: . Created 4 years, 5 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/ipc_channel_mojo.h ('k') | ipc/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/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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 mojom::ChannelAssociatedRequest receive_channel, 300 mojom::ChannelAssociatedRequest receive_channel,
301 int32_t peer_pid) { 301 int32_t peer_pid) {
302 InitMessageReader(std::move(send_channel), std::move(receive_channel), 302 InitMessageReader(std::move(send_channel), std::move(receive_channel),
303 peer_pid); 303 peer_pid);
304 } 304 }
305 305
306 void ChannelMojo::OnBootstrapError() { 306 void ChannelMojo::OnBootstrapError() {
307 listener_->OnChannelError(); 307 listener_->OnChannelError();
308 } 308 }
309 309
310 void ChannelMojo::OnAssociatedInterfaceRequest(
311 const std::string& name,
312 mojo::ScopedInterfaceEndpointHandle handle) {
313 auto iter = associated_interfaces_.find(name);
314 if (iter != associated_interfaces_.end())
315 iter->second.Run(std::move(handle));
316 }
317
310 void ChannelMojo::InitMessageReader(mojom::ChannelAssociatedPtrInfo sender, 318 void ChannelMojo::InitMessageReader(mojom::ChannelAssociatedPtrInfo sender,
311 mojom::ChannelAssociatedRequest receiver, 319 mojom::ChannelAssociatedRequest receiver,
312 base::ProcessId peer_pid) { 320 base::ProcessId peer_pid) {
313 mojom::ChannelAssociatedPtr sender_ptr; 321 mojom::ChannelAssociatedPtr sender_ptr;
314 sender_ptr.Bind(std::move(sender)); 322 sender_ptr.Bind(std::move(sender));
315 std::unique_ptr<internal::MessagePipeReader, ChannelMojo::ReaderDeleter> 323 std::unique_ptr<internal::MessagePipeReader, ChannelMojo::ReaderDeleter>
316 reader(new internal::MessagePipeReader( 324 reader(new internal::MessagePipeReader(
317 pipe_, std::move(sender_ptr), std::move(receiver), peer_pid, this)); 325 pipe_, std::move(sender_ptr), std::move(receiver), peer_pid, this));
318 326
319 bool connected = true; 327 bool connected = true;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 if (!message_reader_) 393 if (!message_reader_)
386 return base::kNullProcessId; 394 return base::kNullProcessId;
387 395
388 return message_reader_->GetPeerPid(); 396 return message_reader_->GetPeerPid();
389 } 397 }
390 398
391 base::ProcessId ChannelMojo::GetSelfPID() const { 399 base::ProcessId ChannelMojo::GetSelfPID() const {
392 return bootstrap_->GetSelfPID(); 400 return bootstrap_->GetSelfPID();
393 } 401 }
394 402
403 Channel::AssociatedInterfaceSupport*
404 ChannelMojo::GetAssociatedInterfaceSupport() { return this; }
405
395 void ChannelMojo::OnMessageReceived(const Message& message) { 406 void ChannelMojo::OnMessageReceived(const Message& message) {
396 TRACE_EVENT2("ipc,toplevel", "ChannelMojo::OnMessageReceived", 407 TRACE_EVENT2("ipc,toplevel", "ChannelMojo::OnMessageReceived",
397 "class", IPC_MESSAGE_ID_CLASS(message.type()), 408 "class", IPC_MESSAGE_ID_CLASS(message.type()),
398 "line", IPC_MESSAGE_ID_LINE(message.type())); 409 "line", IPC_MESSAGE_ID_LINE(message.type()));
399 if (AttachmentBroker* broker = AttachmentBroker::GetGlobal()) { 410 if (AttachmentBroker* broker = AttachmentBroker::GetGlobal()) {
400 if (broker->OnMessageReceived(message)) 411 if (broker->OnMessageReceived(message))
401 return; 412 return;
402 } 413 }
403 listener_->OnMessageReceived(message); 414 listener_->OnMessageReceived(message);
404 if (message.dispatch_error()) 415 if (message.dispatch_error())
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 std::move(unwrapped_attachment)); 472 std::move(unwrapped_attachment));
462 DCHECK(ok); 473 DCHECK(ok);
463 if (!ok) { 474 if (!ok) {
464 LOG(ERROR) << "Failed to add new Mojo handle."; 475 LOG(ERROR) << "Failed to add new Mojo handle.";
465 return MOJO_RESULT_UNKNOWN; 476 return MOJO_RESULT_UNKNOWN;
466 } 477 }
467 } 478 }
468 return MOJO_RESULT_OK; 479 return MOJO_RESULT_OK;
469 } 480 }
470 481
482 mojo::AssociatedGroup* ChannelMojo::GetAssociatedGroup() {
483 DCHECK(bootstrap_);
484 return bootstrap_->GetAssociatedGroup();
485 }
486
487 void ChannelMojo::AddGenericAssociatedInterface(
488 const std::string& name,
489 const GenericAssociatedInterfaceFactory& factory) {
490 auto result = associated_interfaces_.insert({ name, factory });
491 DCHECK(result.second);
492 }
493
494 void ChannelMojo::GetGenericRemoteAssociatedInterface(
495 const std::string& name,
496 mojo::ScopedInterfaceEndpointHandle handle) {
497 DCHECK(message_reader_);
498 message_reader_->GetRemoteInterface(name, std::move(handle));
499 }
500
471 } // namespace IPC 501 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_channel_mojo.h ('k') | ipc/ipc_channel_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698