// 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. #include "mojo/public/cpp/system/isolated_connection.h" #include "mojo/public/cpp/platform/platform_channel.h" #include "mojo/public/cpp/system/invitation.h" namespace mojo { IsolatedConnection::IsolatedConnection() : token_(base::UnguessableToken::Create()) {} IsolatedConnection::~IsolatedConnection() { // We send a dummy invitation over a temporary channel, re-using |token_| as // the name. This ensures that the connection set up by Connect(), if any, // will be replaced with a short-lived, self-terminating connection. // // This is a bit of a hack since Mojo does not provide any API for explicitly // terminating isolated connections, but this is a decision made to minimize // the API surface dedicated to isolated connections in anticipation of the // concept being deprecated eventually. PlatformChannel channel; OutgoingInvitation::SendIsolated(channel.TakeLocalEndpoint(), token_.ToString()); } ScopedMessagePipeHandle IsolatedConnection::Connect( PlatformChannelEndpoint endpoint) { return OutgoingInvitation::SendIsolated(std::move(endpoint), token_.ToString()); } ScopedMessagePipeHandle IsolatedConnection::Connect( PlatformChannelServerEndpoint endpoint) { return OutgoingInvitation::SendIsolated(std::move(endpoint), token_.ToString()); } } // namespace mojo