// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MOJO_EDK_EMBEDDER_PEER_CONNECTION_H_ #define MOJO_EDK_EMBEDDER_PEER_CONNECTION_H_ #include "base/macros.h" #include "mojo/edk/embedder/connection_params.h" #include "mojo/edk/system/system_impl_export.h" #include "mojo/public/cpp/system/message_pipe.h" namespace mojo { namespace edk { // Used to connect to a peer process. // // NOTE: This should ONLY be used if there is no common ancestor for the // processes being connected. Peer connections have limited capabilities with // respect to Mojo IPC when compared to standard broker client connections (see // OutgoingBrokerClientInvitation and IncomingBrokerClientInvitation), and in // particular it's undefined behavior to attempt to forward any resources // (message pipes or other system handles) received from a peer process over to // any other process to which you're connected. // // Both processes must construct a PeerConnection with each one corresponding to // one end of some shared connection medium (e.g. a platform channel.) // // Each PeerConnection gets an implicit cross-process message pipe, the local // endpoint of which may be acquired by a one-time call to TakeMessagePipe(). // // Once established, the connection to the remote peer will remain valid as long // as each process keeps its respective PeerConnection object alive. class MOJO_SYSTEM_IMPL_EXPORT PeerConnection { public: // Constructs a disconnected connection. PeerConnection(); ~PeerConnection(); // Connects to the peer and returns a primordial message pipe handle which // will be connected to a corresponding peer pipe in the remote process. ScopedMessagePipeHandle Connect(ConnectionParams params); private: bool is_connected_ = false; uint64_t connection_id_ = 0; DISALLOW_COPY_AND_ASSIGN(PeerConnection); }; } // namespace edk } // namespace mojo #endif // MOJO_EDK_EMBEDDER_PEER_CONNECTION_H_