92 lines
2.8 KiB
JavaScript
92 lines
2.8 KiB
JavaScript
// This module contains functions that *are not* executed as part of the
|
|
// node process, but injected into the browser during tests (using
|
|
// Function.prototype.toString).
|
|
|
|
"use strict";
|
|
|
|
// Returns the contents of the provided function definition source.
|
|
//
|
|
// Ex "function () { return 1; }" -> "return 1";
|
|
const stripFuncFromSource = function (source) {
|
|
|
|
const parts = source.split("\n").filter(x => !!x.trim());
|
|
parts.splice(0, 1);
|
|
parts.splice(parts.length - 1, 1);
|
|
const recreatedScript = parts.join("\n");
|
|
return recreatedScript;
|
|
};
|
|
|
|
module.exports.temporaryAddOnInstallScript = (function () {
|
|
|
|
const funcToInject = function () {
|
|
|
|
const {Components, AddonManager} = window;
|
|
const fileUtils = Components.utils.import("resource://gre/modules/FileUtils.jsm");
|
|
const FileUtils = fileUtils.FileUtils;
|
|
const callback = arguments[arguments.length - 1];
|
|
Components.utils.import("resource://gre/modules/AddonManager.jsm");
|
|
|
|
const listener = {
|
|
onInstallEnded: function(install, addon) {
|
|
callback([addon.id, 0]);
|
|
},
|
|
onInstallFailed: function(install) {
|
|
callback([null, install.error]);
|
|
},
|
|
onInstalled: function(addon) {
|
|
AddonManager.removeAddonListener(listener);
|
|
callback([addon.id, 0]);
|
|
}
|
|
};
|
|
|
|
const file = new FileUtils.File(arguments[0]);
|
|
|
|
AddonManager.addAddonListener(listener);
|
|
AddonManager.installTemporaryAddon(file).catch(error => {
|
|
Components.utils.reportError(error);
|
|
callback([null, error]);
|
|
});
|
|
};
|
|
|
|
const funcSource = stripFuncFromSource(funcToInject.toString());
|
|
|
|
return function () {
|
|
return funcSource;
|
|
};
|
|
}());
|
|
|
|
module.exports.setStandardsAsBlockedScript = (function () {
|
|
|
|
const funcToInject = function () {
|
|
const doc = window.document;
|
|
const callback = arguments[arguments.length - 1];
|
|
const standardsToBlockArray = "###REPLACE###";
|
|
|
|
standardsToBlockArray.forEach(function (aStandardName) {
|
|
const input = doc.querySelector(`input[value='${aStandardName}']`);
|
|
input.click();
|
|
});
|
|
|
|
callback();
|
|
};
|
|
|
|
const funcSource = stripFuncFromSource(funcToInject.toString());
|
|
|
|
return function (standardsToBlock) {
|
|
return funcSource.replace("\"###REPLACE###\"", JSON.stringify(standardsToBlock));
|
|
};
|
|
}());
|
|
|
|
module.exports.testSVGTestScript = (function () {
|
|
|
|
const funcToInject = function () {
|
|
const callback = arguments[arguments.length - 1];
|
|
callback(HTMLEmbedElement.prototype.getSVGDocument.art.bart.fart());
|
|
};
|
|
|
|
const funcSource = stripFuncFromSource(funcToInject.toString());
|
|
|
|
return function () {
|
|
return funcSource;
|
|
};
|
|
}());
|