| Index: chrome/app/chrome_dll_main.cc
|
| ===================================================================
|
| --- chrome/app/chrome_dll_main.cc (revision 30499)
|
| +++ chrome/app/chrome_dll_main.cc (working copy)
|
| @@ -18,8 +18,8 @@
|
| #elif defined(OS_POSIX)
|
| #include <locale.h>
|
| #include <signal.h>
|
| +#include <sys/stat.h>
|
| #include <sys/types.h>
|
| -#include <sys/stat.h>
|
| #include <unistd.h>
|
| #endif
|
|
|
| @@ -27,6 +27,7 @@
|
| #include <gdk/gdk.h>
|
| #include <glib.h>
|
| #include <gtk/gtk.h>
|
| +#include <stdlib.h>
|
| #include <string.h>
|
| #endif
|
|
|
| @@ -58,6 +59,7 @@
|
| #if defined(OS_LINUX)
|
| #include "base/nss_init.h"
|
| #include "chrome/browser/renderer_host/render_sandbox_host_linux.h"
|
| +#include "chrome/browser/zygote_host_linux.h"
|
| #endif
|
|
|
| #if defined(OS_MACOSX)
|
| @@ -385,7 +387,7 @@
|
|
|
| browser_pid =
|
| static_cast<base::ProcessId>(StringToInt(WideToASCII(channel_name)));
|
| - DCHECK(browser_pid != 0);
|
| + DCHECK_NE(browser_pid, 0);
|
| #else
|
| browser_pid = base::GetCurrentProcId();
|
| #endif
|
| @@ -579,9 +581,30 @@
|
| #endif
|
| } else if (process_type.empty()) {
|
| #if defined(OS_LINUX)
|
| - // Tickle the sandbox host so it forks now.
|
| - Singleton<RenderSandboxHostLinux>().get();
|
| + 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("/proc/self/exe", &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
|
| +
|
| + std::string sandbox_cmd;
|
| + if (sandbox_binary)
|
| + sandbox_cmd = sandbox_binary;
|
| +
|
| + // Tickle the sandbox host and zygote host so they fork now.
|
| + RenderSandboxHostLinux* shost = Singleton<RenderSandboxHostLinux>().get();
|
| + shost->Init(sandbox_cmd);
|
| + ZygoteHost* zhost = Singleton<ZygoteHost>().get();
|
| + zhost->Init(sandbox_cmd);
|
| +
|
| // We want to be sure to init NSPR on the main thread.
|
| base::EnsureNSPRInit();
|
|
|
| @@ -595,7 +618,7 @@
|
| // gtk_init() can change |argc| and |argv|.
|
| gtk_init(&argc, &argv);
|
| SetUpGLibLogHandler();
|
| -#endif
|
| +#endif // defined(OS_LINUX)
|
|
|
| ScopedOleInitializer ole_initializer;
|
| rv = BrowserMain(main_params);
|
|
|