Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(505)

Unified Diff: mojo/shell/child_process_host.cc

Issue 1091513005: Separate mojo/shell into a runner and the application manager (shell) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/shell/child_process_host.h ('k') | mojo/shell/child_process_host_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « mojo/shell/child_process_host.h ('k') | mojo/shell/child_process_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698