Index: base/test/multiprocess_test.cc |
=================================================================== |
--- base/test/multiprocess_test.cc (revision 0) |
+++ base/test/multiprocess_test.cc (revision 0) |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2010 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" |
+ |
+#if defined(OS_POSIX) |
+#include <sys/types.h> |
+#include <unistd.h> |
+#endif |
+ |
+namespace base { |
+ |
+MultiProcessTest::MultiProcessTest() { |
+} |
+ |
+ProcessHandle MultiProcessTest::SpawnChild(const std::string& procname, |
+ bool debug_on_start) { |
+#if defined(OS_WIN) |
+ return SpawnChildImpl(procname, debug_on_start); |
+#elif defined(OS_POSIX) |
+ file_handle_mapping_vector empty_file_list; |
+ return SpawnChildImpl(procname, empty_file_list, debug_on_start); |
+#endif |
+} |
+ |
+#if defined(OS_POSIX) |
+ProcessHandle MultiProcessTest::SpawnChild( |
+ const std::string& procname, |
+ const file_handle_mapping_vector& 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_WIN) |
+ |
+ProcessHandle MultiProcessTest::SpawnChildImpl(const std::string& procname, |
+ bool debug_on_start) { |
+ ProcessHandle handle = static_cast<ProcessHandle>(NULL); |
+ LaunchApp(MakeCmdLine(procname, debug_on_start), |
+ false, true, &handle); |
+ return handle; |
+} |
+ |
+#elif defined(OS_POSIX) |
+ |
+// TODO(port): with the CommandLine refactoring, this code is very similar |
+// to the Windows code. Investigate whether this can be made shorter. |
+ProcessHandle MultiProcessTest::SpawnChildImpl( |
+ const std::string& procname, |
+ const file_handle_mapping_vector& fds_to_map, |
+ bool debug_on_start) { |
+ ProcessHandle handle = kNullProcessHandle; |
+ LaunchApp(MakeCmdLine(procname, debug_on_start).argv(), |
+ fds_to_map, false, &handle); |
+ return handle; |
+} |
+ |
+#endif |
+ |
+} // namespace base |