| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "mojo/edk/embedder/embedder.h" | 5 #include "mojo/edk/embedder/embedder.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" | 8 #include "base/location.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 // Helper for |CreateChannel...()|. Returns 0 on failure. Called on the channel | 28 // Helper for |CreateChannel...()|. Returns 0 on failure. Called on the channel |
| 29 // creation thread. | 29 // creation thread. |
| 30 system::ChannelId MakeChannel( | 30 system::ChannelId MakeChannel( |
| 31 ScopedPlatformHandle platform_handle, | 31 ScopedPlatformHandle platform_handle, |
| 32 scoped_refptr<system::ChannelEndpoint> channel_endpoint) { | 32 scoped_refptr<system::ChannelEndpoint> channel_endpoint) { |
| 33 DCHECK(platform_handle.is_valid()); | 33 DCHECK(platform_handle.is_valid()); |
| 34 | 34 |
| 35 // Create and initialize a |system::Channel|. | 35 // Create and initialize a |system::Channel|. |
| 36 DCHECK(internal::g_core); | 36 DCHECK(internal::g_platform_support); |
| 37 scoped_refptr<system::Channel> channel = | 37 scoped_refptr<system::Channel> channel = |
| 38 new system::Channel(internal::g_core->platform_support()); | 38 new system::Channel(internal::g_platform_support); |
| 39 channel->Init(system::RawChannel::Create(platform_handle.Pass())); | 39 channel->Init(system::RawChannel::Create(platform_handle.Pass())); |
| 40 channel->SetBootstrapEndpoint(channel_endpoint); | 40 channel->SetBootstrapEndpoint(channel_endpoint); |
| 41 | 41 |
| 42 // You can use any nonzero, unique (in the set of |Channel|s managed by the | 42 // You can use any nonzero, unique (in the set of |Channel|s managed by the |
| 43 // given |ChannelManager|) value as ID. So here we just use the address of the | 43 // given |ChannelManager|) value as ID. So here we just use the address of the |
| 44 // channel. | 44 // channel. |
| 45 system::ChannelId id = static_cast<system::ChannelId>( | 45 system::ChannelId id = static_cast<system::ChannelId>( |
| 46 reinterpret_cast<uintptr_t>(channel.get())); | 46 reinterpret_cast<uintptr_t>(channel.get())); |
| 47 DCHECK(internal::g_channel_manager); | 47 DCHECK(internal::g_channel_manager); |
| 48 internal::g_channel_manager->AddChannel(id, channel, | 48 internal::g_channel_manager->AddChannel(id, channel, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 67 } else { | 67 } else { |
| 68 callback.Run(channel_info.release()); | 68 callback.Run(channel_info.release()); |
| 69 } | 69 } |
| 70 } | 70 } |
| 71 | 71 |
| 72 } // namespace | 72 } // namespace |
| 73 | 73 |
| 74 namespace internal { | 74 namespace internal { |
| 75 | 75 |
| 76 // Declared in embedder_internal.h. | 76 // Declared in embedder_internal.h. |
| 77 PlatformSupport* g_platform_support = nullptr; |
| 77 system::Core* g_core = nullptr; | 78 system::Core* g_core = nullptr; |
| 78 system::ChannelManager* g_channel_manager = nullptr; | 79 system::ChannelManager* g_channel_manager = nullptr; |
| 79 | 80 |
| 80 } // namespace internal | 81 } // namespace internal |
| 81 | 82 |
| 82 void Init(scoped_ptr<PlatformSupport> platform_support) { | 83 void Init(scoped_ptr<PlatformSupport> platform_support) { |
| 84 DCHECK(platform_support); |
| 85 |
| 86 DCHECK(!internal::g_platform_support); |
| 87 internal::g_platform_support = platform_support.release(); |
| 88 |
| 83 DCHECK(!internal::g_core); | 89 DCHECK(!internal::g_core); |
| 84 internal::g_core = new system::Core(platform_support.Pass()); | 90 internal::g_core = new system::Core(internal::g_platform_support); |
| 91 |
| 85 DCHECK(!internal::g_channel_manager); | 92 DCHECK(!internal::g_channel_manager); |
| 86 internal::g_channel_manager = new system::ChannelManager(); | 93 internal::g_channel_manager = new system::ChannelManager(); |
| 87 } | 94 } |
| 88 | 95 |
| 89 Configuration* GetConfiguration() { | 96 Configuration* GetConfiguration() { |
| 90 return system::GetMutableConfiguration(); | 97 return system::GetMutableConfiguration(); |
| 91 } | 98 } |
| 92 | 99 |
| 93 // TODO(vtl): Write tests for this. | 100 // TODO(vtl): Write tests for this. |
| 94 ScopedMessagePipeHandle CreateChannelOnIOThread( | 101 ScopedMessagePipeHandle CreateChannelOnIOThread( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 } | 211 } |
| 205 | 212 |
| 206 MojoResult AsyncWait(MojoHandle handle, | 213 MojoResult AsyncWait(MojoHandle handle, |
| 207 MojoHandleSignals signals, | 214 MojoHandleSignals signals, |
| 208 base::Callback<void(MojoResult)> callback) { | 215 base::Callback<void(MojoResult)> callback) { |
| 209 return internal::g_core->AsyncWait(handle, signals, callback); | 216 return internal::g_core->AsyncWait(handle, signals, callback); |
| 210 } | 217 } |
| 211 | 218 |
| 212 } // namespace embedder | 219 } // namespace embedder |
| 213 } // namespace mojo | 220 } // namespace mojo |
| OLD | NEW |