Index: content/common/sandbox_win.cc |
diff --git a/content/common/sandbox_win.cc b/content/common/sandbox_win.cc |
index 88f703cef3388f99df46ec9f4a951c33c4793fc1..4e441bc7a95ea5812d2bcfe7d7ed54102dedde50 100644 |
--- a/content/common/sandbox_win.cc |
+++ b/content/common/sandbox_win.cc |
@@ -661,6 +661,7 @@ bool InitTargetServices(sandbox::TargetServices* target_services) { |
base::Process StartSandboxedProcess( |
SandboxedProcessLauncherDelegate* delegate, |
base::CommandLine* cmd_line) { |
+ DCHECK(delegate); |
const base::CommandLine& browser_command_line = |
*base::CommandLine::ForCurrentProcess(); |
std::string type_str = cmd_line->GetSwitchValueASCII(switches::kProcessType); |
@@ -680,7 +681,7 @@ base::Process StartSandboxedProcess( |
// to create separate pretetch settings for browser, renderer etc. |
cmd_line->AppendArg(base::StringPrintf("/prefetch:%d", base::Hash(type_str))); |
- if ((delegate && !delegate->ShouldSandbox()) || |
+ if ((!delegate->ShouldSandbox()) || |
browser_command_line.HasSwitch(switches::kNoSandbox) || |
cmd_line->HasSwitch(switches::kNoSandbox)) { |
base::Process process = |
@@ -717,13 +718,10 @@ base::Process StartSandboxedProcess( |
SetJobLevel(*cmd_line, sandbox::JOB_LOCKDOWN, 0, policy); |
- bool disable_default_policy = false; |
- base::FilePath exposed_dir; |
- if (delegate) |
- delegate->PreSandbox(&disable_default_policy, &exposed_dir); |
- |
- if (!disable_default_policy && !AddPolicyForSandboxedProcess(policy)) |
- return base::Process(); |
+ if (!delegate->DisableDefaultPolicy()) { |
+ if (!AddPolicyForSandboxedProcess(policy)) |
+ return base::Process(); |
+ } |
#if !defined(NACL_WIN64) |
if (type_str == switches::kRendererProcess || |
@@ -761,22 +759,6 @@ base::Process StartSandboxedProcess( |
cmd_line->AppendSwitchASCII("ignored", " --type=renderer "); |
} |
- sandbox::ResultCode result; |
- if (!exposed_dir.empty()) { |
- result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_FILES, |
- sandbox::TargetPolicy::FILES_ALLOW_ANY, |
- exposed_dir.value().c_str()); |
- if (result != sandbox::SBOX_ALL_OK) |
- return base::Process(); |
- |
- base::FilePath exposed_files = exposed_dir.AppendASCII("*"); |
- result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_FILES, |
- sandbox::TargetPolicy::FILES_ALLOW_ANY, |
- exposed_files.value().c_str()); |
- if (result != sandbox::SBOX_ALL_OK) |
- return base::Process(); |
- } |
- |
if (!AddGenericPolicy(policy)) { |
NOTREACHED(); |
return base::Process(); |
@@ -800,17 +782,13 @@ base::Process StartSandboxedProcess( |
policy->SetStderrHandle(GetStdHandle(STD_ERROR_HANDLE)); |
#endif |
- if (delegate) { |
- bool success = true; |
- delegate->PreSpawnTarget(policy, &success); |
- if (!success) |
- return base::Process(); |
- } |
+ if (!delegate->PreSpawnTarget(policy)) |
+ return base::Process(); |
TRACE_EVENT_BEGIN0("startup", "StartProcessWithAccess::LAUNCHPROCESS"); |
PROCESS_INFORMATION temp_process_info = {}; |
- result = g_broker_services->SpawnTarget( |
+ sandbox::ResultCode result = g_broker_services->SpawnTarget( |
cmd_line->GetProgram().value().c_str(), |
cmd_line->GetCommandLineString().c_str(), policy, &temp_process_info); |
DWORD last_error = ::GetLastError(); |
@@ -833,13 +811,10 @@ base::Process StartSandboxedProcess( |
} else |
DLOG(ERROR) << "Failed to launch process. Error: " << result; |
- policy->Release(); |
return base::Process(); |
} |
- policy->Release(); |
- if (delegate) |
- delegate->PostSpawnTarget(target.process_handle()); |
+ delegate->PostSpawnTarget(target.process_handle()); |
CHECK(ResumeThread(target.thread_handle()) != -1); |
return base::Process(target.TakeProcessHandle()); |
@@ -855,7 +830,6 @@ bool BrokerDuplicateHandle(HANDLE source_handle, |
return !!::DuplicateHandle(::GetCurrentProcess(), source_handle, |
::GetCurrentProcess(), target_handle, |
desired_access, FALSE, options); |
- |
} |
// Try the broker next |