1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/shell/child_process.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/command_line.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "mojo/embedder/platform_channel_pair.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/shell/app_child_process.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/shell/switches.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "mojo/shell/test_child_process.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace mojo { 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace shell { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ChildProcess::~ChildProcess() { 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)scoped_ptr<ChildProcess> ChildProcess::Create( 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::CommandLine& command_line) { 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!command_line.HasSwitch(switches::kChildProcessType)) 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return scoped_ptr<ChildProcess>(); 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int type_as_int; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(base::StringToInt(command_line.GetSwitchValueASCII( 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switches::kChildProcessType), &type_as_int)); 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<ChildProcess> rv; 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) switch (type_as_int) { 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case TYPE_TEST: 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rv.reset(new TestChildProcess()); 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case TYPE_APP: 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rv.reset(new AppChildProcess()); 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) default: 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(false) << "Invalid child process type"; 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (rv) { 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) rv->platform_channel_ = 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) embedder::PlatformChannelPair::PassClientHandleFromParentProcess( 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line); 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CHECK(rv->platform_channel_.is_valid()); 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return rv.Pass(); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ChildProcess::ChildProcess() { 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace shell 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace mojo 59