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
3// found in the LICENSE file.
4
5#include "mojo/shell/child_process.h"
6
7#include "base/command_line.h"
8#include "base/logging.h"
9#include "base/strings/string_number_conversions.h"
10#include "mojo/embedder/platform_channel_pair.h"
11#include "mojo/shell/app_child_process.h"
12#include "mojo/shell/switches.h"
13#include "mojo/shell/test_child_process.h"
14
15namespace mojo {
16namespace shell {
17
18ChildProcess::~ChildProcess() {
19}
20
21// static
22scoped_ptr<ChildProcess> ChildProcess::Create(
23    const base::CommandLine& command_line) {
24  if (!command_line.HasSwitch(switches::kChildProcessType))
25    return scoped_ptr<ChildProcess>();
26
27  int type_as_int;
28  CHECK(base::StringToInt(command_line.GetSwitchValueASCII(
29            switches::kChildProcessType), &type_as_int));
30
31  scoped_ptr<ChildProcess> rv;
32  switch (type_as_int) {
33    case TYPE_TEST:
34      rv.reset(new TestChildProcess());
35      break;
36    case TYPE_APP:
37      rv.reset(new AppChildProcess());
38      break;
39    default:
40      CHECK(false) << "Invalid child process type";
41      break;
42  }
43
44  if (rv) {
45    rv->platform_channel_ =
46        embedder::PlatformChannelPair::PassClientHandleFromParentProcess(
47            command_line);
48    CHECK(rv->platform_channel_.is_valid());
49  }
50
51  return rv.Pass();
52}
53
54ChildProcess::ChildProcess() {
55}
56
57}  // namespace shell
58}  // namespace mojo
59