Chromium Code Reviews| Index: content/browser/utility_process_host_impl.cc |
| diff --git a/content/browser/utility_process_host_impl.cc b/content/browser/utility_process_host_impl.cc |
| index 013c62abc7fb62ef67b4232b887dec57be23d9d2..fca883472bc14b4ac5ab676bc3d03ed4838a8039 100644 |
| --- a/content/browser/utility_process_host_impl.cc |
| +++ b/content/browser/utility_process_host_impl.cc |
| @@ -23,34 +23,68 @@ |
| #include "content/public/browser/utility_process_host_client.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/common/process_type.h" |
| +#include "content/public/common/sandboxed_process_launcher_delegate.h" |
| #include "ipc/ipc_switches.h" |
| #include "ui/base/ui_base_switches.h" |
| -#if defined(OS_WIN) |
| -#include "content/public/common/sandboxed_process_launcher_delegate.h" |
| -#endif |
| - |
| namespace content { |
| -#if defined(OS_WIN) |
| // NOTE: changes to this class need to be reviewed by the security team. |
| class UtilitySandboxedProcessLauncherDelegate |
| : public SandboxedProcessLauncherDelegate { |
| public: |
| - explicit UtilitySandboxedProcessLauncherDelegate( |
| - const base::FilePath& exposed_dir) : exposed_dir_(exposed_dir) {} |
| + UtilitySandboxedProcessLauncherDelegate(const base::FilePath& exposed_dir, |
| + bool launch_elevated, |
| + bool no_sandbox, |
| + base::EnvironmentMap& env, |
| + ChildProcessHost* host) |
| +#if defined(OS_WIN) |
| + : launch_elevated_(launch_elevated), |
| + exposed_dir_(exposed_dir) {} |
| +#elif defined(OS_POSIX) |
| + : exposed_dir_(exposed_dir), |
|
jam
2014/02/28 18:07:43
nit: bring out the shared part out of the ifdefs
aberent
2014/02/28 21:17:28
Done.
|
| + env_(env), |
| + no_sandbox_(no_sandbox), |
| + ipc_fd_(host->TakeClientFileDescriptor()) {} |
| +#endif // OS_WIN |
| + |
| virtual ~UtilitySandboxedProcessLauncherDelegate() {} |
| +#if defined(OS_WIN) |
| + virtual bool ShouldLaunchElevated() OVERRIDE { |
| + return launch_elevated_; |
| + } |
| virtual void PreSandbox(bool* disable_default_policy, |
| base::FilePath* exposed_dir) OVERRIDE { |
| *exposed_dir = exposed_dir_; |
| } |
| +#elif defined(OS_POSIX) |
| -private: |
| - base::FilePath exposed_dir_; |
| -}; |
| + virtual bool ShouldUseZygote() OVERRIDE { |
| + return !no_sandbox_ && exposed_dir_.empty(); |
| + } |
| + virtual base::EnvironmentMap GetEnvironment() OVERRIDE { |
| + return env_; |
| + } |
| + virtual int GetIpcFd() OVERRIDE { |
| + return ipc_fd_; |
| + } |
| +#endif // OS_WIN |
| + |
| + private: |
| + |
| +#if defined(OS_WIN) |
| + bool launch_elevated_; |
| #endif |
| + base::FilePath exposed_dir_; |
| + |
| +#if defined(OS_POSIX) |
| + base::EnvironmentMap env_; |
| + bool no_sandbox_; |
| + int ipc_fd_; |
| +#endif // OS_WIN |
| +}; |
| UtilityMainThreadFactoryFunction g_utility_main_thread_factory = NULL; |
| @@ -73,9 +107,7 @@ UtilityProcessHostImpl::UtilityProcessHostImpl( |
| is_batch_mode_(false), |
| is_mdns_enabled_(false), |
| no_sandbox_(false), |
| -#if defined(OS_WIN) |
| run_elevated_(false), |
| -#endif |
| #if defined(OS_LINUX) |
| child_flags_(ChildProcessHost::CHILD_ALLOW_SELF), |
| #else |
| @@ -226,22 +258,11 @@ bool UtilityProcessHostImpl::StartProcess() { |
| cmd_line->AppendSwitch(switches::kUtilityProcessRunningElevated); |
| #endif |
| - bool use_zygote = false; |
| - |
| -#if defined(OS_LINUX) |
| - // The Linux sandbox does not support granting access to a single directory, |
| - // so we need to bypass the zygote in that case. |
| - use_zygote = !no_sandbox_ && exposed_dir_.empty(); |
| -#endif |
| - |
| process_->Launch( |
| -#if defined(OS_WIN) |
| - new UtilitySandboxedProcessLauncherDelegate(exposed_dir_), |
| - run_elevated_, |
| -#elif defined(OS_POSIX) |
| - use_zygote, |
| - env_, |
| -#endif |
| + new UtilitySandboxedProcessLauncherDelegate(exposed_dir_, |
| + run_elevated_, |
| + no_sandbox_, env_, |
| + process_->GetHost()), |
| cmd_line); |
| } |