| Index: sandbox/tests/common/controller.cc
|
| ===================================================================
|
| --- sandbox/tests/common/controller.cc (revision 131782)
|
| +++ sandbox/tests/common/controller.cc (working copy)
|
| @@ -6,6 +6,8 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/process.h"
|
| +#include "base/process_util.h"
|
| #include "base/sys_string_conversions.h"
|
| #include "base/win/windows_version.h"
|
| #include "sandbox/src/sandbox_factory.h"
|
| @@ -89,12 +91,14 @@
|
|
|
| TestRunner::TestRunner(JobLevel job_level, TokenLevel startup_token,
|
| TokenLevel main_token)
|
| - : is_init_(false), is_async_(false), target_process_id_(0) {
|
| + : is_init_(false), is_async_(false), no_sandbox_(false),
|
| + target_process_id_(0) {
|
| Init(job_level, startup_token, main_token);
|
| }
|
|
|
| TestRunner::TestRunner()
|
| - : is_init_(false), is_async_(false), target_process_id_(0) {
|
| + : is_init_(false), is_async_(false), no_sandbox_(false),
|
| + target_process_id_(0) {
|
| Init(JOB_LOCKDOWN, USER_RESTRICTED_SAME_ACCESS, USER_LOCKDOWN);
|
| }
|
|
|
| @@ -209,11 +213,21 @@
|
|
|
| std::wstring arguments(L"\"");
|
| arguments += prog_name;
|
| - arguments += L"\" -child ";
|
| + arguments += L"\" -child";
|
| + arguments += no_sandbox_ ? L"-no-sandbox " : L" ";
|
| arguments += command;
|
|
|
| - result = broker_->SpawnTarget(prog_name, arguments.c_str(), policy_,
|
| - &target);
|
| + if (no_sandbox_) {
|
| + STARTUPINFO startup_info = {sizeof(STARTUPINFO)};
|
| + if (!::CreateProcessW(prog_name, &arguments[0], NULL, NULL, FALSE, 0,
|
| + NULL, NULL, &startup_info, &target)) {
|
| + return SBOX_ERROR_GENERIC;
|
| + }
|
| + broker_->AddTargetPeer(target.hProcess);
|
| + } else {
|
| + result = broker_->SpawnTarget(prog_name, arguments.c_str(), policy_,
|
| + &target);
|
| + }
|
|
|
| if (SBOX_ALL_OK != result)
|
| return SBOX_TEST_FAILED_TO_RUN_TEST;
|
| @@ -304,18 +318,20 @@
|
| command(argc - 4, argv + 4);
|
|
|
| TargetServices* target = SandboxFactory::GetTargetServices();
|
| - if (!target)
|
| - return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
|
| + if (target) {
|
| + if (SBOX_ALL_OK != target->Init())
|
| + return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
|
|
|
| - if (SBOX_ALL_OK != target->Init())
|
| + if (BEFORE_REVERT == state)
|
| + return command(argc - 4, argv + 4);
|
| + else if (EVERY_STATE == state)
|
| + command(argc - 4, argv + 4);
|
| +
|
| + target->LowerToken();
|
| + } else if (0 != _wcsicmp(argv[1], L"-child-no-sandbox")) {
|
| return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
|
| + }
|
|
|
| - if (BEFORE_REVERT == state)
|
| - return command(argc - 4, argv + 4);
|
| - else if (EVERY_STATE == state)
|
| - command(argc - 4, argv + 4);
|
| -
|
| - target->LowerToken();
|
| return command(argc - 4, argv + 4);
|
| }
|
|
|
|
|