mirror of
https://github.com/servo/servo.git
synced 2025-10-12 06:20:26 +01:00
91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
// Helper functions used in web-bundle tests.
|
|
|
|
function addElementAndWaitForLoad(element) {
|
|
return new Promise((resolve, reject) => {
|
|
element.onload = resolve;
|
|
element.onerror = reject;
|
|
document.body.appendChild(element);
|
|
});
|
|
}
|
|
|
|
function addElementAndWaitForError(element) {
|
|
return new Promise((resolve, reject) => {
|
|
element.onload = reject;
|
|
element.onerror = resolve;
|
|
document.body.appendChild(element);
|
|
});
|
|
}
|
|
|
|
function fetchAndWaitForReject(url) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(url)
|
|
.then(() => {
|
|
reject();
|
|
})
|
|
.catch(() => {
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
function isValidCrossOriginAttribute(crossorigin) {
|
|
if (crossorigin === undefined)
|
|
return true;
|
|
if ((typeof crossorigin) != 'string')
|
|
return false;
|
|
const lower_crossorigin = crossorigin.toLowerCase();
|
|
return (lower_crossorigin === 'anonymous') ||
|
|
(lower_crossorigin === 'use-credentials');
|
|
}
|
|
|
|
function addLinkAndWaitForLoad(url, resources, crossorigin) {
|
|
return new Promise((resolve, reject) => {
|
|
if (!isValidCrossOriginAttribute(crossorigin)) {
|
|
reject('invalid crossorigin attribute: ' + crossorigin);
|
|
return;
|
|
}
|
|
const link = document.createElement("link");
|
|
link.rel = "webbundle";
|
|
link.href = url;
|
|
if (crossorigin) {
|
|
link.crossOrigin = crossorigin;
|
|
}
|
|
for (const resource of resources) {
|
|
link.resources.add(resource);
|
|
}
|
|
link.onload = () => resolve(link);
|
|
link.onerror = () => reject(link);
|
|
document.body.appendChild(link);
|
|
});
|
|
}
|
|
|
|
function addLinkAndWaitForError(url, resources, crossorigin) {
|
|
return new Promise((resolve, reject) => {
|
|
if (!isValidCrossOriginAttribute(crossorigin)) {
|
|
reject('invalid crossorigin attribute: ' + crossorigin);
|
|
return;
|
|
}
|
|
const link = document.createElement("link");
|
|
link.rel = "webbundle";
|
|
link.href = url;
|
|
if (crossorigin) {
|
|
link.crossOrigin = crossorigin;
|
|
}
|
|
for (const resource of resources) {
|
|
link.resources.add(resource);
|
|
}
|
|
link.onload = () => reject(link);
|
|
link.onerror = () => resolve(link);
|
|
document.body.appendChild(link);
|
|
});
|
|
}
|
|
|
|
function addScriptAndWaitForError(url) {
|
|
return new Promise((resolve, reject) => {
|
|
const script = document.createElement("script");
|
|
script.src = url;
|
|
script.onload = reject;
|
|
script.onerror = resolve;
|
|
document.body.appendChild(script);
|
|
});
|
|
}
|