| 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
|
|
|