Index: content/browser/gpu/gpu_process_host.cc |
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc |
index 4a0a6e442155691ed196ea58845bf7fd05843f33..b6ead8ebb72557f130f8a34a62b4588faba8c9ce 100644 |
--- a/content/browser/gpu/gpu_process_host.cc |
+++ b/content/browser/gpu/gpu_process_host.cc |
@@ -206,7 +206,8 @@ void SendGpuProcessMessageByHostId(int host_id, IPC::Message* message) { |
class GpuSandboxedProcessLauncherDelegate |
: public SandboxedProcessLauncherDelegate { |
public: |
- explicit GpuSandboxedProcessLauncherDelegate(base::CommandLine* cmd_line) |
+ explicit GpuSandboxedProcessLauncherDelegate( |
+ const base::CommandLine& cmd_line) |
#if defined(OS_WIN) |
: cmd_line_(cmd_line) |
#endif |
@@ -217,7 +218,7 @@ class GpuSandboxedProcessLauncherDelegate |
#if defined(OS_WIN) |
bool ShouldSandbox() override { |
- bool sandbox = !cmd_line_->HasSwitch(switches::kDisableGpuSandbox); |
+ bool sandbox = !cmd_line_.HasSwitch(switches::kDisableGpuSandbox); |
if (!sandbox) { |
DVLOG(1) << "GPU sandbox is disabled"; |
} |
@@ -234,12 +235,12 @@ class GpuSandboxedProcessLauncherDelegate |
// desktop. |
bool PreSpawnTarget(sandbox::TargetPolicy* policy) override { |
if (base::win::GetVersion() > base::win::VERSION_XP) { |
- if (cmd_line_->GetSwitchValueASCII(switches::kUseGL) == |
+ if (cmd_line_.GetSwitchValueASCII(switches::kUseGL) == |
gl::kGLImplementationDesktopName) { |
// Open GL path. |
policy->SetTokenLevel(sandbox::USER_RESTRICTED_SAME_ACCESS, |
sandbox::USER_LIMITED); |
- SetJobLevel(*cmd_line_, sandbox::JOB_UNPROTECTED, 0, policy); |
+ SetJobLevel(cmd_line_, sandbox::JOB_UNPROTECTED, 0, policy); |
policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW); |
} else { |
policy->SetTokenLevel(sandbox::USER_RESTRICTED_SAME_ACCESS, |
@@ -251,7 +252,7 @@ class GpuSandboxedProcessLauncherDelegate |
// turn blocks on the browser UI thread. So, instead we forgo a window |
// message pump entirely and just add job restrictions to prevent child |
// processes. |
- SetJobLevel(*cmd_line_, |
+ SetJobLevel(cmd_line_, |
sandbox::JOB_LIMITED_USER, |
JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS | |
JOB_OBJECT_UILIMIT_DESKTOP | |
@@ -262,7 +263,7 @@ class GpuSandboxedProcessLauncherDelegate |
policy->SetIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW); |
} |
} else { |
- SetJobLevel(*cmd_line_, sandbox::JOB_UNPROTECTED, 0, policy); |
+ SetJobLevel(cmd_line_, sandbox::JOB_UNPROTECTED, 0, policy); |
policy->SetTokenLevel(sandbox::USER_UNPROTECTED, |
sandbox::USER_LIMITED); |
} |
@@ -279,7 +280,7 @@ class GpuSandboxedProcessLauncherDelegate |
// Block this DLL even if it is not loaded by the browser process. |
policy->AddDllToUnload(L"cmsetac.dll"); |
- if (cmd_line_->HasSwitch(switches::kEnableLogging)) { |
+ if (cmd_line_.HasSwitch(switches::kEnableLogging)) { |
base::string16 log_file_path = logging::GetLogFileFullPath(); |
if (!log_file_path.empty()) { |
result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_FILES, |
@@ -300,7 +301,7 @@ class GpuSandboxedProcessLauncherDelegate |
private: |
#if defined(OS_WIN) |
- base::CommandLine* cmd_line_; |
+ base::CommandLine cmd_line_; |
#endif // OS_WIN |
}; |
@@ -985,8 +986,8 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) { |
// crbug.com/447735. readlink("self/proc/exe") sometimes fails on Android |
// at startup with EACCES. As a workaround ignore this here, since the |
// executable name is actually not used or useful anyways. |
- base::CommandLine* cmd_line = |
- new base::CommandLine(base::CommandLine::NO_PROGRAM); |
+ std::unique_ptr<base::CommandLine> cmd_line = |
+ base::MakeUnique<base::CommandLine>(base::CommandLine::NO_PROGRAM); |
#else |
#if defined(OS_LINUX) |
int child_flags = gpu_launcher.empty() ? ChildProcessHost::CHILD_ALLOW_SELF : |
@@ -999,12 +1000,13 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) { |
if (exe_path.empty()) |
return false; |
- base::CommandLine* cmd_line = new base::CommandLine(exe_path); |
+ std::unique_ptr<base::CommandLine> cmd_line = |
+ base::MakeUnique<base::CommandLine>(exe_path); |
#endif |
cmd_line->AppendSwitchASCII(switches::kProcessType, switches::kGpuProcess); |
- BrowserChildProcessHostImpl::CopyFeatureAndFieldTrialFlags(cmd_line); |
+ BrowserChildProcessHostImpl::CopyFeatureAndFieldTrialFlags(cmd_line.get()); |
#if defined(OS_WIN) |
cmd_line->AppendArg(switches::kPrefetchArgumentGpu); |
@@ -1024,9 +1026,9 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) { |
switches::kGLSwitchesCopiedFromGpuProcessHostNumSwitches); |
GetContentClient()->browser()->AppendExtraCommandLineSwitches( |
- cmd_line, process_->GetData().id); |
+ cmd_line.get(), process_->GetData().id); |
- GpuDataManagerImpl::GetInstance()->AppendGpuCommandLine(cmd_line, |
+ GpuDataManagerImpl::GetInstance()->AppendGpuCommandLine(cmd_line.get(), |
gpu_preferences); |
if (cmd_line->HasSwitch(switches::kUseGL)) { |
swiftshader_rendering_ = |
@@ -1047,8 +1049,9 @@ bool GpuProcessHost::LaunchGpuProcess(gpu::GpuPreferences* gpu_preferences) { |
if (!gpu_launcher.empty()) |
cmd_line->PrependWrapper(gpu_launcher); |
- process_->Launch(new GpuSandboxedProcessLauncherDelegate(cmd_line), cmd_line, |
- true); |
+ std::unique_ptr<GpuSandboxedProcessLauncherDelegate> delegate = |
+ base::MakeUnique<GpuSandboxedProcessLauncherDelegate>(*cmd_line); |
+ process_->Launch(std::move(delegate), std::move(cmd_line), true); |
process_launched_ = true; |
UMA_HISTOGRAM_ENUMERATION("GPU.GPUProcessLifetimeEvents", |