72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
const loadPromise = new Promise(resolve => { window.resolveLoadPromise = resolve; });
|
|
|
|
function assertURL(doc, expectedURL) {
|
|
assert_equals(doc.URL, expectedURL, "document.URL");
|
|
assert_equals(doc.documentURI, expectedURL, "document.documentURI");
|
|
assert_equals(doc.baseURI, expectedURL, "document.baseURI");
|
|
}
|
|
|
|
const supportedTypes = [
|
|
"text/html",
|
|
"text/xml",
|
|
"application/xml",
|
|
"application/xhtml+xml",
|
|
"image/svg+xml",
|
|
];
|
|
|
|
const invalidXML = `<span x:test="testing">1</span>`;
|
|
const inputs = {
|
|
valid: "<html></html>",
|
|
"invalid XML": invalidXML
|
|
};
|
|
|
|
for (const mimeType of supportedTypes) {
|
|
for (const [inputName, input] of Object.entries(inputs)) {
|
|
if (mimeType === "text/html" && input === invalidXML) {
|
|
continue;
|
|
}
|
|
|
|
test(() => {
|
|
const parser = new DOMParser();
|
|
const doc = parser.parseFromString(input, mimeType);
|
|
|
|
assertURL(doc, document.URL);
|
|
}, `${mimeType} ${inputName}: created normally`);
|
|
|
|
promise_test(async () => {
|
|
await loadPromise;
|
|
|
|
const parser = new frames[0].DOMParser();
|
|
const doc = parser.parseFromString(input, mimeType);
|
|
|
|
assertURL(doc, frames[0].document.URL);
|
|
}, `${mimeType} ${inputName}: created using another iframe's DOMParser from this frame`);
|
|
|
|
promise_test(async () => {
|
|
await loadPromise;
|
|
|
|
const parser = new frames[0].DOMParser();
|
|
const doc = frames[0].doParse(input, mimeType);
|
|
|
|
assertURL(doc, frames[0].document.URL);
|
|
}, `${mimeType} ${inputName}: created using another iframe's DOMParser from that frame`);
|
|
|
|
promise_test(async () => {
|
|
await loadPromise;
|
|
|
|
const parser = new DOMParser();
|
|
const doc = frames[0].DOMParser.prototype.parseFromString.call(parser, input, mimeType);
|
|
|
|
assertURL(doc, document.URL);
|
|
}, `${mimeType} ${inputName}: created using a parser from this frame and the method from the iframe`);
|
|
|
|
promise_test(async () => {
|
|
await loadPromise;
|
|
|
|
const parser = new frames[0].DOMParser();
|
|
const doc = DOMParser.prototype.parseFromString.call(parser, input, mimeType);
|
|
|
|
assertURL(doc, frames[0].document.URL);
|
|
}, `${mimeType} ${inputName}: created using a parser from the iframe and the method from this frame`);
|
|
}
|
|
}
|