multiprocess_test.cc revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/multiprocess_test.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/base_switches.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MultiProcessTest::MultiProcessTest() { 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname, 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool debug_on_start) { 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) LaunchOptions options; 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_WIN) 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options.start_hidden = true; 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return SpawnChildWithOptions(procname, options, debug_on_start); 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if !defined(OS_ANDROID) 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ProcessHandle MultiProcessTest::SpawnChildWithOptions( 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& procname, 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const LaunchOptions& options, 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool debug_on_start) { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ProcessHandle handle = kNullProcessHandle; 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) LaunchProcess(MakeCmdLine(procname, debug_on_start), options, &handle); 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return handle; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProcessHandle MultiProcessTest::SpawnChild( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& procname, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FileHandleMappingVector& fds_to_map, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool debug_on_start) { 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) LaunchOptions options; 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options.fds_to_remap = &fds_to_map; 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return SpawnChildWithOptions(procname, options, debug_on_start); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool debug_on_start) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine cl(*CommandLine::ForCurrentProcess()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl.AppendSwitchASCII(switches::kTestChildProcess, procname); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (debug_on_start) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl.AppendSwitch(switches::kDebugOnStart); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cl; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 56