Index: content/browser/browser_main_loop.cc |
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc |
index 4194aa859c5d79ef18468597fc3f05492a1f4eed..4a2c299c2da2e933aca13f2ba9436c481f6dd597 100644 |
--- a/content/browser/browser_main_loop.cc |
+++ b/content/browser/browser_main_loop.cc |
@@ -7,12 +7,10 @@ |
#include "base/bind.h" |
#include "base/command_line.h" |
#include "base/debug/trace_event.h" |
-#include "base/file_util.h" |
#include "base/logging.h" |
#include "base/message_loop/message_loop.h" |
#include "base/metrics/field_trial.h" |
#include "base/metrics/histogram.h" |
-#include "base/path_service.h" |
#include "base/pending_task.h" |
#include "base/power_monitor/power_monitor.h" |
#include "base/power_monitor/power_monitor_device_source.h" |
@@ -22,6 +20,7 @@ |
#include "base/system_monitor/system_monitor.h" |
#include "base/threading/thread_restrictions.h" |
#include "base/timer/hi_res_timer_manager.h" |
+#include "base/debug/trace_event_system_stats_monitor.h" |
#include "content/browser/browser_thread_impl.h" |
#include "content/browser/device_orientation/device_motion_service.h" |
#include "content/browser/download/save_file_manager.h" |
@@ -123,54 +122,48 @@ void SetupSandbox(const CommandLine& parsed_command_line) { |
TRACE_EVENT0("startup", "SetupSandbox"); |
// TODO(evanm): move this into SandboxWrapper; I'm just trying to move this |
// code en masse out of chrome_main for now. |
- base::FilePath sandbox_binary; |
- bool env_chrome_devel_sandbox_set = false; |
+ const char* sandbox_binary = NULL; |
struct stat st; |
+ // In Chromium branded builds, developers can set an environment variable to |
+ // use the development sandbox. See |
+ // http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment |
+ if (stat(base::kProcSelfExe, &st) == 0 && st.st_uid == getuid()) |
+ sandbox_binary = getenv("CHROME_DEVEL_SANDBOX"); |
+ |
+#if defined(LINUX_SANDBOX_PATH) |
+ if (!sandbox_binary) |
+ sandbox_binary = LINUX_SANDBOX_PATH; |
+#endif |
+ |
const bool want_setuid_sandbox = |
!parsed_command_line.HasSwitch(switches::kNoSandbox) && |
!parsed_command_line.HasSwitch(switches::kDisableSetuidSandbox); |
if (want_setuid_sandbox) { |
- base::FilePath exe_dir; |
- if (PathService::Get(base::DIR_EXE, &exe_dir)) { |
- base::FilePath sandbox_candidate = exe_dir.AppendASCII("chrome-sandbox"); |
- if (base::PathExists(sandbox_candidate)) |
- sandbox_binary = sandbox_candidate; |
- } |
- |
- // In user-managed builds, including development builds, an environment |
- // variable is required to enable the sandbox. See |
- // http://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment |
- if (sandbox_binary.empty() && |
- stat(base::kProcSelfExe, &st) == 0 && st.st_uid == getuid()) { |
- const char* devel_sandbox_path = getenv("CHROME_DEVEL_SANDBOX"); |
- if (devel_sandbox_path) { |
- env_chrome_devel_sandbox_set = true; |
- sandbox_binary = base::FilePath(devel_sandbox_path); |
- } |
- } |
- |
static const char no_suid_error[] = "Running without the SUID sandbox! See " |
"https://code.google.com/p/chromium/wiki/LinuxSUIDSandboxDevelopment " |
"for more information on developing with the sandbox on."; |
- if (sandbox_binary.empty()) { |
- if (!env_chrome_devel_sandbox_set) { |
- // This needs to be fatal. Talk to security@chromium.org if you feel |
- // otherwise. |
- LOG(FATAL) << no_suid_error; |
- } |
- |
- // TODO(jln): an empty CHROME_DEVEL_SANDBOX environment variable (as |
- // opposed to a non existing one) is not fatal yet. This is needed |
- // because of existing bots and scripts. Fix it (crbug.com/245376). |
- LOG(ERROR) << no_suid_error; |
+ if (!sandbox_binary) { |
+ // This needs to be fatal. Talk to security@chromium.org if you feel |
+ // otherwise. |
+ LOG(FATAL) << no_suid_error; |
} |
+ // TODO(jln): an empty CHROME_DEVEL_SANDBOX environment variable (as |
+ // opposed to a non existing one) is not fatal yet. This is needed because |
+ // of existing bots and scripts. Fix it (crbug.com/245376). |
+ if (sandbox_binary && *sandbox_binary == '\0') |
+ LOG(ERROR) << no_suid_error; |
+ } |
+ |
+ std::string sandbox_cmd; |
+ if (want_setuid_sandbox && sandbox_binary) { |
+ sandbox_cmd = sandbox_binary; |
} |
// Tickle the sandbox host and zygote host so they fork now. |
- RenderSandboxHostLinux::GetInstance()->Init(sandbox_binary.value()); |
- ZygoteHostImpl::GetInstance()->Init(sandbox_binary.value()); |
+ RenderSandboxHostLinux::GetInstance()->Init(sandbox_cmd); |
+ ZygoteHostImpl::GetInstance()->Init(sandbox_cmd); |
} |
#endif |
@@ -489,6 +482,8 @@ void BrowserMainLoop::MainMessageLoopStart() { |
base::MessageLoop::current()->AddTaskObserver(memory_observer_.get()); |
} |
+ system_stats_monitor_.reset(new base::debug::TraceEventSystemStatsMonitor( |
+ base::MessageLoop::current()->message_loop_proxy())); |
#if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED) |
trace_memory_controller_.reset(new base::debug::TraceMemoryController( |
base::MessageLoop::current()->message_loop_proxy(), |
@@ -694,6 +689,7 @@ void BrowserMainLoop::ShutdownThreadsAndCleanUp() { |
parts_->PostMainMessageLoopRun(); |
trace_memory_controller_.reset(); |
+ system_stats_monitor_.reset(); |
#if !defined(OS_IOS) |
// Destroying the GpuProcessHostUIShims on the UI thread posts a task to |