Chromium Code Reviews| 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_TOKEN_SERIALIZER_WIN_H_ | 5 #ifndef MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
| 6 #define MOJO_EDK_SYSTEM_CHILD_TOKEN_SERIALIZER_WIN_H_ | 6 #define MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
| 7 | 7 |
| 8 #include "base/memory/singleton.h" | 8 #include "base/memory/singleton.h" |
| 9 #include "base/synchronization/lock_impl.h" | 9 #include "base/synchronization/lock_impl.h" |
| 10 #include "mojo/edk/embedder/scoped_platform_handle.h" | 10 #include "mojo/edk/embedder/scoped_platform_handle.h" |
| 11 #include "mojo/edk/system/broker.h" | |
| 11 #include "mojo/edk/system/system_impl_export.h" | 12 #include "mojo/edk/system/system_impl_export.h" |
| 12 #include "mojo/edk/system/token_serializer_win.h" | |
| 13 | 13 |
| 14 namespace mojo { | 14 namespace mojo { |
| 15 namespace edk { | 15 namespace edk { |
| 16 struct TokenSerializerMessage; | 16 struct BrokerMessage; |
| 17 | 17 |
| 18 // An implementation of TokenSerializer used in (sandboxed) child processes. It | 18 // An implementation of Broker used in (sandboxed) child processes. It talks |
| 19 // talks over sync IPCs to the (unsandboxed) parent process (specifically, | 19 // over sync IPCs to the (unsandboxed) parent process (specifically, |
| 20 // ParentTokenSerializer) to convert handles to tokens and vice versa. | 20 // ParentBroker) to convert handles to tokens and vice versa. |
|
yzshen1
2015/11/25 16:47:09
nit: the name ParentBroker is not the actual name
| |
| 21 class MOJO_SYSTEM_IMPL_EXPORT ChildTokenSerializer : public TokenSerializer { | 21 class MOJO_SYSTEM_IMPL_EXPORT ChildBroker : public Broker { |
| 22 public: | 22 public: |
| 23 static ChildTokenSerializer* GetInstance(); | 23 static ChildBroker* GetInstance(); |
| 24 | 24 |
| 25 // Passes the platform handle that is used to talk to ParentTokenSerializer. | 25 // Passes the platform handle that is used to talk to ChildBrokerHost. |
| 26 void SetParentTokenSerializerHandle(ScopedPlatformHandle handle); | 26 void SetChildBrokerHostHandle(ScopedPlatformHandle handle); |
| 27 | 27 |
| 28 // TokenSerializer implementation: | 28 // Broker implementation: |
| 29 #if defined(OS_WIN) | |
| 29 void CreatePlatformChannelPair(ScopedPlatformHandle* server, | 30 void CreatePlatformChannelPair(ScopedPlatformHandle* server, |
| 30 ScopedPlatformHandle* client) override; | 31 ScopedPlatformHandle* client) override; |
| 31 void HandleToToken(const PlatformHandle* platform_handles, | 32 void HandleToToken(const PlatformHandle* platform_handles, |
| 32 size_t count, | 33 size_t count, |
| 33 uint64_t* tokens) override; | 34 uint64_t* tokens) override; |
| 34 void TokenToHandle(const uint64_t* tokens, | 35 void TokenToHandle(const uint64_t* tokens, |
| 35 size_t count, | 36 size_t count, |
| 36 PlatformHandle* handles) override; | 37 PlatformHandle* handles) override; |
| 38 #endif | |
| 37 | 39 |
| 38 private: | 40 private: |
| 39 friend struct base::DefaultSingletonTraits<ChildTokenSerializer>; | 41 friend struct base::DefaultSingletonTraits<ChildBroker>; |
| 40 | 42 |
| 41 ChildTokenSerializer(); | 43 ChildBroker(); |
| 42 ~ChildTokenSerializer() override; | 44 ~ChildBroker() override; |
| 43 | 45 |
| 44 // Helper method to write the given message and read back the result. | 46 // Helper method to write the given message and read back the result. |
| 45 bool WriteAndReadResponse(TokenSerializerMessage* message, | 47 bool WriteAndReadResponse(BrokerMessage* message, |
| 46 void* response, | 48 void* response, |
| 47 uint32_t response_size); | 49 uint32_t response_size); |
| 48 | 50 |
| 49 // Guards access to below. | 51 // Guards access to below. |
| 50 // We use LockImpl instead of Lock because the latter adds thread checking | 52 // We use LockImpl instead of Lock because the latter adds thread checking |
| 51 // that we don't want (since we lock in the constructor and unlock on another | 53 // that we don't want (since we lock in the constructor and unlock on another |
| 52 // thread. | 54 // thread. |
| 53 base::internal::LockImpl lock_; | 55 base::internal::LockImpl lock_; |
| 54 ScopedPlatformHandle handle_; | 56 ScopedPlatformHandle handle_; |
| 55 }; | 57 }; |
| 56 | 58 |
| 57 } // namespace edk | 59 } // namespace edk |
| 58 } // namespace mojo | 60 } // namespace mojo |
| 59 | 61 |
| 60 #endif // MOJO_EDK_SYSTEM_CHILD_TOKEN_SERIALIZER_WIN_H_ | 62 #endif // MOJO_EDK_SYSTEM_CHILD_BROKER_H_ |
| OLD | NEW |