Index: third_party/mojo/src/mojo/edk/system/master_connection_manager.h |
diff --git a/third_party/mojo/src/mojo/edk/system/master_connection_manager.h b/third_party/mojo/src/mojo/edk/system/master_connection_manager.h |
deleted file mode 100644 |
index 0ebad055ff4936ee3c0d027fa72532ea06b81496..0000000000000000000000000000000000000000 |
--- a/third_party/mojo/src/mojo/edk/system/master_connection_manager.h |
+++ /dev/null |
@@ -1,177 +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_MASTER_CONNECTION_MANAGER_H_ |
-#define THIRD_PARTY_MOJO_SRC_MOJO_EDK_SYSTEM_MASTER_CONNECTION_MANAGER_H_ |
- |
-#include <stdint.h> |
- |
-#include "base/containers/hash_tables.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/threading/thread.h" |
-#include "mojo/public/cpp/system/macros.h" |
-#include "third_party/mojo/src/mojo/edk/embedder/scoped_platform_handle.h" |
-#include "third_party/mojo/src/mojo/edk/system/connection_manager.h" |
-#include "third_party/mojo/src/mojo/edk/system/mutex.h" |
-#include "third_party/mojo/src/mojo/edk/system/system_impl_export.h" |
- |
-namespace base { |
-class TaskRunner; |
-class WaitableEvent; |
-} |
- |
-namespace mojo { |
- |
-namespace embedder { |
-class MasterProcessDelegate; |
-using SlaveInfo = void*; |
-} |
- |
-namespace system { |
- |
-// The |ConnectionManager| implementation for the master process. |
-// |
-// This class is thread-safe (except that no public methods may be called from |
-// its internal, private thread), with condition that |Init()| be called before |
-// anything else and |Shutdown()| be called before destruction (and no other |
-// public methods may be called during/after |Shutdown()|). |
-class MOJO_SYSTEM_IMPL_EXPORT MasterConnectionManager final |
- : public ConnectionManager { |
- public: |
- // Note: None of the public methods may be called from |private_thread_|. |
- |
- // |platform_support| must be valid and remain alive until after |Shutdown()| |
- // has completed. |
- explicit MasterConnectionManager(embedder::PlatformSupport* platform_support); |
- ~MasterConnectionManager() override; |
- |
- // No other methods may be called until after this has been called. |
- // |delegate_thread_task_runner| should be the task runner for the "delegate |
- // thread", on which |master_process_delegate|'s methods will be called. Both |
- // must stay alive at least until after |Shutdown()| has been called. |
- void Init(embedder::MasterProcessDelegate* master_process_delegate) |
- MOJO_NOT_THREAD_SAFE; |
- |
- // Adds a slave process and sets up/tracks a connection to that slave (using |
- // |platform_handle|). |slave_info| is used by the caller/implementation of |
- // |embedder::MasterProcessDelegate| to track this process. It must remain |
- // alive until the delegate's |OnSlaveDisconnect()| is called with it as the |
- // argument. |OnSlaveDisconnect()| will always be called for each slave, |
- // assuming proper shutdown. Returns the process identifier for the |
- // newly-added slave. |
- ProcessIdentifier AddSlave(embedder::SlaveInfo slave_info, |
- embedder::ScopedPlatformHandle platform_handle); |
- |
- // Like |AddSlave()|, but allows a connection to be bootstrapped: both the |
- // master and slave may call |Connect()| with |connection_id| immediately (as |
- // if both had already called |AllowConnect()|). |connection_id| must be |
- // unique (i.e., not previously used). |
- // TODO(vtl): Is |AddSlave()| really needed? (It's probably mostly useful for |
- // tests.) |
- ProcessIdentifier AddSlaveAndBootstrap( |
- embedder::SlaveInfo slave_info, |
- embedder::ScopedPlatformHandle platform_handle, |
- const ConnectionIdentifier& connection_id); |
- |
- // |ConnectionManager| methods: |
- void Shutdown() override MOJO_NOT_THREAD_SAFE; |
- bool AllowConnect(const ConnectionIdentifier& connection_id) override; |
- bool CancelConnect(const ConnectionIdentifier& connection_id) override; |
- Result Connect(const ConnectionIdentifier& connection_id, |
- ProcessIdentifier* peer_process_identifier, |
- bool* is_first, |
- embedder::ScopedPlatformHandle* platform_handle) override; |
- |
- private: |
- class Helper; |
- |
- // These should be thread-safe and may be called on any thread, including |
- // |private_thread_|: |
- bool AllowConnectImpl(ProcessIdentifier process_identifier, |
- const ConnectionIdentifier& connection_id); |
- bool CancelConnectImpl(ProcessIdentifier process_identifier, |
- const ConnectionIdentifier& connection_id); |
- Result ConnectImpl(ProcessIdentifier process_identifier, |
- const ConnectionIdentifier& connection_id, |
- ProcessIdentifier* peer_process_identifier, |
- bool* is_first, |
- embedder::ScopedPlatformHandle* platform_handle); |
- |
- // Helper for |ConnectImpl()|. This is called when the two process identifiers |
- // are known (and known to be valid), and all that remains is to determine the |
- // |Result| and provide a platform handle if appropriate. (This will never |
- // return |Result::FAILURE|.) |
- Result ConnectImplHelperNoLock( |
- ProcessIdentifier process_identifier, |
- ProcessIdentifier peer_process_identifier, |
- embedder::ScopedPlatformHandle* platform_handle) |
- MOJO_EXCLUSIVE_LOCKS_REQUIRED(mutex_); |
- |
- // These should only be called on |private_thread_|: |
- void ShutdownOnPrivateThread() MOJO_NOT_THREAD_SAFE; |
- // Signals |*event| on completion. |
- void AddSlaveOnPrivateThread(embedder::SlaveInfo slave_info, |
- embedder::ScopedPlatformHandle platform_handle, |
- ProcessIdentifier slave_process_identifier, |
- base::WaitableEvent* event); |
- // Called by |Helper::OnError()|. |
- void OnError(ProcessIdentifier process_identifier); |
- // Posts a call to |master_process_delegate_->OnSlaveDisconnect()|. |
- void CallOnSlaveDisconnect(embedder::SlaveInfo slave_info); |
- |
- // Asserts that the current thread is *not* |private_thread_| (no-op if |
- // DCHECKs are not enabled). This should only be called while |
- // |private_thread_| is alive (i.e., after |Init()| but before |Shutdown()|). |
- void AssertNotOnPrivateThread() const; |
- |
- // Asserts that the current thread is |private_thread_| (no-op if DCHECKs are |
- // not enabled). This should only be called while |private_thread_| is alive |
- // (i.e., after |Init()| but before |Shutdown()|). |
- void AssertOnPrivateThread() const; |
- |
- // These are set in |Init()| before |private_thread_| exists and only cleared |
- // in |Shutdown()| after |private_thread_| is dead. Thus it's safe to "use" on |
- // |private_thread_|. (Note that |master_process_delegate_| may only be called |
- // from the delegate thread.) |
- scoped_refptr<base::TaskRunner> delegate_thread_task_runner_; |
- embedder::MasterProcessDelegate* master_process_delegate_; |
- |
- // This is a private I/O thread on which this class does the bulk of its work. |
- // It is started in |Init()| and terminated in |Shutdown()|. |
- base::Thread private_thread_; |
- |
- // The following members are only accessed on |private_thread_|: |
- base::hash_map<ProcessIdentifier, Helper*> helpers_; // Owns its values. |
- |
- // Note: |mutex_| is not needed in the constructor, |Init()|, |
- // |Shutdown()|/|ShutdownOnPrivateThread()|, or the destructor |
- Mutex mutex_; |
- |
- ProcessIdentifier next_process_identifier_ MOJO_GUARDED_BY(mutex_); |
- |
- // Stores information on pending calls to |AllowConnect()|/|Connect()| (or |
- // |CancelConnect()|, namely those for which at least one party has called |
- // |AllowConnect()| but both have not yet called |Connect()| (or |
- // |CancelConnect()|). |
- struct PendingConnectInfo; |
- base::hash_map<ConnectionIdentifier, PendingConnectInfo*> pending_connects_ |
- MOJO_GUARDED_BY(mutex_); // Owns its values. |
- |
- // A |ProcessConnections| stores information about connections "from" a given |
- // (fixed, implied) process "to" other processes. A connection may be not |
- // present, running (meaning that both sides have connected and been given |
- // platform handles to a connected "pipe"), or pending (meaning that the |
- // "from" side must still be given a platform handle). |
- class ProcessConnections; |
- // This is a map from "from" processes to its |ProcessConnections| (above). |
- base::hash_map<ProcessIdentifier, ProcessConnections*> connections_ |
- MOJO_GUARDED_BY(mutex_); // Owns its values. |
- |
- MOJO_DISALLOW_COPY_AND_ASSIGN(MasterConnectionManager); |
-}; |
- |
-} // namespace system |
-} // namespace mojo |
- |
-#endif // THIRD_PARTY_MOJO_SRC_MOJO_EDK_SYSTEM_MASTER_CONNECTION_MANAGER_H_ |