Index: sandbox/win/src/broker_services.cc |
diff --git a/sandbox/win/src/broker_services.cc b/sandbox/win/src/broker_services.cc |
index 5e6494fd1f6bd89cc3982a35741130d84f98b301..57f197f26ee71d84a73f255f5faf30d587ec4722 100644 |
--- a/sandbox/win/src/broker_services.cc |
+++ b/sandbox/win/src/broker_services.cc |
@@ -5,6 +5,7 @@ |
#include "sandbox/win/src/broker_services.h" |
#include <AclAPI.h> |
+#include <vector> |
#include "base/logging.h" |
#include "base/macros.h" |
@@ -17,8 +18,8 @@ |
#include "base/win/windows_version.h" |
#include "sandbox/win/src/app_container.h" |
#include "sandbox/win/src/process_mitigations.h" |
-#include "sandbox/win/src/sandbox_policy_base.h" |
#include "sandbox/win/src/sandbox.h" |
+#include "sandbox/win/src/sandbox_policy.h" |
#include "sandbox/win/src/target_process.h" |
#include "sandbox/win/src/win2k_threadpool.h" |
#include "sandbox/win/src/win_utils.h" |
@@ -57,7 +58,7 @@ enum { |
// Helper structure that allows the Broker to associate a job notification |
// with a job object and with a policy. |
struct JobTracker { |
- JobTracker(base::win::ScopedHandle job, sandbox::PolicyBase* policy) |
+ JobTracker(base::win::ScopedHandle job, sandbox::TargetPolicy* policy) |
: job(job.Pass()), policy(policy) { |
} |
~JobTracker() { |
@@ -69,7 +70,7 @@ struct JobTracker { |
void FreeResources(); |
base::win::ScopedHandle job; |
- sandbox::PolicyBase* policy; |
+ sandbox::TargetPolicy* policy; |
}; |
void JobTracker::FreeResources() { |
@@ -174,9 +175,7 @@ BrokerServicesBase::~BrokerServicesBase() { |
} |
TargetPolicy* BrokerServicesBase::CreatePolicy() { |
- // If you change the type of the object being created here you must also |
- // change the downcast to it in SpawnTarget(). |
- return new PolicyBase; |
+ return new TargetPolicy; |
} |
// The worker thread stays in a loop waiting for asynchronous notifications |
@@ -304,10 +303,7 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
AutoLock lock(&lock_); |
- // This downcast is safe as long as we control CreatePolicy() |
- PolicyBase* policy_base = static_cast<PolicyBase*>(policy); |
- |
- if (policy_base->GetAppContainer() && policy_base->GetLowBoxSid()) |
+ if (policy->GetAppContainer() && policy->GetLowBoxSid()) |
return SBOX_ERROR_BAD_PARAMS; |
// Construct the tokens and the job object that we are going to associate |
@@ -317,13 +313,12 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
base::win::ScopedHandle lowbox_token; |
ResultCode result = SBOX_ALL_OK; |
- result = |
- policy_base->MakeTokens(&initial_token, &lockdown_token, &lowbox_token); |
+ result = policy->MakeTokens(&initial_token, &lockdown_token, &lowbox_token); |
if (SBOX_ALL_OK != result) |
return result; |
base::win::ScopedHandle job; |
- result = policy_base->MakeJobObject(&job); |
+ result = policy->MakeJobObject(&job); |
if (SBOX_ALL_OK != result) |
return result; |
@@ -337,7 +332,7 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
std::vector<HANDLE> inherited_handle_list; |
- base::string16 desktop = policy_base->GetAlternateDesktop(); |
+ base::string16 desktop = policy->GetAlternateDesktop(); |
if (!desktop.empty()) { |
startup_info.startup_info()->lpDesktop = |
const_cast<wchar_t*>(desktop.c_str()); |
@@ -347,8 +342,7 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
int attribute_count = 0; |
- const AppContainerAttributes* app_container = |
- policy_base->GetAppContainer(); |
+ const AppContainerAttributes* app_container = policy->GetAppContainer(); |
if (app_container) |
++attribute_count; |
@@ -358,8 +352,8 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
if (mitigations) |
++attribute_count; |
- HANDLE stdout_handle = policy_base->GetStdoutHandle(); |
- HANDLE stderr_handle = policy_base->GetStderrHandle(); |
+ HANDLE stdout_handle = policy->GetStdoutHandle(); |
+ HANDLE stderr_handle = policy->GetStderrHandle(); |
if (stdout_handle != INVALID_HANDLE_VALUE) |
inherited_handle_list.push_back(stdout_handle); |
@@ -368,7 +362,7 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
if (stderr_handle != stdout_handle && stderr_handle != INVALID_HANDLE_VALUE) |
inherited_handle_list.push_back(stderr_handle); |
- const HandleList& policy_handle_list = policy_base->GetHandlesBeingShared(); |
+ const HandleList& policy_handle_list = policy->GetHandlesBeingShared(); |
for (auto handle : policy_handle_list) |
inherited_handle_list.push_back(handle->Get()); |
@@ -425,7 +419,7 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
DWORD win_result = target->Create(exe_path, command_line, inherit_handles, |
startup_info, &process_info); |
- policy_base->ClearSharedHandles(); |
+ policy->ClearSharedHandles(); |
if (ERROR_SUCCESS != win_result) { |
SpawnCleanup(target, win_result); |
@@ -433,15 +427,15 @@ ResultCode BrokerServicesBase::SpawnTarget(const wchar_t* exe_path, |
} |
// Now the policy is the owner of the target. |
- if (!policy_base->AddTarget(target)) { |
+ if (!policy->AddTarget(target)) { |
return SpawnCleanup(target, 0); |
} |
// We are going to keep a pointer to the policy because we'll call it when |
// the job object generates notifications using the completion port. |
- policy_base->AddRef(); |
+ policy->AddRef(); |
if (job.IsValid()) { |
- scoped_ptr<JobTracker> tracker(new JobTracker(job.Pass(), policy_base)); |
+ scoped_ptr<JobTracker> tracker(new JobTracker(job.Pass(), policy)); |
// There is no obvious recovery after failure here. Previous version with |
// SpawnCleanup() caused deletion of TargetProcess twice. crbug.com/480639 |