| Index: mojo/shell/child_process_host.cc
|
| diff --git a/mojo/shell/child_process_host.cc b/mojo/shell/child_process_host.cc
|
| deleted file mode 100644
|
| index 787233cb8c71bea45d1a10066f94d0e5d1ed0434..0000000000000000000000000000000000000000
|
| --- a/mojo/shell/child_process_host.cc
|
| +++ /dev/null
|
| @@ -1,163 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "mojo/shell/child_process_host.h"
|
| -
|
| -#include "base/base_switches.h"
|
| -#include "base/bind.h"
|
| -#include "base/command_line.h"
|
| -#include "base/location.h"
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/process/kill.h"
|
| -#include "base/process/launch.h"
|
| -#include "base/stl_util.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/task_runner.h"
|
| -#include "base/task_runner_util.h"
|
| -#include "mojo/edk/embedder/embedder.h"
|
| -#include "mojo/public/cpp/system/core.h"
|
| -#include "mojo/shell/context.h"
|
| -#include "mojo/shell/switches.h"
|
| -#include "mojo/shell/task_runners.h"
|
| -#include "ui/gl/gl_switches.h"
|
| -
|
| -namespace mojo {
|
| -namespace shell {
|
| -
|
| -ChildProcessHost::ChildProcessHost(Context* context, const std::string& name)
|
| - : context_(context), name_(name), channel_info_(nullptr) {
|
| - platform_channel_ = platform_channel_pair_.PassServerHandle();
|
| - DCHECK(!name.empty());
|
| - CHECK(platform_channel_.is_valid());
|
| -}
|
| -
|
| -ChildProcessHost::~ChildProcessHost() {
|
| - if (child_process_.IsValid()) {
|
| - LOG(WARNING) << "Destroying ChildProcessHost with unjoined child";
|
| - child_process_.Close();
|
| - }
|
| -}
|
| -
|
| -void ChildProcessHost::Start() {
|
| - DCHECK(!child_process_.IsValid());
|
| - DCHECK(platform_channel_.is_valid());
|
| -
|
| - ScopedMessagePipeHandle handle(embedder::CreateChannel(
|
| - platform_channel_.Pass(), context_->task_runners()->io_runner(),
|
| - base::Bind(&ChildProcessHost::DidCreateChannel, base::Unretained(this)),
|
| - base::MessageLoop::current()->message_loop_proxy()));
|
| -
|
| - controller_.Bind(handle.Pass());
|
| -
|
| - CHECK(base::PostTaskAndReplyWithResult(
|
| - context_->task_runners()->blocking_pool(), FROM_HERE,
|
| - base::Bind(&ChildProcessHost::DoLaunch, base::Unretained(this)),
|
| - base::Bind(&ChildProcessHost::DidStart, base::Unretained(this))));
|
| -}
|
| -
|
| -int ChildProcessHost::Join() {
|
| - DCHECK(child_process_.IsValid());
|
| - int rv = -1;
|
| - LOG_IF(ERROR, !child_process_.WaitForExit(&rv))
|
| - << "Failed to wait for child process";
|
| - child_process_.Close();
|
| - return rv;
|
| -}
|
| -
|
| -void ChildProcessHost::StartApp(
|
| - const String& app_path,
|
| - bool clean_app_path,
|
| - InterfaceRequest<Application> application_request,
|
| - const ChildController::StartAppCallback& on_app_complete) {
|
| - DCHECK(controller_);
|
| -
|
| - on_app_complete_ = on_app_complete;
|
| - controller_->StartApp(
|
| - app_path, clean_app_path, application_request.Pass(),
|
| - base::Bind(&ChildProcessHost::AppCompleted, base::Unretained(this)));
|
| -}
|
| -
|
| -void ChildProcessHost::ExitNow(int32_t exit_code) {
|
| - DCHECK(controller_);
|
| -
|
| - controller_->ExitNow(exit_code);
|
| -}
|
| -
|
| -void ChildProcessHost::DidStart(bool success) {
|
| - DVLOG(2) << "ChildProcessHost::DidStart()";
|
| -
|
| - if (!success) {
|
| - LOG(ERROR) << "Failed to start child process";
|
| - AppCompleted(MOJO_RESULT_UNKNOWN);
|
| - return;
|
| - }
|
| -}
|
| -
|
| -bool ChildProcessHost::DoLaunch() {
|
| - static const char* kForwardSwitches[] = {
|
| - switches::kOverrideUseGLWithOSMesaForTests,
|
| - switches::kTraceToConsole,
|
| - switches::kV,
|
| - switches::kVModule,
|
| - };
|
| -
|
| - const base::CommandLine* parent_command_line =
|
| - base::CommandLine::ForCurrentProcess();
|
| - base::CommandLine child_command_line(parent_command_line->GetProgram());
|
| - child_command_line.CopySwitchesFrom(*parent_command_line, kForwardSwitches,
|
| - arraysize(kForwardSwitches));
|
| - child_command_line.AppendSwitchASCII(switches::kApp, name_);
|
| - child_command_line.AppendSwitch(switches::kChildProcess);
|
| - if (parent_command_line->HasSwitch(switches::kWaitForDebugger)) {
|
| - std::vector<std::string> apps_to_debug;
|
| - base::SplitString(
|
| - parent_command_line->GetSwitchValueASCII(switches::kWaitForDebugger),
|
| - ',', &apps_to_debug);
|
| - if (apps_to_debug.empty() || ContainsValue(apps_to_debug, name_))
|
| - child_command_line.AppendSwitch(switches::kWaitForDebugger);
|
| - }
|
| -
|
| - auto args = parent_command_line->GetArgs();
|
| - for (const auto& arg : args)
|
| - child_command_line.AppendArgNative(arg);
|
| -
|
| - embedder::HandlePassingInformation handle_passing_info;
|
| - platform_channel_pair_.PrepareToPassClientHandleToChildProcess(
|
| - &child_command_line, &handle_passing_info);
|
| -
|
| - base::LaunchOptions options;
|
| -#if defined(OS_WIN)
|
| - options.handles_to_inherit = &handle_passing_info;
|
| -#elif defined(OS_POSIX)
|
| - options.fds_to_remap = &handle_passing_info;
|
| -#endif
|
| - DVLOG(2) << "Launching child with command line: "
|
| - << child_command_line.GetCommandLineString();
|
| - child_process_ = base::LaunchProcess(child_command_line, options);
|
| - if (!child_process_.IsValid())
|
| - return false;
|
| -
|
| - platform_channel_pair_.ChildProcessLaunched();
|
| - return true;
|
| -}
|
| -
|
| -void ChildProcessHost::AppCompleted(int32_t result) {
|
| - if (!on_app_complete_.is_null()) {
|
| - auto on_app_complete = on_app_complete_;
|
| - on_app_complete_.reset();
|
| - on_app_complete.Run(result);
|
| - }
|
| -}
|
| -
|
| -void ChildProcessHost::DidCreateChannel(embedder::ChannelInfo* channel_info) {
|
| - DVLOG(2) << "AppChildProcessHost::DidCreateChannel()";
|
| -
|
| - CHECK(channel_info);
|
| - channel_info_ = channel_info;
|
| -}
|
| -
|
| -} // namespace shell
|
| -} // namespace mojo
|
|
|