|  | // Copyright (c) 2012 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 "base/test/multiprocess_test.h" | 
|  |  | 
|  | #include "base/base_switches.h" | 
|  | #include "base/command_line.h" | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | MultiProcessTest::MultiProcessTest() { | 
|  | } | 
|  |  | 
|  | ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname, | 
|  | bool debug_on_start) { | 
|  | FileHandleMappingVector empty_file_list; | 
|  | return SpawnChildImpl(procname, empty_file_list, debug_on_start); | 
|  | } | 
|  |  | 
|  | #if defined(OS_POSIX) | 
|  | ProcessHandle MultiProcessTest::SpawnChild( | 
|  | const std::string& procname, | 
|  | const FileHandleMappingVector& fds_to_map, | 
|  | bool debug_on_start) { | 
|  | return SpawnChildImpl(procname, fds_to_map, debug_on_start); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname, | 
|  | bool debug_on_start) { | 
|  | CommandLine cl(*CommandLine::ForCurrentProcess()); | 
|  | cl.AppendSwitchASCII(switches::kTestChildProcess, procname); | 
|  | if (debug_on_start) | 
|  | cl.AppendSwitch(switches::kDebugOnStart); | 
|  | return cl; | 
|  | } | 
|  |  | 
|  | #if !defined(OS_ANDROID) | 
|  | ProcessHandle MultiProcessTest::SpawnChildImpl( | 
|  | const std::string& procname, | 
|  | const FileHandleMappingVector& fds_to_map, | 
|  | bool debug_on_start) { | 
|  | ProcessHandle handle = kNullProcessHandle; | 
|  | base::LaunchOptions options; | 
|  | #if defined(OS_WIN) | 
|  | options.start_hidden = true; | 
|  | #else | 
|  | options.fds_to_remap = &fds_to_map; | 
|  | #endif | 
|  | base::LaunchProcess(MakeCmdLine(procname, debug_on_start), options, &handle); | 
|  | return handle; | 
|  | } | 
|  | #endif  // !defined(OS_ANDROID) | 
|  |  | 
|  | }  // namespace base |