// 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 "shell/child_process.h"

#include "base/command_line.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "mojo/edk/embedder/platform_channel_pair.h"
#include "shell/app_child_process.h"
#include "shell/switches.h"
#include "shell/test_child_process.h"

namespace mojo {
namespace shell {

ChildProcess::~ChildProcess() {
}

// static
scoped_ptr<ChildProcess> ChildProcess::Create(
    const base::CommandLine& command_line) {
  if (!command_line.HasSwitch(switches::kChildProcessType))
    return scoped_ptr<ChildProcess>();

  int type_as_int;
  CHECK(base::StringToInt(
      command_line.GetSwitchValueASCII(switches::kChildProcessType),
      &type_as_int));

  scoped_ptr<ChildProcess> rv;
  switch (type_as_int) {
    case TYPE_TEST:
      rv.reset(new TestChildProcess());
      break;
    case TYPE_APP:
      rv.reset(new AppChildProcess());
      break;
    default:
      CHECK(false) << "Invalid child process type";
      break;
  }

  if (rv) {
    rv->platform_channel_ =
        embedder::PlatformChannelPair::PassClientHandleFromParentProcess(
            command_line);
    CHECK(rv->platform_channel_.is_valid());
  }

  return rv.Pass();
}

ChildProcess::ChildProcess() {
}

}  // namespace shell
}  // namespace mojo
