Index: base/test/launcher/test_launcher.cc |
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc |
index ca60cbacea0da7ea79ffbe31f0844b902d2be630..af505a55d8dd31bafbf39cc5d776ac0577dbba47 100644 |
--- a/base/test/launcher/test_launcher.cc |
+++ b/base/test/launcher/test_launcher.cc |
@@ -48,7 +48,7 @@ namespace base { |
// Returns exit code of the process. |
int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
const LaunchOptions& options, |
- bool use_job_objects, |
+ int flags, |
base::TimeDelta timeout, |
bool* was_timeout); |
@@ -223,7 +223,7 @@ void RunCallback( |
void DoLaunchChildTestProcess( |
const CommandLine& command_line, |
base::TimeDelta timeout, |
- bool use_job_objects, |
+ int flags, |
bool redirect_stdio, |
scoped_refptr<MessageLoopProxy> message_loop_proxy, |
const TestLauncher::LaunchChildGTestProcessCallback& callback) { |
@@ -275,7 +275,7 @@ void DoLaunchChildTestProcess( |
bool was_timeout = false; |
int exit_code = LaunchChildTestProcessWithOptions( |
- command_line, options, use_job_objects, timeout, &was_timeout); |
+ command_line, options, flags, timeout, &was_timeout); |
if (redirect_stdio) { |
#if defined(OS_WIN) |
@@ -409,7 +409,7 @@ void TestLauncher::LaunchChildGTestProcess( |
const CommandLine& command_line, |
const std::string& wrapper, |
base::TimeDelta timeout, |
- bool use_job_objects, |
+ int flags, |
const LaunchChildGTestProcessCallback& callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -427,7 +427,7 @@ void TestLauncher::LaunchChildGTestProcess( |
Bind(&DoLaunchChildTestProcess, |
new_command_line, |
timeout, |
- use_job_objects, |
+ flags, |
redirect_stdio, |
MessageLoopProxy::current(), |
Bind(&TestLauncher::OnLaunchTestProcessFinished, |
@@ -1009,7 +1009,7 @@ CommandLine PrepareCommandLineForGTest(const CommandLine& command_line, |
// TODO(phajdan.jr): Move to anonymous namespace. |
int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
const LaunchOptions& options, |
- bool use_job_objects, |
+ int flags, |
base::TimeDelta timeout, |
bool* was_timeout) { |
#if defined(OS_POSIX) |
@@ -1023,19 +1023,22 @@ int LaunchChildTestProcessWithOptions(const CommandLine& command_line, |
DCHECK(!new_options.job_handle); |
win::ScopedHandle job_handle; |
- if (use_job_objects) { |
+ if (flags & TestLauncher::USE_JOB_OBJECTS) { |
job_handle.Set(CreateJobObject(NULL, NULL)); |
if (!job_handle.IsValid()) { |
LOG(ERROR) << "Could not create JobObject."; |
return -1; |
} |
+ DWORD job_flags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; |
+ |
// Allow break-away from job since sandbox and few other places rely on it |
// on Windows versions prior to Windows 8 (which supports nested jobs). |
// TODO(phajdan.jr): Do not allow break-away on Windows 8. |
- if (!SetJobObjectLimitFlags(job_handle.Get(), |
- JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | |
- JOB_OBJECT_LIMIT_BREAKAWAY_OK)) { |
+ if (flags & TestLauncher::ALLOW_BREAKAWAY_FROM_JOB) |
+ job_flags |= JOB_OBJECT_LIMIT_BREAKAWAY_OK; |
+ |
+ if (!SetJobObjectLimitFlags(job_handle.Get(), job_flags)) { |
LOG(ERROR) << "Could not SetJobObjectLimitFlags."; |
return -1; |
} |