You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.5 KiB
61 lines
2.5 KiB
// Copyright 2018 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_PUBLIC_CPP_SYSTEM_ISOLATED_CONNECTION_H_
|
|
#define MOJO_PUBLIC_CPP_SYSTEM_ISOLATED_CONNECTION_H_
|
|
|
|
#include "base/macros.h"
|
|
#include "base/unguessable_token.h"
|
|
#include "mojo/public/cpp/platform/platform_channel_endpoint.h"
|
|
#include "mojo/public/cpp/platform/platform_channel_server_endpoint.h"
|
|
#include "mojo/public/cpp/system/message_pipe.h"
|
|
#include "mojo/public/cpp/system/system_export.h"
|
|
|
|
namespace mojo {
|
|
|
|
// IsolatedConnection establishes a one-off Mojo IPC connection between two
|
|
// processes. Unlike more common connections established by invitation
|
|
// (see OutgoingInvitation and IncomingInvitation), isolated connections
|
|
// do not result in the two processes becoming part of the same connected
|
|
// graph of processes. As such, any message pipe established over this
|
|
// connection can only be used for direct IPC between the two processes in
|
|
// question.
|
|
//
|
|
// This means that if one of the processes sends a Mojo handle (e.g. another
|
|
// message pipe endpoint) to the other process, the receiving process cannot
|
|
// pass that handle to yet another process in its own graph. This limitation is
|
|
// subtle and can be difficult to work around, so use of IsolatedConnection
|
|
// should be rare.
|
|
//
|
|
// This is primarily useful when you already have two established Mojo process
|
|
// graphs isolated form each other, and you want to do some IPC between two
|
|
// processes, one in each graph.
|
|
//
|
|
// A connection established via |Connect()|, and any opened message pipes
|
|
// spanning that connection, will remain valid and connected as long as this
|
|
// object remains alive.
|
|
class MOJO_CPP_SYSTEM_EXPORT IsolatedConnection {
|
|
public:
|
|
IsolatedConnection();
|
|
~IsolatedConnection();
|
|
|
|
// Connects to a process at the other end of the channel. Returns a primordial
|
|
// message pipe that can be used for Mojo IPC. The connection
|
|
// will be connected to a corresponding peer pipe in the remote process.
|
|
ScopedMessagePipeHandle Connect(PlatformChannelEndpoint endpoint);
|
|
|
|
// Same as above but works with a server endpoint. The corresponding client
|
|
// could use the above signature with NamedPlatformChannel::ConnectToServer.
|
|
ScopedMessagePipeHandle Connect(PlatformChannelServerEndpoint endpoint);
|
|
|
|
private:
|
|
const base::UnguessableToken token_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(IsolatedConnection);
|
|
};
|
|
|
|
} // namespace mojo
|
|
|
|
#endif // MOJO_PUBLIC_CPP_SYSTEM_ISOLATED_CONNECTION_H_
|