Chromium Code Reviews| 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 f1a3171d0d0251f382fa25dcf61a6c347f8c208d..e321393d6b982182a9ab8a475a7f96d64b037b2d 100644 |
| --- a/content/browser/ppapi_plugin_process_host.cc |
| +++ b/content/browser/ppapi_plugin_process_host.cc |
| @@ -21,6 +21,7 @@ |
| #include "content/public/common/content_switches.h" |
| #include "content/public/common/pepper_plugin_info.h" |
| #include "content/public/common/process_type.h" |
| +#include "content/public/common/sandboxed_process_launcher_delegate.h" |
| #include "ipc/ipc_switches.h" |
| #include "net/base/network_change_notifier.h" |
| #include "ppapi/proxy/ppapi_messages.h" |
| @@ -28,7 +29,6 @@ |
| #if defined(OS_WIN) |
| #include "content/common/sandbox_win.h" |
| -#include "content/public/common/sandboxed_process_launcher_delegate.h" |
| #include "sandbox/win/src/sandbox_policy.h" |
| #endif |
| @@ -39,7 +39,9 @@ namespace content { |
| class PpapiPluginSandboxedProcessLauncherDelegate |
| : public content::SandboxedProcessLauncherDelegate { |
| public: |
| - explicit PpapiPluginSandboxedProcessLauncherDelegate(bool is_broker) |
| + PpapiPluginSandboxedProcessLauncherDelegate( bool is_broker, |
| + const PepperPluginInfo& /*info*/, |
| + ChildProcessHost* /*host*/) |
| : is_broker_(is_broker) {} |
| virtual ~PpapiPluginSandboxedProcessLauncherDelegate() {} |
| @@ -66,6 +68,37 @@ class PpapiPluginSandboxedProcessLauncherDelegate |
| DISALLOW_COPY_AND_ASSIGN(PpapiPluginSandboxedProcessLauncherDelegate); |
| }; |
| + |
| +#elif defined(OS_POSIX) |
| +// NOTE: changes to this class need to be reviewed by the security team. |
|
jam
2014/02/26 19:47:52
ditto
aberent
2014/02/28 08:51:07
Done.
|
| +class PpapiPluginSandboxedProcessLauncherDelegate |
| + : public content::SandboxedProcessLauncherDelegate { |
| + public: |
| + PpapiPluginSandboxedProcessLauncherDelegate(bool is_broker, |
| + const PepperPluginInfo& info, |
| + ChildProcessHost* host) |
| + : is_broker_(is_broker), |
| + info_(info), |
| + ipc_fd_(host->TakeClientFileDescriptor()) {} |
| + |
| + virtual ~PpapiPluginSandboxedProcessLauncherDelegate() {} |
| + |
| + virtual bool UseZygote() OVERRIDE { |
| + const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess(); |
| + CommandLine::StringType plugin_launcher = browser_command_line |
| + .GetSwitchValueNative(switches::kPpapiPluginLauncher); |
| + return !is_broker_ && plugin_launcher.empty() && info_.is_sandboxed; |
| + } |
| + virtual int IpcFd() OVERRIDE { |
| + return ipc_fd_; |
| + } |
| + private: |
| + bool is_broker_; |
| + const PepperPluginInfo& info_; |
| + int ipc_fd_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(PpapiPluginSandboxedProcessLauncherDelegate); |
| +}; |
| #endif // OS_WIN |
| class PpapiPluginProcessHost::PluginNetworkObserver |
| @@ -333,18 +366,13 @@ bool PpapiPluginProcessHost::Init(const PepperPluginInfo& info) { |
| // plugin launcher means we need to use another process instead of just |
| // forking the zygote. |
| #if defined(OS_POSIX) |
| - bool use_zygote = !is_broker_ && plugin_launcher.empty() && info.is_sandboxed; |
| if (!info.is_sandboxed) |
| cmd_line->AppendSwitchASCII(switches::kNoSandbox, std::string()); |
| #endif // OS_POSIX |
| process_->Launch( |
| -#if defined(OS_WIN) |
| - new PpapiPluginSandboxedProcessLauncherDelegate(is_broker_), |
| - false, |
| -#elif defined(OS_POSIX) |
| - use_zygote, |
| - base::EnvironmentMap(), |
| -#endif |
| + new PpapiPluginSandboxedProcessLauncherDelegate(is_broker_, |
| + info, |
| + process_->GetHost()), |
| cmd_line); |
| return true; |
| } |