| // 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 |