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

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

Issue 2227553002: Support mojo connections between unrelated peer processes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
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 #ifndef MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_ 5 #ifndef MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_
6 #define MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_ 6 #define MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <queue> 9 #include <queue>
10 #include <unordered_map> 10 #include <unordered_map>
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 const ProcessErrorCallback& process_error_callback); 78 const ProcessErrorCallback& process_error_callback);
79 79
80 // Closes all reserved ports which associated with the child process 80 // Closes all reserved ports which associated with the child process
81 // |child_token|. 81 // |child_token|.
82 void CloseChildPorts(const std::string& child_token); 82 void CloseChildPorts(const std::string& child_token);
83 83
84 // Connects this node to a parent node. The parent node will initiate a 84 // Connects this node to a parent node. The parent node will initiate a
85 // handshake. 85 // handshake.
86 void ConnectToParent(ScopedPlatformHandle platform_handle); 86 void ConnectToParent(ScopedPlatformHandle platform_handle);
87 87
88 // Connects this node to a peer node. On success, |port| will be merged with
89 // the corresponding port in the peer node.
90 void ConnectToPeer(ScopedPlatformHandle handle, const ports::PortRef& port);
91
88 // Sets a port's observer. If |observer| is null the port's current observer 92 // Sets a port's observer. If |observer| is null the port's current observer
89 // is removed. 93 // is removed.
90 void SetPortObserver(const ports::PortRef& port, 94 void SetPortObserver(const ports::PortRef& port,
91 const scoped_refptr<PortObserver>& observer); 95 const scoped_refptr<PortObserver>& observer);
92 96
93 // Closes a port. Use this in lieu of calling Node::ClosePort() directly, as 97 // Closes a port. Use this in lieu of calling Node::ClosePort() directly, as
94 // it ensures the port's observer has also been removed. 98 // it ensures the port's observer has also been removed.
95 void ClosePort(const ports::PortRef& port); 99 void ClosePort(const ports::PortRef& port);
96 100
97 // Sends a message on a port to its peer. 101 // Sends a message on a port to its peer.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 const std::string child_token; 143 const std::string child_token;
140 }; 144 };
141 145
142 void ConnectToChildOnIOThread( 146 void ConnectToChildOnIOThread(
143 base::ProcessHandle process_handle, 147 base::ProcessHandle process_handle,
144 ScopedPlatformHandle platform_handle, 148 ScopedPlatformHandle platform_handle,
145 ports::NodeName token, 149 ports::NodeName token,
146 const ProcessErrorCallback& process_error_callback); 150 const ProcessErrorCallback& process_error_callback);
147 void ConnectToParentOnIOThread(ScopedPlatformHandle platform_handle); 151 void ConnectToParentOnIOThread(ScopedPlatformHandle platform_handle);
148 152
153 void ConnectToPeerOnIOThread(ScopedPlatformHandle handle,
154 ports::NodeName token,
155 ports::PortRef port);
156
149 scoped_refptr<NodeChannel> GetPeerChannel(const ports::NodeName& name); 157 scoped_refptr<NodeChannel> GetPeerChannel(const ports::NodeName& name);
150 scoped_refptr<NodeChannel> GetParentChannel(); 158 scoped_refptr<NodeChannel> GetParentChannel();
151 scoped_refptr<NodeChannel> GetBrokerChannel(); 159 scoped_refptr<NodeChannel> GetBrokerChannel();
152 160
153 void AddPeer(const ports::NodeName& name, 161 void AddPeer(const ports::NodeName& name,
154 scoped_refptr<NodeChannel> channel, 162 scoped_refptr<NodeChannel> channel,
155 bool start_channel); 163 bool start_channel);
156 void DropPeer(const ports::NodeName& name, NodeChannel* channel); 164 void DropPeer(const ports::NodeName& name, NodeChannel* channel);
157 void SendPeerMessage(const ports::NodeName& name, 165 void SendPeerMessage(const ports::NodeName& name,
158 ports::ScopedMessage message); 166 ports::ScopedMessage message);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 Channel::MessagePtr message) override; 207 Channel::MessagePtr message) override;
200 #if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS)) 208 #if defined(OS_WIN) || (defined(OS_MACOSX) && !defined(OS_IOS))
201 void OnRelayPortsMessage(const ports::NodeName& from_node, 209 void OnRelayPortsMessage(const ports::NodeName& from_node,
202 base::ProcessHandle from_process, 210 base::ProcessHandle from_process,
203 const ports::NodeName& destination, 211 const ports::NodeName& destination,
204 Channel::MessagePtr message) override; 212 Channel::MessagePtr message) override;
205 void OnPortsMessageFromRelay(const ports::NodeName& from_node, 213 void OnPortsMessageFromRelay(const ports::NodeName& from_node,
206 const ports::NodeName& source_node, 214 const ports::NodeName& source_node,
207 Channel::MessagePtr message) override; 215 Channel::MessagePtr message) override;
208 #endif 216 #endif
217 void OnAcceptPeer(const ports::NodeName& from_node,
218 const ports::NodeName& token,
219 const ports::NodeName& peer_name,
220 const ports::PortName& port_name) override;
209 void OnChannelError(const ports::NodeName& from_node, 221 void OnChannelError(const ports::NodeName& from_node,
210 NodeChannel* channel) override; 222 NodeChannel* channel) override;
211 #if defined(OS_MACOSX) && !defined(OS_IOS) 223 #if defined(OS_MACOSX) && !defined(OS_IOS)
212 MachPortRelay* GetMachPortRelay() override; 224 MachPortRelay* GetMachPortRelay() override;
213 #endif 225 #endif
214 226
215 // Marks this NodeController for destruction when the IO thread shuts down. 227 // Marks this NodeController for destruction when the IO thread shuts down.
216 // This is used in case Core is torn down before the IO thread. Must only be 228 // This is used in case Core is torn down before the IO thread. Must only be
217 // called on the IO thread. 229 // called on the IO thread.
218 void DestroyOnIOThreadShutdown(); 230 void DestroyOnIOThreadShutdown();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 base::Closure shutdown_callback_; 308 base::Closure shutdown_callback_;
297 // Flag to fast-path checking |shutdown_callback_|. 309 // Flag to fast-path checking |shutdown_callback_|.
298 AtomicFlag shutdown_callback_flag_; 310 AtomicFlag shutdown_callback_flag_;
299 311
300 // All other fields below must only be accessed on the I/O thread, i.e., the 312 // All other fields below must only be accessed on the I/O thread, i.e., the
301 // thread on which core_->io_task_runner() runs tasks. 313 // thread on which core_->io_task_runner() runs tasks.
302 314
303 // Channels to children during handshake. 315 // Channels to children during handshake.
304 NodeMap pending_children_; 316 NodeMap pending_children_;
305 317
318 using PeerNodeMap =
319 std::unordered_map<ports::NodeName,
320 std::pair<scoped_refptr<NodeChannel>, ports::PortRef>>;
321 PeerNodeMap pending_peers_;
322
306 // Indicates whether this object should delete itself on IO thread shutdown. 323 // Indicates whether this object should delete itself on IO thread shutdown.
307 // Must only be accessed from the IO thread. 324 // Must only be accessed from the IO thread.
308 bool destroy_on_io_thread_shutdown_ = false; 325 bool destroy_on_io_thread_shutdown_ = false;
309 326
310 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_NACL_SFI) 327 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_NACL_SFI)
311 // Broker for sync shared buffer creation (non-Mac posix-only) in children. 328 // Broker for sync shared buffer creation (non-Mac posix-only) in children.
312 std::unique_ptr<Broker> broker_; 329 std::unique_ptr<Broker> broker_;
313 #endif 330 #endif
314 331
315 #if defined(OS_MACOSX) && !defined(OS_IOS) 332 #if defined(OS_MACOSX) && !defined(OS_IOS)
316 base::Lock mach_port_relay_lock_; 333 base::Lock mach_port_relay_lock_;
317 // Relay for transferring mach ports to/from children. 334 // Relay for transferring mach ports to/from children.
318 std::unique_ptr<MachPortRelay> mach_port_relay_; 335 std::unique_ptr<MachPortRelay> mach_port_relay_;
319 #endif 336 #endif
320 337
321 DISALLOW_COPY_AND_ASSIGN(NodeController); 338 DISALLOW_COPY_AND_ASSIGN(NodeController);
322 }; 339 };
323 340
324 } // namespace edk 341 } // namespace edk
325 } // namespace mojo 342 } // namespace mojo
326 343
327 #endif // MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_ 344 #endif // MOJO_EDK_SYSTEM_NODE_CONTROLLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698