| Index: content/utility/utility_main.cc
|
| diff --git a/content/utility/utility_main.cc b/content/utility/utility_main.cc
|
| index c93c1eca5366ae0c3c53f75af3de4a88593262fc..29fd01b2938c8670f721f01e6899963f25a3dcd5 100644
|
| --- a/content/utility/utility_main.cc
|
| +++ b/content/utility/utility_main.cc
|
| @@ -17,6 +17,12 @@
|
| #include "sandbox/win/src/sandbox.h"
|
| #endif
|
|
|
| +#if defined(TOOLKIT_GTK)
|
| +#include <gtk/gtk.h>
|
| +
|
| +#include "ui/gfx/gtk_util.h"
|
| +#endif
|
| +
|
| namespace content {
|
|
|
| // Mainline routine for running as the utility process.
|
| @@ -26,10 +32,40 @@ int UtilityMain(const MainFunctionParams& parameters) {
|
| base::PlatformThread::SetName("CrUtilityMain");
|
|
|
| #if defined(OS_LINUX)
|
| - // Initialize the sandbox before any thread is created.
|
| + // Initializes the sandbox before any threads are created.
|
| + // TODO(jorgelo): move this after GTK initialization when we enable a strict
|
| + // Seccomp-BPF policy.
|
| LinuxSandbox::InitializeSandbox();
|
| #endif
|
|
|
| +#if defined(OS_POSIX)
|
| + // The utility process is used to load plugins (see OnLoadPlugins() in
|
| + // utility_thread_impl.cc). Some plugins expect the browser to have loaded
|
| + // GLib/GTK.
|
| + // Due to bugs in GLib we need to initialize GLib/GTK before we start threads,
|
| + // see crbug.com/309093.
|
| +
|
| +#if defined(TOOLKIT_GTK)
|
| + bool is_sandboxed = false;
|
| +
|
| +#if defined(OS_LINUX)
|
| + // On Linux, we only initialize GLib/GTK if we're not sandboxed.
|
| + is_sandboxed = !parameters.command_line.HasSwitch(switches::kNoSandbox);
|
| +#endif
|
| +
|
| + if (!is_sandboxed) {
|
| + // g_thread_init() is deprecated since glib 2.31.0, please see release note:
|
| + // http://mail.gnome.org/archives/gnome-announce-list/2011-October/msg00041.html
|
| +#if !(GLIB_CHECK_VERSION(2, 31, 0))
|
| + if (!g_thread_get_initialized()) {
|
| + g_thread_init(NULL);
|
| + }
|
| +#endif
|
| + gfx::GtkInitFromCommandLine(*CommandLine::ForCurrentProcess());
|
| + }
|
| +#endif
|
| +#endif
|
| +
|
| ChildProcess utility_process;
|
| utility_process.set_main_thread(new UtilityThreadImpl());
|
|
|
|
|