// 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.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 "mojo/shell/app_child_process.h"
#include "mojo/shell/switches.h"
#include "mojo/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
