blob: c6e2e0d258015120c90f1ecac71fd93f3f6b56c0 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description("Tests that cookie-averse documents cannot return or set cookies.");
jsTestIsAsync = true;
shouldBe("document.cookie.indexOf('ppkcookie1=testcookie')", "-1");
shouldNotThrow("document.cookie = 'ppkcookie1=testcookie'");
shouldBeTrue("document.cookie.indexOf('ppkcookie1=testcookie') >= 0");
debug("");
debug("* Frameless document cases");
const framelessDocument1 = document.implementation.createHTMLDocument("test");
shouldBeEqualToString("framelessDocument1.cookie", "");
shouldNotThrow("framelessDocument1.cookie = 'ppkcookie2=testcookie'");
shouldBeEqualToString("framelessDocument1.cookie", "");
const framelessDocument2 = new DOMParser().parseFromString("<body></body>", "text/html");
shouldBeEqualToString("framelessDocument2.cookie", "");
shouldNotThrow("framelessDocument2.cookie = 'ppkcookie3=testcookie'");
shouldBeEqualToString("framelessDocument2.cookie", "");
debug("");
debug("* Frame with about:blank URL");
let frame = document.createElement("iframe");
frame.src = "about:blank";
document.body.appendChild(frame);
let frameDocument = frame.contentDocument;
shouldBeTrue("frameDocument.cookie.indexOf('ppkcookie1=testcookie') >= 0");
shouldNotThrow("frameDocument.cookie = 'ppkcookie4=testcookie'");
shouldBeTrue("frameDocument.cookie.indexOf('ppkcookie4=testcookie') >= 0");
frame.remove();
frame = null;
gc();
shouldBeEqualToString("frameDocument.cookie", "");
shouldNotThrow("frameDocument.cookie = 'ppkcookie4=testcookie'");
shouldBeEqualToString("frameDocument.cookie", "");
function runDataURLTest()
{
return new Promise((resolve) => {
debug("");
debug("* Frame using data: scheme");
frame = document.createElement("iframe");
frame.src = "data:text/html,<body></body>";
frame.onload = function() {
frameDocument = frame.contentDocument;
shouldBeEqualToString("frameDocument.cookie", "");
shouldNotThrow("frameDocument.cookie = 'ppkcookie5=testcookie'");
shouldBeEqualToString("frameDocument.cookie", "");
frame.remove();
frame = null;
resolve();
}
document.body.appendChild(frame);
});
}
function runFileURLTest()
{
return new Promise((resolve) => {
debug("");
debug("* Frame using file:// scheme");
frame = document.createElement("iframe");
frame.src = "../loader/resources/empty-subframe.html";
frame.onload = function() {
frameDocument = frame.contentDocument;
shouldNotThrow("frameDocument.cookie = 'ppkcookie6=testcookie'");
shouldBeTrue("frameDocument.cookie.indexOf('ppkcookie6=testcookie') >= 0");
evalAndLog("frame.remove()");
frame = null;
gc();
shouldBeEqualToString("frameDocument.cookie", "");
shouldNotThrow("frameDocument.cookie = 'ppkcookie7=testcookie'");
shouldBeEqualToString("frameDocument.cookie", "");
resolve();
}
document.body.appendChild(frame);
});
}
runDataURLTest().then(() => {
runFileURLTest().then(() => {
finishJSTest();
})
});
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
<html>