| Index: third_party/mojo/src/mojo/edk/system/connection_manager.h
|
| diff --git a/third_party/mojo/src/mojo/edk/system/connection_manager.h b/third_party/mojo/src/mojo/edk/system/connection_manager.h
|
| deleted file mode 100644
|
| index 7e569d95f6f881695b498ead8e28e6f804e03c03..0000000000000000000000000000000000000000
|
| --- a/third_party/mojo/src/mojo/edk/system/connection_manager.h
|
| +++ /dev/null
|
| @@ -1,134 +0,0 @@
|
| -// Copyright 2015 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 THIRD_PARTY_MOJO_SRC_MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
|
| -#define THIRD_PARTY_MOJO_SRC_MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
|
| -
|
| -#include <ostream>
|
| -
|
| -#include "mojo/public/cpp/system/macros.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/connection_identifier.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/process_identifier.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/system_impl_export.h"
|
| -#include "third_party/mojo/src/mojo/edk/system/thread_annotations.h"
|
| -
|
| -namespace mojo {
|
| -
|
| -namespace embedder {
|
| -class PlatformSupport;
|
| -class ScopedPlatformHandle;
|
| -} // namespace embedder
|
| -
|
| -namespace system {
|
| -
|
| -// |ConnectionManager| is an interface for the system that allows "connections"
|
| -// (i.e., native "pipes") to be established between different processes.
|
| -//
|
| -// The starting point for establishing such a connection is that the two
|
| -// processes (not necessarily distinct) are provided with a common
|
| -// |ConnectionIdentifier|, and also some (probably indirect, temporary) way of
|
| -// communicating.
|
| -//
|
| -// (The usual case for this are processes A, B, C, with connections A <-> B <->
|
| -// C, with the goal being to establish a direct connection A <-> C. Process B
|
| -// generates a |ConnectionIdentifier| that it transmits to A and C, and serves
|
| -// as an intermediary until A and C are directly connected.)
|
| -//
|
| -// To establish such a connection, each process calls |AllowConnect()| with the
|
| -// common |ConnectionIdentifier|. Each process then informs the other process
|
| -// that it has done so. Once a process knows that both processes have called
|
| -// |AllowConnect()|, it proceeds to call |Connect()|.
|
| -//
|
| -// On success, if the two processes are in fact distinct, |Connect()| provides a
|
| -// native (platform) handle for a "pipe" that connects/will connect the two
|
| -// processes. (If they are in fact the same process, success will simply yield
|
| -// no valid handle, to indicate this case.)
|
| -//
|
| -// Additionally, on success |Connect()| also provides a unique identifier for
|
| -// the peer process. In this way, processes may recognize when they already have
|
| -// a direct connection and reuse that, disposing of the new one provided by
|
| -// |Connect()|. (TODO(vtl): This is somewhat wasteful, but removes the need to
|
| -// handle various race conditions, and for the "master" process -- see below --
|
| -// to track connection teardowns.)
|
| -//
|
| -// Implementation notes: We implement this using a "star topology", with a
|
| -// single trusted "master" (broker) process and an arbitrary number of untrusted
|
| -// "slave" (client) processes. The former is implemented by
|
| -// |MasterConnectionManager| (master_connection_manager.*) and the latter by
|
| -// |SlaveConnectionManager| (slave_connection_manager.*). Each slave is
|
| -// connected to the master by a special dedicated |RawChannel|, on which it does
|
| -// synchronous IPC (note, however, that the master should never block on any
|
| -// slave).
|
| -class MOJO_SYSTEM_IMPL_EXPORT ConnectionManager {
|
| - public:
|
| - enum class Result {
|
| - FAILURE = 0,
|
| - SUCCESS,
|
| - // These results are used for |Connect()| (which also uses |FAILURE|, but
|
| - // not |SUCCESS|).
|
| - SUCCESS_CONNECT_SAME_PROCESS,
|
| - SUCCESS_CONNECT_NEW_CONNECTION,
|
| - SUCCESS_CONNECT_REUSE_CONNECTION
|
| - };
|
| -
|
| - virtual ~ConnectionManager() {}
|
| -
|
| - ConnectionIdentifier GenerateConnectionIdentifier();
|
| -
|
| - // Shuts down this connection manager. No other methods may be called after
|
| - // this is (or while it is being) called.
|
| - virtual void Shutdown() MOJO_NOT_THREAD_SAFE = 0;
|
| -
|
| - // TODO(vtl): Add a "get my own process identifier" method?
|
| -
|
| - // All of the methods below return true on success or false on failure.
|
| - // Failure is obviously fatal for the establishment of a particular
|
| - // connection, but should not be treated as fatal to the process. Failure may,
|
| - // e.g., be caused by a misbehaving (malicious) untrusted peer process.
|
| -
|
| - // Allows a process who makes the identical call (with equal |connection_id|)
|
| - // to connect to the calling process. (On success, there will be a "pending
|
| - // connection" for the given |connection_id| for the calling process.)
|
| - virtual bool AllowConnect(const ConnectionIdentifier& connection_id) = 0;
|
| -
|
| - // Cancels a pending connection for the calling process. (Note that this may
|
| - // fail even if |AllowConnect()| succeeded; regardless, |Connect()| should not
|
| - // be called.)
|
| - virtual bool CancelConnect(const ConnectionIdentifier& connection_id) = 0;
|
| -
|
| - // Connects a pending connection; to be called only after both parties have
|
| - // called |AllowConnect()|. On success, |Result::SUCCESS_CONNECT_...| is
|
| - // returned, |peer_process_identifier| is set to an unique identifier for the
|
| - // peer process, and |is_first| is set to true if this is the first party to
|
| - // call |Connect()|. In the case of |SUCCESS_CONNECT_SAME_PROCESS|,
|
| - // |*platform_handle| is set to a suitable native handle connecting the two
|
| - // parties.
|
| - virtual Result Connect(const ConnectionIdentifier& connection_id,
|
| - ProcessIdentifier* peer_process_identifier,
|
| - bool* is_first,
|
| - embedder::ScopedPlatformHandle* platform_handle) = 0;
|
| -
|
| - protected:
|
| - // |platform_support| must be valid and remain alive until after |Shutdown()|
|
| - // has completed.
|
| - explicit ConnectionManager(embedder::PlatformSupport* platform_support)
|
| - : platform_support_(platform_support) {}
|
| -
|
| - private:
|
| - embedder::PlatformSupport* const platform_support_;
|
| -
|
| - MOJO_DISALLOW_COPY_AND_ASSIGN(ConnectionManager);
|
| -};
|
| -
|
| -// So logging macros and |DCHECK_EQ()|, etc. work.
|
| -MOJO_SYSTEM_IMPL_EXPORT inline std::ostream& operator<<(
|
| - std::ostream& out,
|
| - ConnectionManager::Result result) {
|
| - return out << static_cast<int>(result);
|
| -}
|
| -
|
| -} // namespace system
|
| -} // namespace mojo
|
| -
|
| -#endif // THIRD_PARTY_MOJO_SRC_MOJO_EDK_SYSTEM_CONNECTION_MANAGER_H_
|
|
|