| Index: content/common/sandbox_policy.cc
|
| ===================================================================
|
| --- content/common/sandbox_policy.cc (revision 98433)
|
| +++ content/common/sandbox_policy.cc (working copy)
|
| @@ -287,17 +287,29 @@
|
| // TODO(cpu): Lock down the sandbox more if possible.
|
| // TODO(apatrick): Use D3D9Ex to render windowless.
|
| bool AddPolicyForGPU(CommandLine* cmd_line, sandbox::TargetPolicy* policy) {
|
| - policy->SetJobLevel(sandbox::JOB_UNPROTECTED, 0);
|
| -
|
| if (base::win::GetVersion() > base::win::VERSION_XP) {
|
| policy->SetTokenLevel(sandbox::USER_RESTRICTED_SAME_ACCESS,
|
| sandbox::USER_LIMITED);
|
| if (cmd_line->GetSwitchValueASCII(switches::kUseGL) ==
|
| - gfx::kGLImplementationDesktopName)
|
| + gfx::kGLImplementationDesktopName) {
|
| + policy->SetJobLevel(sandbox::JOB_UNPROTECTED, 0);
|
| + policy->SetIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
|
| + } else {
|
| + // UI restrictions break when we access Windows from outside our job.
|
| + // However, we don't want a proxy window in this process because it can
|
| + // introduce deadlocks where the renderer blocks on the gpu, which in
|
| + // 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.
|
| + policy->SetJobLevel(sandbox::JOB_LIMITED_USER,
|
| + JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS |
|
| + JOB_OBJECT_UILIMIT_DESKTOP |
|
| + JOB_OBJECT_UILIMIT_EXITWINDOWS |
|
| + JOB_OBJECT_UILIMIT_DISPLAYSETTINGS);
|
| policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
|
| - else
|
| - policy->SetIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
|
| + }
|
| } else {
|
| + policy->SetJobLevel(sandbox::JOB_UNPROTECTED, 0);
|
| policy->SetTokenLevel(sandbox::USER_UNPROTECTED,
|
| sandbox::USER_LIMITED);
|
| }
|
|
|