summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/shell
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/xpconnect/shell/moz.build77
-rw-r--r--js/xpconnect/shell/xpcshell.cpp94
-rw-r--r--js/xpconnect/shell/xpcshell.exe.manifest40
-rw-r--r--js/xpconnect/shell/xpcshellMacUtils.h9
-rw-r--r--js/xpconnect/shell/xpcshellMacUtils.mm13
5 files changed, 233 insertions, 0 deletions
diff --git a/js/xpconnect/shell/moz.build b/js/xpconnect/shell/moz.build
new file mode 100644
index 0000000000..de3b050b79
--- /dev/null
+++ b/js/xpconnect/shell/moz.build
@@ -0,0 +1,77 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+GeckoProgram("xpcshell", linkage="dependent")
+
+SOURCES += [
+ "xpcshell.cpp",
+]
+
+if CONFIG["LIBFUZZER"]:
+ USE_LIBS += ["fuzzer"]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
+ SOURCES += [
+ "xpcshellMacUtils.mm",
+ ]
+
+include("/ipc/chromium/chromium-config.mozbuild")
+
+LOCAL_INCLUDES += [
+ "/toolkit/xre",
+]
+
+if CONFIG["CC_TYPE"] == "clang-cl":
+ # Always enter a Windows program through wmain, whether or not we're
+ # a console application.
+ WIN32_EXE_LDFLAGS += ["-ENTRY:wmainCRTStartup"]
+
+# DELAYLOAD_DLLS in this block ensure that the DLL blocklist initializes
+if CONFIG["OS_ARCH"] == "WINNT":
+ if CONFIG["MOZ_SANDBOX"]:
+ # For sandbox includes and the include dependencies those have
+ LOCAL_INCLUDES += [
+ "/security/sandbox/chromium",
+ "/security/sandbox/chromium-shim",
+ ]
+
+ OS_LIBS += [
+ "advapi32",
+ "user32",
+ "version",
+ "winmm",
+ ]
+
+ USE_LIBS += [
+ "sandbox_s",
+ ]
+
+ DELAYLOAD_DLLS += [
+ "winmm.dll",
+ "user32.dll",
+ ]
+
+ OS_LIBS += [
+ "ntdll",
+ ]
+
+ DELAYLOAD_DLLS += [
+ "xul.dll",
+ ]
+
+ # Don't build xpcshell.exe with CETCOMPAT, because we need to be able to
+ # only enable it for processes that are not using JIT in xul.dll.
+ LINK_FLAGS["CETCOMPAT"] = []
+
+if CONFIG["OS_TARGET"] == "Darwin":
+ OS_LIBS += [
+ "-framework Foundation",
+ ]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
+ CFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
+ CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
+ OS_LIBS += CONFIG["MOZ_GTK3_LIBS"]
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;
+}
diff --git a/js/xpconnect/shell/xpcshell.exe.manifest b/js/xpconnect/shell/xpcshell.exe.manifest
new file mode 100644
index 0000000000..1c671f14ef
--- /dev/null
+++ b/js/xpconnect/shell/xpcshell.exe.manifest
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+
+<!-- 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/. -->
+
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+ version="1.0.0.0"
+ processorArchitecture="*"
+ name="Mozilla.xpcshell"
+ type="win32"
+/>
+<description>XPConnect Shell</description>
+<dependency>
+ <dependentAssembly>
+ <assemblyIdentity
+ type="win32"
+ name="mozglue"
+ version="1.0.0.0"
+ language="*"
+ />
+ </dependentAssembly>
+</dependency>
+<ms_asmv3:trustInfo xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
+ <ms_asmv3:security>
+ <ms_asmv3:requestedPrivileges>
+ <ms_asmv3:requestedExecutionLevel level="asInvoker" uiAccess="false" />
+ </ms_asmv3:requestedPrivileges>
+ </ms_asmv3:security>
+</ms_asmv3:trustInfo>
+ <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+ <application>
+ <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
+ <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
+ <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
+ <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
+ </application>
+ </compatibility>
+</assembly>
diff --git a/js/xpconnect/shell/xpcshellMacUtils.h b/js/xpconnect/shell/xpcshellMacUtils.h
new file mode 100644
index 0000000000..61d9030a9f
--- /dev/null
+++ b/js/xpconnect/shell/xpcshellMacUtils.h
@@ -0,0 +1,9 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 sw=2 et 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/. */
+
+// Functions to setup and release the Mac memory pool
+void InitAutoreleasePool();
+void FinishAutoreleasePool();
diff --git a/js/xpconnect/shell/xpcshellMacUtils.mm b/js/xpconnect/shell/xpcshellMacUtils.mm
new file mode 100644
index 0000000000..d034895154
--- /dev/null
+++ b/js/xpconnect/shell/xpcshellMacUtils.mm
@@ -0,0 +1,13 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 sw=2 et 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/. */
+
+#include <Foundation/Foundation.h>
+
+static NSAutoreleasePool* pool = NULL;
+
+void InitAutoreleasePool() { pool = [[NSAutoreleasePool alloc] init]; }
+
+void FinishAutoreleasePool() { [pool release]; }