| Index: content/browser/ppapi_plugin_process_host.cc
|
| diff --git a/content/browser/ppapi_plugin_process_host.cc b/content/browser/ppapi_plugin_process_host.cc
|
| index be819d6c1ae2aa73f4212cff9b54b6d728ea1668..3dd06594bbe1f06a1058c4d81f114f2f87d301fb 100644
|
| --- a/content/browser/ppapi_plugin_process_host.cc
|
| +++ b/content/browser/ppapi_plugin_process_host.cc
|
| @@ -16,6 +16,7 @@
|
| #include "content/browser/renderer_host/render_message_filter.h"
|
| #include "content/common/child_process_host_impl.h"
|
| #include "content/common/child_process_messages.h"
|
| +#include "content/common/content_switches_internal.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| #include "content/public/common/content_constants.h"
|
| #include "content/public/common/content_switches.h"
|
| @@ -30,6 +31,7 @@
|
|
|
| #if defined(OS_WIN)
|
| #include "content/common/sandbox_win.h"
|
| +#include "sandbox/win/src/process_mitigations.h"
|
| #include "sandbox/win/src/sandbox_policy.h"
|
| #endif
|
|
|
| @@ -42,9 +44,8 @@ class PpapiPluginSandboxedProcessLauncherDelegate
|
| PpapiPluginSandboxedProcessLauncherDelegate(bool is_broker,
|
| const PepperPluginInfo& info,
|
| ChildProcessHost* host)
|
| - :
|
| + : info_(info),
|
| #if defined(OS_POSIX)
|
| - info_(info),
|
| ipc_fd_(host->TakeClientFileDescriptor()),
|
| #endif // OS_POSIX
|
| is_broker_(is_broker) {}
|
| @@ -59,19 +60,31 @@ class PpapiPluginSandboxedProcessLauncherDelegate
|
| void PreSpawnTarget(sandbox::TargetPolicy* policy, bool* success) override {
|
| if (is_broker_)
|
| return;
|
| - // The Pepper process as locked-down as a renderer execpt that it can
|
| - // create the server side of chrome pipes.
|
| + *success = false;
|
| + // The Pepper process is as locked-down as a renderer except that it can
|
| + // create the server side of Chrome pipes.
|
| sandbox::ResultCode result;
|
| result = policy->AddRule(sandbox::TargetPolicy::SUBSYS_NAMED_PIPES,
|
| sandbox::TargetPolicy::NAMEDPIPES_ALLOW_ANY,
|
| L"\\\\.\\pipe\\chrome.*");
|
| - *success = (result == sandbox::SBOX_ALL_OK);
|
| -
|
| + if (result != sandbox::SBOX_ALL_OK)
|
| + return;
|
| +#if !defined(NACL_WIN64)
|
| + for (const auto& mime_type : info_.mime_types) {
|
| + if (IsWin32kLockdownEnabledForMimeType(mime_type.mime_type)) {
|
| + if (!AddWin32kLockdownPolicy(policy))
|
| + return;
|
| + break;
|
| + }
|
| + }
|
| +#endif
|
| const base::string16& sid =
|
| GetContentClient()->browser()->GetAppContainerSidForSandboxType(
|
| GetSandboxType());
|
| if (!sid.empty())
|
| AddAppContainerPolicy(policy, sid.c_str());
|
| +
|
| + *success = true;
|
| }
|
|
|
| #elif defined(OS_POSIX)
|
| @@ -90,8 +103,8 @@ class PpapiPluginSandboxedProcessLauncherDelegate
|
| }
|
|
|
| private:
|
| -#if defined(OS_POSIX)
|
| const PepperPluginInfo& info_;
|
| +#if defined(OS_POSIX)
|
| base::ScopedFD ipc_fd_;
|
| #endif // OS_POSIX
|
| bool is_broker_;
|
|
|