summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/test-addon-extras.js
diff options
context:
space:
mode:
Diffstat (limited to 'addon-sdk/source/test/test-addon-extras.js')
-rw-r--r--addon-sdk/source/test/test-addon-extras.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/addon-sdk/source/test/test-addon-extras.js b/addon-sdk/source/test/test-addon-extras.js
new file mode 100644
index 000000000..1910db05e
--- /dev/null
+++ b/addon-sdk/source/test/test-addon-extras.js
@@ -0,0 +1,70 @@
+/* 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 { Ci, Cu, Cc, components } = require("chrome");
+const self = require("sdk/self");
+const { before, after } = require("sdk/test/utils");
+const fixtures = require("./fixtures");
+const { Loader } = require("sdk/test/loader");
+const { merge } = require("sdk/util/object");
+
+exports["test changing result from addon extras in panel"] = function(assert, done) {
+ let loader = Loader(module, null, null, {
+ modules: {
+ "sdk/self": merge({}, self, {
+ data: merge({}, self.data, {url: fixtures.url})
+ })
+ }
+ });
+
+ const { Panel } = loader.require("sdk/panel");
+ const { events } = loader.require("sdk/content/sandbox/events");
+ const { on } = loader.require("sdk/event/core");
+ const { isAddonContent } = loader.require("sdk/content/utils");
+
+ var result = 1;
+ var extrasVal = {
+ test: function() {
+ return result;
+ }
+ };
+
+ on(events, "content-script-before-inserted", ({ window, worker }) => {
+ assert.pass("content-script-before-inserted");
+
+ if (isAddonContent({ contentURL: window.location.href })) {
+ let extraStuff = Cu.cloneInto(extrasVal, window, {
+ cloneFunctions: true
+ });
+ getUnsafeWindow(window).extras = extraStuff;
+
+ assert.pass("content-script-before-inserted done!");
+ }
+ });
+
+ let panel = Panel({
+ contentURL: "./test-addon-extras.html"
+ });
+
+ panel.port.once("result1", (result) => {
+ assert.equal(result, 1, "result is a number");
+ result = true;
+ panel.port.emit("get-result");
+ });
+
+ panel.port.once("result2", (result) => {
+ assert.equal(result, true, "result is a boolean");
+ loader.unload();
+ done();
+ });
+
+ panel.port.emit("get-result");
+}
+
+function getUnsafeWindow (win) {
+ return win.wrappedJSObject || win;
+}
+
+require("sdk/test").run(exports);