mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-01-26 23:23:33 +00:00
0a8ff0ad85
# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D35951 --HG-- extra : source : 62f3501af4bc1c0bd1ee1977a28aee04706a6663
92 lines
2.2 KiB
JavaScript
92 lines
2.2 KiB
JavaScript
/**
|
|
* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
var _tests = [];
|
|
function addTest(test) {
|
|
_tests.push(test);
|
|
}
|
|
|
|
function addAsyncTest(fn) {
|
|
_tests.push(() => fn().catch(ok.bind(null, false)));
|
|
}
|
|
|
|
function runNextTest() {
|
|
if (_tests.length == 0) {
|
|
SimpleTest.finish();
|
|
return;
|
|
}
|
|
const fn = _tests.shift();
|
|
try {
|
|
fn();
|
|
} catch (ex) {
|
|
info(
|
|
"Test function " +
|
|
(fn.name ? "'" + fn.name + "' " : "") +
|
|
"threw an exception: " +
|
|
ex
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper to perform an XHR then blob response to create worker
|
|
*/
|
|
function doXHRGetBlob(uri) {
|
|
return new Promise(resolve => {
|
|
const xhr = new XMLHttpRequest();
|
|
xhr.open("GET", uri);
|
|
xhr.responseType = "blob";
|
|
xhr.addEventListener("load", function() {
|
|
is(
|
|
xhr.status,
|
|
200,
|
|
"doXHRGetBlob load uri='" + uri + "' status=" + xhr.status
|
|
);
|
|
resolve(xhr.response);
|
|
});
|
|
xhr.send();
|
|
});
|
|
}
|
|
|
|
function removeObserver(observer) {
|
|
SpecialPowers.removeObserver(observer, "specialpowers-http-notify-request");
|
|
SpecialPowers.removeObserver(observer, "csp-on-violate-policy");
|
|
}
|
|
|
|
/**
|
|
* Helper to perform an assert to check if the request should be blocked or
|
|
* allowed by CSP
|
|
*/
|
|
function assertCSPBlock(url, shouldBlock) {
|
|
return new Promise((resolve, reject) => {
|
|
let observer = {
|
|
observe(subject, topic, data) {
|
|
if (topic === "specialpowers-http-notify-request") {
|
|
if (data == url) {
|
|
is(shouldBlock, false, "Should allow request uri='" + url);
|
|
removeObserver(observer);
|
|
resolve();
|
|
}
|
|
}
|
|
|
|
if (topic === "csp-on-violate-policy") {
|
|
let asciiSpec = SpecialPowers.getPrivilegedProps(
|
|
SpecialPowers.do_QueryInterface(subject, "nsIURI"),
|
|
"asciiSpec"
|
|
);
|
|
if (asciiSpec == url) {
|
|
is(shouldBlock, true, "Should block request uri='" + url);
|
|
removeObserver(observer);
|
|
resolve();
|
|
}
|
|
}
|
|
},
|
|
};
|
|
|
|
SpecialPowers.addObserver(observer, "csp-on-violate-policy");
|
|
SpecialPowers.addObserver(observer, "specialpowers-http-notify-request");
|
|
});
|
|
}
|