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