Index: mojo/edk/system/child_broker.h |
diff --git a/mojo/edk/system/child_broker.h b/mojo/edk/system/child_broker.h |
deleted file mode 100644 |
index 49bd05fb230456943b464080f9b7bb5dd9096934..0000000000000000000000000000000000000000 |
--- a/mojo/edk/system/child_broker.h |
+++ /dev/null |
@@ -1,151 +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 MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
-#define MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
- |
-#include <stddef.h> |
-#include <stdint.h> |
- |
-#include "base/compiler_specific.h" |
-#include "base/containers/hash_tables.h" |
-#include "base/macros.h" |
-#include "base/memory/singleton.h" |
-#include "base/process/process_handle.h" |
-#include "base/synchronization/lock_impl.h" |
-#include "mojo/edk/embedder/scoped_platform_handle.h" |
-#include "mojo/edk/system/broker.h" |
-#include "mojo/edk/system/message_in_transit_queue.h" |
-#include "mojo/edk/system/routed_raw_channel.h" |
-#include "mojo/edk/system/system_impl_export.h" |
- |
-namespace mojo { |
-namespace edk { |
-struct BrokerMessage; |
- |
-// An implementation of Broker used in (sandboxed) child processes. It talks |
-// over sync IPCs to the (unsandboxed) parent process (specifically, |
-// ChildBrokerHost) to convert handles to tokens and vice versa. It also sends |
-// async messages to handle message pipe multiplexing. |
-class MOJO_SYSTEM_IMPL_EXPORT ChildBroker |
- : public Broker, public RawChannel::Delegate { |
- public: |
- static ChildBroker* GetInstance(); |
- |
- // Passes the platform handle that is used to talk to ChildBrokerHost. |
- void SetChildBrokerHostHandle(ScopedPlatformHandle handle); |
- |
- // Broker implementation: |
-#if defined(OS_WIN) |
- void CreatePlatformChannelPair(ScopedPlatformHandle* server, |
- ScopedPlatformHandle* client) override; |
- void HandleToToken(const PlatformHandle* platform_handles, |
- size_t count, |
- uint64_t* tokens) override; |
- void TokenToHandle(const uint64_t* tokens, |
- size_t count, |
- PlatformHandle* handles) override; |
-#endif |
- void ConnectMessagePipe(uint64_t pipe_id, |
- MessagePipeDispatcher* message_pipe) override; |
- void CloseMessagePipe(uint64_t pipe_id, |
- MessagePipeDispatcher* message_pipe) override; |
- |
- private: |
- friend struct base::DefaultSingletonTraits<ChildBroker>; |
- |
- ChildBroker(); |
- ~ChildBroker() override; |
- |
- // RawChannel::Delegate implementation: |
- void OnReadMessage( |
- const MessageInTransit::View& message_view, |
- ScopedPlatformHandleVectorPtr platform_handles) override; |
- void OnError(Error error) override; |
- |
- // Callback for when a RoutedRawChannel is destroyed for cleanup. |
- void ChannelDestructed(RoutedRawChannel* channel); |
- |
- // Sends a message over |parent_async_channel_|, queueing it if necessary. |
- void WriteAsyncMessage(scoped_ptr<MessageInTransit> message); |
- |
- // Initializes |parent_async_channel_|. |
- void InitAsyncChannel(ScopedPlatformHandle parent_async_channel_handle); |
- |
- // Helper method to connect the given MessagePipe to the channel. |
- void AttachMessagePipe(MessagePipeDispatcher* message_pipe, |
- uint64_t pipe_id, |
- RoutedRawChannel* raw_channel); |
- |
-#if defined(OS_WIN) |
- // Helper method to write the given message and read back the result. |
- bool WriteAndReadResponse(BrokerMessage* message, |
- void* response, |
- uint32_t response_size); |
- |
- void CreatePlatformChannelPairNoLock(ScopedPlatformHandle* server, |
- ScopedPlatformHandle* client); |
- |
- // Guards access to |parent_sync_channel_|. |
- // We use LockImpl instead of Lock because the latter adds thread checking |
- // that we don't want (since we lock in the constructor and unlock on another |
- // thread. |
- base::internal::LockImpl sync_channel_lock_; |
- |
- // Pipe used for communication to the parent process. We use a pipe directly |
- // instead of bindings or RawChannel because we need to send synchronous |
- // messages with replies from any thread. |
- ScopedPlatformHandle parent_sync_channel_; |
-#endif |
- |
- // RawChannel used for asynchronous communication to and from the parent |
- // process. Since these messages are bidirectional, we can't use |
- // |parent_sync_channel_| which is only used for sync messages to the parent. |
- // However since the messages are asynchronous, we can use RawChannel for |
- // convenience instead of writing and reading from pipes manually. Although it |
- // would be convenient, we don't use Mojo IPC because it would be a layering |
- // violation (and cirular dependency) if the system layer depended on |
- // bindings. |
- RoutedRawChannel* parent_async_channel_; |
- |
- // Queue of messages to |parent_async_channel_| that are sent before it is |
- // created. |
- MessageInTransitQueue async_channel_queue_; |
- |
- // The following members are only used on the IO thread, so they don't need to |
- // be used under a lock. |
- |
- // Maps from routing ids to the MessagePipeDispatcher that have requested to |
- // connect to them. When the parent replies with which process they should be |
- // connected to, they will migrate to |connected_pipes_|. |
- base::hash_map<uint64_t, MessagePipeDispatcher*> pending_connects_; |
- |
- // These are MessagePipeDispatchers that are connected to other MPDs in this |
- // process, but they both connected before we had parent_sync_channel_ so we |
- // delayed connecting them. |
- base::hash_map<uint64_t, MessagePipeDispatcher*> pending_inprocess_connects_; |
- |
- // Map from MessagePipeDispatcher to its RoutedRawChannel. This is needed so |
- // that when a MessagePipeDispatcher is closed we can remove the route for the |
- // corresponding RoutedRawChannel. |
- // Note the key is MessagePipeDispatcher*, instead of pipe_id, because when |
- // the two pipes are in the same process they will have one pipe_id but be |
- // connected to the two RoutedRawChannel objects below. |
- base::hash_map<MessagePipeDispatcher*, RoutedRawChannel*> connected_pipes_; |
- |
- // Holds a map of all the RoutedRawChannel that connect this child process to |
- // any other process. The key is the peer process'd pid. |
- base::hash_map<base::ProcessId, RoutedRawChannel*> channels_; |
- |
- // Used for message pipes in the same process. |
- RoutedRawChannel* in_process_pipes_channel1_; |
- RoutedRawChannel* in_process_pipes_channel2_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ChildBroker); |
-}; |
- |
-} // namespace edk |
-} // namespace mojo |
- |
-#endif // MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |