OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef MOJO_EDK_SYSTEM_CHILD_BROKER_H_ | 5 #ifndef MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
6 #define MOJO_EDK_SYSTEM_CHILD_BROKER_H_ | 6 #define MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 28 matching lines...) Expand all Loading... |
39 // Broker implementation: | 39 // Broker implementation: |
40 #if defined(OS_WIN) | 40 #if defined(OS_WIN) |
41 void CreatePlatformChannelPair(ScopedPlatformHandle* server, | 41 void CreatePlatformChannelPair(ScopedPlatformHandle* server, |
42 ScopedPlatformHandle* client) override; | 42 ScopedPlatformHandle* client) override; |
43 void HandleToToken(const PlatformHandle* platform_handles, | 43 void HandleToToken(const PlatformHandle* platform_handles, |
44 size_t count, | 44 size_t count, |
45 uint64_t* tokens) override; | 45 uint64_t* tokens) override; |
46 void TokenToHandle(const uint64_t* tokens, | 46 void TokenToHandle(const uint64_t* tokens, |
47 size_t count, | 47 size_t count, |
48 PlatformHandle* handles) override; | 48 PlatformHandle* handles) override; |
49 #else | |
50 scoped_refptr<PlatformSharedBuffer> CreateSharedBuffer( | |
51 size_t num_bytes) override; | |
52 #endif | 49 #endif |
53 | |
54 void ConnectMessagePipe(uint64_t pipe_id, | 50 void ConnectMessagePipe(uint64_t pipe_id, |
55 MessagePipeDispatcher* message_pipe) override; | 51 MessagePipeDispatcher* message_pipe) override; |
56 void CloseMessagePipe(uint64_t pipe_id, | 52 void CloseMessagePipe(uint64_t pipe_id, |
57 MessagePipeDispatcher* message_pipe) override; | 53 MessagePipeDispatcher* message_pipe) override; |
58 | 54 |
59 private: | 55 private: |
60 friend struct base::DefaultSingletonTraits<ChildBroker>; | 56 friend struct base::DefaultSingletonTraits<ChildBroker>; |
61 | 57 |
62 ChildBroker(); | 58 ChildBroker(); |
63 ~ChildBroker() override; | 59 ~ChildBroker() override; |
(...skipping 20 matching lines...) Expand all Loading... |
84 | 80 |
85 #if defined(OS_WIN) | 81 #if defined(OS_WIN) |
86 // Helper method to write the given message and read back the result. | 82 // Helper method to write the given message and read back the result. |
87 bool WriteAndReadResponse(BrokerMessage* message, | 83 bool WriteAndReadResponse(BrokerMessage* message, |
88 void* response, | 84 void* response, |
89 uint32_t response_size); | 85 uint32_t response_size); |
90 | 86 |
91 void CreatePlatformChannelPairNoLock(ScopedPlatformHandle* server, | 87 void CreatePlatformChannelPairNoLock(ScopedPlatformHandle* server, |
92 ScopedPlatformHandle* client); | 88 ScopedPlatformHandle* client); |
93 | 89 |
94 #else | |
95 // Will fully write |message|, then read back some number of handles. Returns | |
96 // false if the write or read failed, or if there were no handles received. | |
97 bool WriteAndReadHandles(BrokerMessage* message, | |
98 std::deque<PlatformHandle>* handles); | |
99 #endif | |
100 | |
101 // Guards access to |parent_sync_channel_|. | 90 // Guards access to |parent_sync_channel_|. |
102 // We use LockImpl instead of Lock because the latter adds thread checking | 91 // We use LockImpl instead of Lock because the latter adds thread checking |
103 // that we don't want (since we lock in the constructor and unlock on another | 92 // that we don't want (since we lock in the constructor and unlock on another |
104 // thread. | 93 // thread. |
105 base::internal::LockImpl sync_channel_lock_; | 94 base::internal::LockImpl sync_channel_lock_; |
106 | 95 |
107 // Pipe used for communication to the parent process. We use a pipe directly | 96 // Pipe used for communication to the parent process. We use a pipe directly |
108 // instead of bindings or RawChannel because we need to send synchronous | 97 // instead of bindings or RawChannel because we need to send synchronous |
109 // messages with replies from any thread. | 98 // messages with replies from any thread. |
110 ScopedPlatformHandle parent_sync_channel_; | 99 ScopedPlatformHandle parent_sync_channel_; |
| 100 #endif |
111 | 101 |
112 // RawChannel used for asynchronous communication to and from the parent | 102 // RawChannel used for asynchronous communication to and from the parent |
113 // process. Since these messages are bidirectional, we can't use | 103 // process. Since these messages are bidirectional, we can't use |
114 // |parent_sync_channel_| which is only used for sync messages to the parent. | 104 // |parent_sync_channel_| which is only used for sync messages to the parent. |
115 // However since the messages are asynchronous, we can use RawChannel for | 105 // However since the messages are asynchronous, we can use RawChannel for |
116 // convenience instead of writing and reading from pipes manually. Although it | 106 // convenience instead of writing and reading from pipes manually. Although it |
117 // would be convenient, we don't use Mojo IPC because it would be a layering | 107 // would be convenient, we don't use Mojo IPC because it would be a layering |
118 // violation (and cirular dependency) if the system layer depended on | 108 // violation (and cirular dependency) if the system layer depended on |
119 // bindings. | 109 // bindings. |
120 RoutedRawChannel* parent_async_channel_; | 110 RoutedRawChannel* parent_async_channel_; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 RoutedRawChannel* in_process_pipes_channel1_; | 142 RoutedRawChannel* in_process_pipes_channel1_; |
153 RoutedRawChannel* in_process_pipes_channel2_; | 143 RoutedRawChannel* in_process_pipes_channel2_; |
154 | 144 |
155 DISALLOW_COPY_AND_ASSIGN(ChildBroker); | 145 DISALLOW_COPY_AND_ASSIGN(ChildBroker); |
156 }; | 146 }; |
157 | 147 |
158 } // namespace edk | 148 } // namespace edk |
159 } // namespace mojo | 149 } // namespace mojo |
160 | 150 |
161 #endif // MOJO_EDK_SYSTEM_CHILD_BROKER_H_ | 151 #endif // MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
OLD | NEW |