| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "services/service_manager/runner/host/service_process_launcher.h" | 5 #include "services/service_manager/runner/host/service_process_launcher.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 namespace service_manager { | 40 namespace service_manager { |
| 41 | 41 |
| 42 ServiceProcessLauncher::ServiceProcessLauncher( | 42 ServiceProcessLauncher::ServiceProcessLauncher( |
| 43 base::TaskRunner* launch_process_runner, | 43 base::TaskRunner* launch_process_runner, |
| 44 Delegate* delegate, | 44 Delegate* delegate, |
| 45 const base::FilePath& service_path) | 45 const base::FilePath& service_path) |
| 46 : launch_process_runner_(launch_process_runner), | 46 : launch_process_runner_(launch_process_runner), |
| 47 delegate_(delegate), | 47 delegate_(delegate), |
| 48 start_sandboxed_(false), | 48 start_sandboxed_(false), |
| 49 service_path_(service_path), | 49 service_path_(service_path), |
| 50 child_token_(mojo::edk::GenerateRandomToken()), | |
| 51 start_child_process_event_( | 50 start_child_process_event_( |
| 52 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 51 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 53 base::WaitableEvent::InitialState::NOT_SIGNALED), | 52 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 54 weak_factory_(this) { | 53 weak_factory_(this) { |
| 55 if (service_path_.empty()) | 54 if (service_path_.empty()) |
| 56 service_path_ = base::CommandLine::ForCurrentProcess()->GetProgram(); | 55 service_path_ = base::CommandLine::ForCurrentProcess()->GetProgram(); |
| 57 } | 56 } |
| 58 | 57 |
| 59 ServiceProcessLauncher::~ServiceProcessLauncher() { | 58 ServiceProcessLauncher::~ServiceProcessLauncher() { |
| 60 Join(); | 59 Join(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 83 child_command_line->AppendSwitchASCII("u", target.user_id()); | 82 child_command_line->AppendSwitchASCII("u", target.user_id()); |
| 84 #endif | 83 #endif |
| 85 | 84 |
| 86 if (start_sandboxed_) | 85 if (start_sandboxed_) |
| 87 child_command_line->AppendSwitch(::switches::kEnableSandbox); | 86 child_command_line->AppendSwitch(::switches::kEnableSandbox); |
| 88 | 87 |
| 89 mojo_ipc_channel_.reset(new mojo::edk::PlatformChannelPair); | 88 mojo_ipc_channel_.reset(new mojo::edk::PlatformChannelPair); |
| 90 mojo_ipc_channel_->PrepareToPassClientHandleToChildProcess( | 89 mojo_ipc_channel_->PrepareToPassClientHandleToChildProcess( |
| 91 child_command_line.get(), &handle_passing_info_); | 90 child_command_line.get(), &handle_passing_info_); |
| 92 | 91 |
| 93 mojom::ServicePtr client = | 92 mojom::ServicePtr client = PassServiceRequestOnCommandLine( |
| 94 PassServiceRequestOnCommandLine(child_command_line.get(), child_token_); | 93 process_connection_, child_command_line.get()); |
| 95 launch_process_runner_->PostTaskAndReply( | 94 launch_process_runner_->PostTaskAndReply( |
| 96 FROM_HERE, | 95 FROM_HERE, |
| 97 base::Bind(&ServiceProcessLauncher::DoLaunch, base::Unretained(this), | 96 base::Bind(&ServiceProcessLauncher::DoLaunch, base::Unretained(this), |
| 98 base::Passed(&child_command_line)), | 97 base::Passed(&child_command_line)), |
| 99 base::Bind(&ServiceProcessLauncher::DidStart, | 98 base::Bind(&ServiceProcessLauncher::DidStart, |
| 100 weak_factory_.GetWeakPtr(), callback)); | 99 weak_factory_.GetWeakPtr(), callback)); |
| 101 return client; | 100 return client; |
| 102 } | 101 } |
| 103 | 102 |
| 104 void ServiceProcessLauncher::Join() { | 103 void ServiceProcessLauncher::Join() { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 } | 189 } |
| 191 | 190 |
| 192 if (child_process_.IsValid()) { | 191 if (child_process_.IsValid()) { |
| 193 DVLOG(0) << "Launched child process pid=" << child_process_.Pid() | 192 DVLOG(0) << "Launched child process pid=" << child_process_.Pid() |
| 194 << ", instance=" << target_.instance() | 193 << ", instance=" << target_.instance() |
| 195 << ", name=" << target_.name() | 194 << ", name=" << target_.name() |
| 196 << ", user_id=" << target_.user_id(); | 195 << ", user_id=" << target_.user_id(); |
| 197 | 196 |
| 198 if (mojo_ipc_channel_.get()) { | 197 if (mojo_ipc_channel_.get()) { |
| 199 mojo_ipc_channel_->ChildProcessLaunched(); | 198 mojo_ipc_channel_->ChildProcessLaunched(); |
| 200 mojo::edk::ChildProcessLaunched( | 199 process_connection_.Connect(child_process_.Handle(), |
| 201 child_process_.Handle(), | 200 mojo_ipc_channel_->PassServerHandle()); |
| 202 mojo::edk::ScopedPlatformHandle(mojo::edk::PlatformHandle( | |
| 203 mojo_ipc_channel_->PassServerHandle().release().handle)), | |
| 204 child_token_); | |
| 205 } | 201 } |
| 206 } | 202 } |
| 207 start_child_process_event_.Signal(); | 203 start_child_process_event_.Signal(); |
| 208 } | 204 } |
| 209 | 205 |
| 210 } // namespace service_manager | 206 } // namespace service_manager |
| OLD | NEW |