mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-10 10:18:38 +09:00
119 lines
3.4 KiB
HTML
119 lines
3.4 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>WebExtension Test</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script>
|
|
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
|
|
<script type="text/javascript" src="head.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
|
|
<script type="text/javascript">
|
|
"use strict";
|
|
|
|
/* eslint-disable mozilla/balanced-listeners */
|
|
|
|
add_task(function* test_simple() {
|
|
async function runTests(cx) {
|
|
function xhr(XMLHttpRequest) {
|
|
return (url) => {
|
|
return new Promise((resolve, reject) => {
|
|
let req = new XMLHttpRequest();
|
|
req.open("GET", url);
|
|
req.addEventListener("load", resolve);
|
|
req.addEventListener("error", reject);
|
|
req.send();
|
|
});
|
|
};
|
|
}
|
|
|
|
function run(shouldFail, fetch) {
|
|
function passListener() {
|
|
browser.test.succeed(`${cx}.${fetch.name} pass listener`);
|
|
}
|
|
|
|
function failListener() {
|
|
browser.test.fail(`${cx}.${fetch.name} fail listener`);
|
|
}
|
|
|
|
/* eslint-disable no-else-return */
|
|
if (shouldFail) {
|
|
return fetch("http://example.org/example.txt").then(failListener, passListener);
|
|
} else {
|
|
return fetch("http://example.com/example.txt").then(passListener, failListener);
|
|
}
|
|
/* eslint-enable no-else-return */
|
|
}
|
|
|
|
try {
|
|
await run(true, xhr(XMLHttpRequest));
|
|
await run(false, xhr(XMLHttpRequest));
|
|
await run(true, xhr(window.XMLHttpRequest));
|
|
await run(false, xhr(window.XMLHttpRequest));
|
|
await run(true, fetch);
|
|
await run(false, fetch);
|
|
await run(true, window.fetch);
|
|
await run(false, window.fetch);
|
|
} catch (err) {
|
|
browser.test.fail(`Error: ${err} :: ${err.stack}`);
|
|
browser.test.notifyFail("permission_xhr");
|
|
}
|
|
}
|
|
|
|
async function background(runTestsFn) {
|
|
await runTestsFn("bg");
|
|
browser.test.notifyPass("permission_xhr");
|
|
}
|
|
|
|
let extensionData = {
|
|
background: `(${background})(${runTests})`,
|
|
manifest: {
|
|
permissions: ["http://example.com/"],
|
|
content_scripts: [{
|
|
"matches": ["http://mochi.test/*/file_permission_xhr.html"],
|
|
"js": ["content.js"],
|
|
}],
|
|
},
|
|
files: {
|
|
"content.js": `(${async runTestsFn => {
|
|
await runTestsFn("content");
|
|
|
|
window.wrappedJSObject.privilegedFetch = fetch;
|
|
window.wrappedJSObject.privilegedXHR = XMLHttpRequest;
|
|
|
|
window.addEventListener("message", function rcv({data}) {
|
|
switch (data.msg) {
|
|
case "test":
|
|
break;
|
|
|
|
case "assertTrue":
|
|
browser.test.assertTrue(data.condition, data.description);
|
|
break;
|
|
|
|
case "finish":
|
|
window.removeEventListener("message", rcv, false);
|
|
browser.test.sendMessage("content-script-finished");
|
|
break;
|
|
}
|
|
}, false);
|
|
window.postMessage("test", "*");
|
|
}})(${runTests})`,
|
|
},
|
|
};
|
|
|
|
let extension = ExtensionTestUtils.loadExtension(extensionData);
|
|
yield extension.startup();
|
|
|
|
let win = window.open("file_permission_xhr.html");
|
|
yield extension.awaitMessage("content-script-finished");
|
|
win.close();
|
|
|
|
yield extension.awaitFinish("permission_xhr");
|
|
yield extension.unload();
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|