summaryrefslogtreecommitdiffstats
path: root/toolkit/components/processsingleton
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/processsingleton')
-rw-r--r--toolkit/components/processsingleton/CustomElementsListener.sys.mjs30
-rw-r--r--toolkit/components/processsingleton/MainProcessSingleton.sys.mjs29
-rw-r--r--toolkit/components/processsingleton/ProcessSingleton.manifest1
-rw-r--r--toolkit/components/processsingleton/components.conf15
-rw-r--r--toolkit/components/processsingleton/moz.build21
5 files changed, 96 insertions, 0 deletions
diff --git a/toolkit/components/processsingleton/CustomElementsListener.sys.mjs b/toolkit/components/processsingleton/CustomElementsListener.sys.mjs
new file mode 100644
index 0000000000..2a522d9fe3
--- /dev/null
+++ b/toolkit/components/processsingleton/CustomElementsListener.sys.mjs
@@ -0,0 +1,30 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* 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/. */
+
+// Set up Custom Elements for XUL and XHTML documents before anything else
+// happens. Anything loaded here should be considered part of core XUL functionality.
+// Any window-specific elements can be registered via <script> tags at the
+// top of individual documents.
+Services.obs.addObserver(
+ {
+ observe(doc) {
+ if (
+ doc.nodePrincipal.isSystemPrincipal &&
+ (doc.contentType == "application/xhtml+xml" ||
+ doc.contentType == "text/html") &&
+ // People shouldn't be using our built-in custom elements in
+ // system-principal about:blank anyway, and trying to support that
+ // causes responsiveness regressions. So let's not support it.
+ doc.URL != "about:blank"
+ ) {
+ Services.scriptloader.loadSubScript(
+ "chrome://global/content/customElements.js",
+ doc.ownerGlobal
+ );
+ }
+ },
+ },
+ "document-element-inserted"
+);
diff --git a/toolkit/components/processsingleton/MainProcessSingleton.sys.mjs b/toolkit/components/processsingleton/MainProcessSingleton.sys.mjs
new file mode 100644
index 0000000000..a10493f79b
--- /dev/null
+++ b/toolkit/components/processsingleton/MainProcessSingleton.sys.mjs
@@ -0,0 +1,29 @@
+/* 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/. */
+
+export function MainProcessSingleton() {}
+MainProcessSingleton.prototype = {
+ classID: Components.ID("{0636a680-45cb-11e4-916c-0800200c9a66}"),
+ QueryInterface: ChromeUtils.generateQI([
+ "nsIObserver",
+ "nsISupportsWeakReference",
+ ]),
+
+ observe(subject, topic, data) {
+ switch (topic) {
+ case "app-startup": {
+ // Imported for side-effects.
+ ChromeUtils.importESModule(
+ "resource://gre/modules/CustomElementsListener.sys.mjs"
+ );
+
+ Services.ppmm.loadProcessScript(
+ "chrome://global/content/process-content.js",
+ true
+ );
+ break;
+ }
+ }
+ },
+};
diff --git a/toolkit/components/processsingleton/ProcessSingleton.manifest b/toolkit/components/processsingleton/ProcessSingleton.manifest
new file mode 100644
index 0000000000..dffe6abcc5
--- /dev/null
+++ b/toolkit/components/processsingleton/ProcessSingleton.manifest
@@ -0,0 +1 @@
+category app-startup MainProcessSingleton @mozilla.org/main-process-singleton;1 process=main
diff --git a/toolkit/components/processsingleton/components.conf b/toolkit/components/processsingleton/components.conf
new file mode 100644
index 0000000000..45a8ba0c8d
--- /dev/null
+++ b/toolkit/components/processsingleton/components.conf
@@ -0,0 +1,15 @@
+# -*- 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/.
+
+Classes = [
+ {
+ 'cid': '{0636a680-45cb-11e4-916c-0800200c9a66}',
+ 'contract_ids': ['@mozilla.org/main-process-singleton;1'],
+ 'esModule': 'resource://gre/modules/MainProcessSingleton.sys.mjs',
+ 'constructor': 'MainProcessSingleton',
+ 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
+ },
+]
diff --git a/toolkit/components/processsingleton/moz.build b/toolkit/components/processsingleton/moz.build
new file mode 100644
index 0000000000..d710387861
--- /dev/null
+++ b/toolkit/components/processsingleton/moz.build
@@ -0,0 +1,21 @@
+# -*- 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/.
+
+with Files("**"):
+ BUG_COMPONENT = ("Toolkit", "General")
+
+EXTRA_COMPONENTS += [
+ "ProcessSingleton.manifest",
+]
+
+EXTRA_JS_MODULES += [
+ "CustomElementsListener.sys.mjs",
+ "MainProcessSingleton.sys.mjs",
+]
+
+XPCOM_MANIFESTS += [
+ "components.conf",
+]