summaryrefslogtreecommitdiffstats
path: root/testing/specialpowers/api.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/specialpowers/api.js')
-rw-r--r--testing/specialpowers/api.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/testing/specialpowers/api.js b/testing/specialpowers/api.js
new file mode 100644
index 0000000000..9644b86663
--- /dev/null
+++ b/testing/specialpowers/api.js
@@ -0,0 +1,56 @@
+/* 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/. */
+
+/* globals ExtensionAPI */
+
+const { XPCOMUtils } = ChromeUtils.import(
+ "resource://gre/modules/XPCOMUtils.jsm"
+);
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const { FileUtils } = ChromeUtils.import(
+ "resource://gre/modules/FileUtils.jsm"
+);
+
+XPCOMUtils.defineLazyServiceGetter(
+ this,
+ "resProto",
+ "@mozilla.org/network/protocol;1?name=resource",
+ "nsISubstitutingProtocolHandler"
+);
+
+this.specialpowers = class extends ExtensionAPI {
+ onStartup() {
+ let uri = Services.io.newURI("content/", null, this.extension.rootURI);
+ resProto.setSubstitutionWithFlags(
+ "specialpowers",
+ uri,
+ resProto.ALLOW_CONTENT_ACCESS
+ );
+
+ // Register special testing modules.
+ Components.manager
+ .QueryInterface(Ci.nsIComponentRegistrar)
+ .autoRegister(FileUtils.getFile("ProfD", ["tests.manifest"]));
+
+ ChromeUtils.registerWindowActor("SpecialPowers", {
+ allFrames: true,
+ includeChrome: true,
+ child: {
+ moduleURI: "resource://specialpowers/SpecialPowersChild.jsm",
+ observers: [
+ "chrome-document-global-created",
+ "content-document-global-created",
+ ],
+ },
+ parent: {
+ moduleURI: "resource://specialpowers/SpecialPowersParent.jsm",
+ },
+ });
+ }
+
+ onShutdown() {
+ ChromeUtils.unregisterWindowActor("SpecialPowers");
+ resProto.setSubstitution("specialpowers", null);
+ }
+};