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

Side by Side Diff: mojo/edk/system/node_controller.cc

Issue 1740093002: [mojo-edk] Pass process handle through the broker on all platforms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Maybe fix build? Created 4 years, 10 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 | « mojo/edk/system/node_controller.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "mojo/edk/system/node_controller.h" 5 #include "mojo/edk/system/node_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 } else { 570 } else {
571 // We aren't the broker, so wait for a broker connection. 571 // We aren't the broker, so wait for a broker connection.
572 base::AutoLock lock(broker_lock_); 572 base::AutoLock lock(broker_lock_);
573 pending_broker_clients_.push(child_name); 573 pending_broker_clients_.push(child_name);
574 } 574 }
575 } 575 }
576 } 576 }
577 577
578 void NodeController::OnAddBrokerClient(const ports::NodeName& from_node, 578 void NodeController::OnAddBrokerClient(const ports::NodeName& from_node,
579 const ports::NodeName& client_name, 579 const ports::NodeName& client_name,
580 ScopedPlatformHandle process_handle) { 580 base::ProcessHandle process_handle) {
581 #if defined(OS_WIN)
582 // Scoped handle to avoid leaks on error.
583 ScopedPlatformHandle scoped_process_handle =
584 ScopedPlatformHandle(PlatformHandle(process_handle));
585 #endif
581 scoped_refptr<NodeChannel> sender = GetPeerChannel(from_node); 586 scoped_refptr<NodeChannel> sender = GetPeerChannel(from_node);
582 if (!sender) { 587 if (!sender) {
583 DLOG(ERROR) << "Ignoring AddBrokerClient from unknown sender."; 588 DLOG(ERROR) << "Ignoring AddBrokerClient from unknown sender.";
584 return; 589 return;
585 } 590 }
586 591
587 if (GetPeerChannel(client_name)) { 592 if (GetPeerChannel(client_name)) {
588 DLOG(ERROR) << "Ignoring AddBrokerClient for known client."; 593 DLOG(ERROR) << "Ignoring AddBrokerClient for known client.";
589 DropPeer(from_node); 594 DropPeer(from_node);
590 return; 595 return;
591 } 596 }
592 597
593 PlatformChannelPair broker_channel; 598 PlatformChannelPair broker_channel;
594 scoped_refptr<NodeChannel> client = NodeChannel::Create( 599 scoped_refptr<NodeChannel> client = NodeChannel::Create(
595 this, broker_channel.PassServerHandle(), io_task_runner_); 600 this, broker_channel.PassServerHandle(), io_task_runner_);
596 601
597 #if defined(OS_WIN) 602 #if defined(OS_WIN)
598 // The broker must have a working handle to the client process in order to 603 // The broker must have a working handle to the client process in order to
599 // properly copy other handles to and from the client. 604 // properly copy other handles to and from the client.
600 if(!process_handle.is_valid()) { 605 if (!scoped_process_handle.is_valid()) {
601 DLOG(ERROR) << "Broker rejecting client with invalid process handle."; 606 DLOG(ERROR) << "Broker rejecting client with invalid process handle.";
602 return; 607 return;
603 } 608 }
604 client->SetRemoteProcessHandle(process_handle.release().handle); 609 client->SetRemoteProcessHandle(scoped_process_handle.release().handle);
610 #else
611 client->SetRemoteProcessHandle(process_handle);
605 #endif 612 #endif
606 613
607 AddPeer(client_name, client, true /* start_channel */); 614 AddPeer(client_name, client, true /* start_channel */);
608 615
609 DVLOG(1) << "Broker " << name_ << " accepting client " << client_name 616 DVLOG(1) << "Broker " << name_ << " accepting client " << client_name
610 << " from peer " << from_node; 617 << " from peer " << from_node;
611 618
612 sender->BrokerClientAdded(client_name, broker_channel.PassClientHandle()); 619 sender->BrokerClientAdded(client_name, broker_channel.PassClientHandle());
613 } 620 }
614 621
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 shutdown_callback_.Reset(); 877 shutdown_callback_.Reset();
871 } 878 }
872 879
873 DCHECK(!callback.is_null()); 880 DCHECK(!callback.is_null());
874 881
875 callback.Run(); 882 callback.Run();
876 } 883 }
877 884
878 } // namespace edk 885 } // namespace edk
879 } // namespace mojo 886 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/node_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698