172 lines
4.7 KiB
JavaScript
172 lines
4.7 KiB
JavaScript
/* 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");
|
|
}
|
|
|
|
exports["test window result from addon extras in panel"] = function*(assert) {
|
|
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 { Page } = loader.require('sdk/page-worker');
|
|
const { getActiveView } = loader.require("sdk/view/core");
|
|
const { getDocShell } = loader.require('sdk/frame/utils');
|
|
const { events } = loader.require("sdk/content/sandbox/events");
|
|
const { on } = loader.require("sdk/event/core");
|
|
const { isAddonContent } = loader.require("sdk/content/utils");
|
|
|
|
// make a page worker and wait for it to load
|
|
var page = yield new Promise(resolve => {
|
|
assert.pass("Creating the background page");
|
|
|
|
let page = Page({
|
|
contentURL: "./test.html",
|
|
contentScriptWhen: "end",
|
|
contentScript: "self.port.emit('end', unsafeWindow.getTestURL() + '')"
|
|
});
|
|
|
|
page.port.once("end", (url) => {
|
|
assert.equal(url, fixtures.url("./test.html"), "url is correct");
|
|
resolve(page);
|
|
});
|
|
});
|
|
assert.pass("Created the background page");
|
|
|
|
var extrasVal = {
|
|
test: function() {
|
|
assert.pass("start test function");
|
|
let frame = getActiveView(page);
|
|
let window = getUnsafeWindow(frame.contentWindow);
|
|
assert.equal(typeof window.getTestURL, "function", "window.getTestURL is a function");
|
|
return window;
|
|
}
|
|
};
|
|
|
|
on(events, "content-script-before-inserted", ({ window, worker }) => {
|
|
let url = window.location.href;
|
|
assert.pass("content-script-before-inserted " + url);
|
|
|
|
if (isAddonContent({ contentURL: url })) {
|
|
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-window.html"
|
|
});
|
|
|
|
|
|
yield new Promise(resolve => {
|
|
panel.port.once("result1", (result) => {
|
|
assert.equal(result, fixtures.url("./test.html"), "result1 is a window");
|
|
resolve();
|
|
});
|
|
|
|
assert.pass("emit get-result");
|
|
panel.port.emit("get-result");
|
|
});
|
|
|
|
page.destroy();
|
|
|
|
|
|
page = yield new Promise(resolve => {
|
|
let page = Page({
|
|
contentURL: "./index.html",
|
|
contentScriptWhen: "end",
|
|
contentScript: "self.port.emit('end')"
|
|
});
|
|
page.port.once("end", () => resolve(page));
|
|
});
|
|
|
|
|
|
yield new Promise(resolve => {
|
|
panel.port.once("result2", (result) => {
|
|
assert.equal(result, fixtures.url("./index.html"), "result2 is a window");
|
|
resolve();
|
|
});
|
|
|
|
assert.pass("emit get-result");
|
|
panel.port.emit("get-result");
|
|
});
|
|
|
|
loader.unload();
|
|
}
|
|
|
|
|
|
|
|
function getUnsafeWindow (win) {
|
|
return win.wrappedJSObject || win;
|
|
}
|
|
|
|
require("sdk/test").run(exports);
|