summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/loader/b2g.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/loader/b2g.js')
-rw-r--r--addon-sdk/source/test/loader/b2g.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/addon-sdk/source/test/loader/b2g.js b/addon-sdk/source/test/loader/b2g.js
new file mode 100644
index 000000000..2982a0202
--- /dev/null
+++ b/addon-sdk/source/test/loader/b2g.js
@@ -0,0 +1,41 @@
+/* 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/. */
+"use strict";
+
+const {Cc, Ci, Cu} = require("chrome");
+const {readURISync} = require("sdk/net/url");
+
+const systemPrincipal = Cc["@mozilla.org/systemprincipal;1"].
+ createInstance(Ci.nsIPrincipal);
+
+
+const FakeCu = function() {
+ const sandbox = Cu.Sandbox(systemPrincipal, {wantXrays: false});
+ sandbox.toString = function() {
+ return "[object BackstagePass]";
+ }
+ this.sandbox = sandbox;
+}
+FakeCu.prototype = {
+ ["import"](url, scope) {
+ const {sandbox} = this;
+ sandbox.__URI__ = url;
+ const target = Cu.createObjectIn(sandbox);
+ target.toString = sandbox.toString;
+ Cu.evalInSandbox(`(function(){` + readURISync(url) + `\n})`,
+ sandbox, "1.8", url).call(target);
+ // Borrowed from mozJSComponentLoader.cpp to match errors closer.
+ // https://github.com/mozilla/gecko-dev/blob/f6ca65e8672433b2ce1a0e7c31f72717930b5e27/js/xpconnect/loader/mozJSComponentLoader.cpp#L1205-L1208
+ if (!Array.isArray(target.EXPORTED_SYMBOLS)) {
+ throw Error("EXPORTED_SYMBOLS is not an array.");
+ }
+
+ for (let key of target.EXPORTED_SYMBOLS) {
+ scope[key] = target[key];
+ }
+
+ return target;
+ }
+};
+exports.FakeCu = FakeCu;