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) 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if !defined(OS_ANDROID) 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ProcessHandle SpawnMultiProcessTestChild( 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& procname, 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const CommandLine& base_command_line, 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const LaunchOptions& options) { 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine command_line(base_command_line); 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // TODO(viettrungluu): See comment above |MakeCmdLine()| in the header file. 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // This is a temporary hack, since |MakeCmdLine()| has to provide a full 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // command line. 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!command_line.HasSwitch(switches::kTestChildProcess)) 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ProcessHandle handle = kNullProcessHandle; 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) LaunchProcess(command_line, options, &handle); 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return handle; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // !defined(OS_ANDROID) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)CommandLine GetMultiProcessTestChildBaseCommandLine() { 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return *CommandLine::ForCurrentProcess(); 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// MultiProcessTest ------------------------------------------------------------ 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MultiProcessTest::MultiProcessTest() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname) { 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) LaunchOptions options; 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_WIN) 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options.start_hidden = true; 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return SpawnChildWithOptions(procname, options); 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ProcessHandle MultiProcessTest::SpawnChildWithOptions( 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& procname, 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const LaunchOptions& options) { 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) { 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CommandLine command_line = GetMultiProcessTestChildBaseCommandLine(); 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) command_line.AppendSwitchASCII(switches::kTestChildProcess, procname); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return command_line; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 60