mirror of
https://github.com/servo/servo.git
synced 2025-07-13 02:13:40 +01:00
91 lines
2.9 KiB
HTML
91 lines
2.9 KiB
HTML
<!doctype html>
|
|
<title>'document-write' tests</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/feature-policy/experimental-features/resources/common.js"></script>
|
|
<style>
|
|
html, body {
|
|
height: 100%;
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
<body>
|
|
<script>
|
|
"use strict";
|
|
|
|
function newIframe() {
|
|
var i = document.createElement("iframe");
|
|
document.body.appendChild(i);
|
|
return i;
|
|
}
|
|
|
|
let iframeElement = document.querySelector("iframe");
|
|
let url = url_base + "document-write.html";
|
|
|
|
let text_to_write = "<div>FOO<\/div>";
|
|
let test_cases = [{
|
|
api: "open",
|
|
query: "body",
|
|
expected_value_enabled: false,
|
|
},
|
|
{
|
|
api: "close"
|
|
},
|
|
{
|
|
api: "write",
|
|
args: text_to_write,
|
|
query: "div",
|
|
expected_value_enabled: "FOO"
|
|
},
|
|
{
|
|
api: "writeln",
|
|
args: text_to_write,
|
|
query: "div",
|
|
expected_value_enabled: "FOO"
|
|
}];
|
|
|
|
// The feature 'document-write' is enabled by default and when it
|
|
// is enabled, all dynamic markup insertion API work as intended.
|
|
test_cases.forEach((tc) => {
|
|
promise_test(async() => {
|
|
let iframeElement = newIframe();
|
|
await loadUrlInIframe(iframeElement, url);
|
|
await sendMessageAndGetResponse(iframeElement.contentWindow, tc).then((response) => {
|
|
assert_false(
|
|
response.did_throw_exception,
|
|
`When feature is disabled, invoking 'document.${tc.api}' should not` +
|
|
" throw an exception.");
|
|
if (tc.query) {
|
|
assert_equals(
|
|
response.value,
|
|
tc.expected_value_enabled,
|
|
`The added script tag by 'document.${tc.api}' must have run.`);
|
|
}
|
|
});
|
|
}, `Verify 'document.${tc.api}' is not normally blocked.` );
|
|
});
|
|
|
|
|
|
// Disabling 'document-write' throws exception on the included API.
|
|
test_cases.forEach((tc) => {
|
|
promise_test(async() => {
|
|
let iframeElement = newIframe();
|
|
setFeatureState(iframeElement, "document-write", "'none'");
|
|
await loadUrlInIframe(iframeElement, url);
|
|
await sendMessageAndGetResponse(iframeElement.contentWindow, tc).then((response) => {
|
|
assert_true(
|
|
response.did_throw_exception,
|
|
`When feature is enabled, invoking 'document.${tc.api}' should ` +
|
|
" throw an exception.");
|
|
if (tc.query) {
|
|
assert_not_equals(
|
|
response.value,
|
|
tc.expected_value_enabled,
|
|
`The added script tag by 'document.${tc.api}' must not have run.`);
|
|
}
|
|
});
|
|
}, `Verify 'document.${tc.api}' is blocked when the feature is disabled.` );
|
|
});
|
|
|
|
</script>
|
|
</body>
|