Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(669)

Unified Diff: content/browser/utility_process_host_impl.cc

Issue 177863002: Refactor configuration of sandboxes - first steps (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix remaining nits and rebase Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/utility_process_host_impl.h ('k') | content/browser/worker_host/worker_process_host.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..e7110ce35a7b82324927d607a43e7f1b5c092273 100644
--- a/content/browser/utility_process_host_impl.cc
+++ b/content/browser/utility_process_host_impl.cc
@@ -23,34 +23,65 @@
#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)
+ : exposed_dir_(exposed_dir),
+#if defined(OS_WIN)
+ launch_elevated_(launch_elevated)
+#elif defined(OS_POSIX)
+ 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_;
-};
-#endif
+ 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:
+ base::FilePath exposed_dir_;
+
+#if defined(OS_WIN)
+ bool launch_elevated_;
+#elif defined(OS_POSIX)
+ base::EnvironmentMap env_;
+ bool no_sandbox_;
+ int ipc_fd_;
+#endif // OS_WIN
+};
UtilityMainThreadFactoryFunction g_utility_main_thread_factory = NULL;
@@ -73,9 +104,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 +255,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);
}
« no previous file with comments | « content/browser/utility_process_host_impl.h ('k') | content/browser/worker_host/worker_process_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698