diff options
Diffstat (limited to 'js/xpconnect/shell/xpcshell.cpp')
-rw-r--r-- | js/xpconnect/shell/xpcshell.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/js/xpconnect/shell/xpcshell.cpp b/js/xpconnect/shell/xpcshell.cpp new file mode 100644 index 0000000000..5e44db3b34 --- /dev/null +++ b/js/xpconnect/shell/xpcshell.cpp @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* XPConnect JavaScript interactive shell. */ + +#include <stdio.h> + +#include "mozilla/Bootstrap.h" +#include "XREShellData.h" + +#ifdef XP_MACOSX +# include "xpcshellMacUtils.h" +#endif +#ifdef XP_WIN +# include "mozilla/WindowsDllBlocklist.h" + +# include <windows.h> +# include <shlobj.h> + +// we want a wmain entry point +# define XRE_WANT_ENVIRON +# include "nsWindowsWMain.cpp" +# ifdef MOZ_SANDBOX +# include "mozilla/sandboxing/SandboxInitialization.h" +# endif +#endif + +#ifdef MOZ_WIDGET_GTK +# include <gtk/gtk.h> +#endif + +#include "BaseProfiler.h" + +#ifdef LIBFUZZER +# include "FuzzerDefs.h" +#endif + +int main(int argc, char** argv, char** envp) { +#ifdef MOZ_WIDGET_GTK + // A default display may or may not be required for xpcshell tests, and so + // is not created here. Instead we set the command line args, which is a + // fairly cheap operation. + gtk_parse_args(&argc, &argv); +#endif + +#ifdef XP_MACOSX + InitAutoreleasePool(); +#endif + + // unbuffer stdout so that output is in the correct order; note that stderr + // is unbuffered by default + setbuf(stdout, nullptr); + +#ifdef HAS_DLL_BLOCKLIST + DllBlocklist_Initialize(); +#endif + + char aLocal; + mozilla::baseprofiler::profiler_init(&aLocal); + + XREShellData shellData; +#if defined(XP_WIN) && defined(MOZ_SANDBOX) + shellData.sandboxBrokerServices = + mozilla::sandboxing::GetInitializedBrokerServices(); +#endif + + auto bootstrapResult = mozilla::GetBootstrap(); + if (bootstrapResult.isErr()) { + return 2; + } + + mozilla::Bootstrap::UniquePtr bootstrap = bootstrapResult.unwrap(); + +#ifdef LIBFUZZER + shellData.fuzzerDriver = fuzzer::FuzzerDriver; +#endif + + int result = bootstrap->XRE_XPCShellMain(argc, argv, envp, &shellData); + + mozilla::baseprofiler::profiler_shutdown(); + +#if defined(DEBUG) && defined(HAS_DLL_BLOCKLIST) + DllBlocklist_Shutdown(); +#endif + +#ifdef XP_MACOSX + FinishAutoreleasePool(); +#endif + + return result; +} |