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 #include "mojo/shell/runner/child/runner_connection.h" | 5 #include "mojo/shell/runner/child/runner_connection.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 private: | 67 private: |
68 base::WaitableEvent event_; | 68 base::WaitableEvent event_; |
69 base::Closure run_after_; | 69 base::Closure run_after_; |
70 | 70 |
71 DISALLOW_COPY_AND_ASSIGN(Blocker); | 71 DISALLOW_COPY_AND_ASSIGN(Blocker); |
72 }; | 72 }; |
73 | 73 |
74 using GotApplicationRequestCallback = | 74 using GotApplicationRequestCallback = |
75 base::Callback<void(InterfaceRequest<mojom::ShellClient>)>; | 75 base::Callback<void(InterfaceRequest<mojom::ShellClient>)>; |
76 | 76 |
77 void OnCreateMessagePipe(ScopedMessagePipeHandle* result, | |
78 Blocker::Unblocker unblocker, | |
79 ScopedMessagePipeHandle pipe) { | |
80 *result = std::move(pipe); | |
81 unblocker.Unblock(base::Bind(&base::DoNothing)); | |
82 } | |
83 | |
84 void OnGotApplicationRequest(InterfaceRequest<mojom::ShellClient>* out_request, | 77 void OnGotApplicationRequest(InterfaceRequest<mojom::ShellClient>* out_request, |
85 InterfaceRequest<mojom::ShellClient> request) { | 78 InterfaceRequest<mojom::ShellClient> request) { |
86 *out_request = std::move(request); | 79 *out_request = std::move(request); |
87 } | 80 } |
88 | 81 |
89 class ChildControllerImpl; | 82 class ChildControllerImpl; |
90 | 83 |
91 class RunnerConnectionImpl : public RunnerConnection { | 84 class RunnerConnectionImpl : public RunnerConnection { |
92 public: | 85 public: |
93 RunnerConnectionImpl() : controller_thread_("controller_thread") { | 86 RunnerConnectionImpl() : controller_thread_("controller_thread") { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 if (!handle.is_valid()) { | 215 if (!handle.is_valid()) { |
223 edk::ScopedPlatformHandle platform_channel = | 216 edk::ScopedPlatformHandle platform_channel = |
224 edk::PlatformChannelPair::PassClientHandleFromParentProcess( | 217 edk::PlatformChannelPair::PassClientHandleFromParentProcess( |
225 *base::CommandLine::ForCurrentProcess()); | 218 *base::CommandLine::ForCurrentProcess()); |
226 if (!platform_channel.is_valid()) | 219 if (!platform_channel.is_valid()) |
227 return false; | 220 return false; |
228 edk::SetParentPipeHandle(std::move(platform_channel)); | 221 edk::SetParentPipeHandle(std::move(platform_channel)); |
229 std::string primordial_pipe_token = | 222 std::string primordial_pipe_token = |
230 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 223 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
231 switches::kPrimordialPipeToken); | 224 switches::kPrimordialPipeToken); |
232 Blocker blocker; | 225 handle = edk::CreateChildMessagePipe(primordial_pipe_token); |
233 edk::CreateChildMessagePipe( | |
234 primordial_pipe_token, | |
235 base::Bind(&OnCreateMessagePipe, base::Unretained(&handle), | |
236 blocker.GetUnblocker())); | |
237 blocker.Block(); | |
238 } | 226 } |
239 | 227 |
| 228 DCHECK(handle.is_valid()); |
| 229 |
240 Blocker blocker; | 230 Blocker blocker; |
241 controller_runner_->PostTask( | 231 controller_runner_->PostTask( |
242 FROM_HERE, | 232 FROM_HERE, |
243 base::Bind( | 233 base::Bind( |
244 &ChildControllerImpl::Create, base::Unretained(this), | 234 &ChildControllerImpl::Create, base::Unretained(this), |
245 base::Bind(&OnGotApplicationRequest, base::Unretained(request)), | 235 base::Bind(&OnGotApplicationRequest, base::Unretained(request)), |
246 base::Passed(&handle), blocker.GetUnblocker())); | 236 base::Passed(&handle), blocker.GetUnblocker())); |
247 blocker.Block(); | 237 blocker.Block(); |
248 | 238 |
249 return true; | 239 return true; |
(...skipping 12 matching lines...) Expand all Loading... |
262 delete connection; | 252 delete connection; |
263 return nullptr; | 253 return nullptr; |
264 } | 254 } |
265 return connection; | 255 return connection; |
266 } | 256 } |
267 | 257 |
268 RunnerConnection::RunnerConnection() {} | 258 RunnerConnection::RunnerConnection() {} |
269 | 259 |
270 } // namespace shell | 260 } // namespace shell |
271 } // namespace mojo | 261 } // namespace mojo |
OLD | NEW |