1// Copyright (c) 2012 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 "base/test/multiprocess_test.h" 6 7#include "base/base_switches.h" 8#include "base/command_line.h" 9 10namespace base { 11 12#if !defined(OS_ANDROID) 13ProcessHandle SpawnMultiProcessTestChild( 14 const std::string& procname, 15 const CommandLine& base_command_line, 16 const LaunchOptions& options) { 17 CommandLine command_line(base_command_line); 18 // TODO(viettrungluu): See comment above |MakeCmdLine()| in the header file. 19 // This is a temporary hack, since |MakeCmdLine()| has to provide a full 20 // command line. 21 if (!command_line.HasSwitch(switches::kTestChildProcess)) 22 command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); 23 24 ProcessHandle handle = kNullProcessHandle; 25 LaunchProcess(command_line, options, &handle); 26 return handle; 27} 28#endif // !defined(OS_ANDROID) 29 30CommandLine GetMultiProcessTestChildBaseCommandLine() { 31 return *CommandLine::ForCurrentProcess(); 32} 33 34// MultiProcessTest ------------------------------------------------------------ 35 36MultiProcessTest::MultiProcessTest() { 37} 38 39ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname) { 40 LaunchOptions options; 41#if defined(OS_WIN) 42 options.start_hidden = true; 43#endif 44 return SpawnChildWithOptions(procname, options); 45} 46 47ProcessHandle MultiProcessTest::SpawnChildWithOptions( 48 const std::string& procname, 49 const LaunchOptions& options) { 50 return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options); 51} 52 53CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) { 54 CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); 55 command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); 56 return command_line; 57} 58 59} // namespace base 60