blob: 6f9caf9b7e1b6da7d4e4174a13fbfc7c8191d826 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script src="../resources/cookie-utilities.js"></script>
<body>
<script id="srcdoc-script" type="text/plain">
async function runTest()
{
document.body.appendChild(document.createTextNode(window.name)); // For debugging
window.top.invalidateCachedCookies();
window.top.debug("<br>Cookies sent with HTTP request:");
await window.top.shouldHaveCookieWithValue("strict", "8");
await window.top.shouldHaveCookieWithValue("implicit-strict", "8");
await window.top.shouldHaveCookieWithValue("strict-because-invalid-SameSite-value", "8");
await window.top.shouldHaveCookieWithValue("lax", "8");
window.top.debug("<br>Cookies visible in DOM:");
window.top.shouldHaveDOMCookieWithValue("strict", "8");
window.top.shouldHaveDOMCookieWithValue("implicit-strict", "8");
window.top.shouldHaveDOMCookieWithValue("strict-because-invalid-SameSite-value", "8");
window.top.shouldHaveDOMCookieWithValue("lax", "8");
}
</script>
<script>
window.jsTestIsAsync = true;
description("Tests that Same-Site cookies for 127.0.0.1 can be retrieved from a srcdoc iframe.");
const SrcdocScript = `<script>${document.getElementById("srcdoc-script").text}</` + "script>";
function appendSrcdocIframeToBodyOfDocument(document, name, content, callback)
{
let iframe = document.createElement("iframe");
iframe.name = name;
iframe.onload = () => callback(iframe);
iframe.srcdoc = content;
document.body.appendChild(iframe);
}
async function testRetrieveCookiesFromSrcdocIframe()
{
let appendIFrameAndWaitUntilLoaded = new Promise((resolved) => appendSrcdocIframeToBodyOfDocument(document, "A", SrcdocScript, resolved));
let iframe = await appendIFrameAndWaitUntilLoaded;
await iframe.contentWindow.runTest();
}
async function testRetrieveCookiesFromNestedSrcdocIframe()
{
let appendIFrameAndWaitUntilLoaded = new Promise((resolved) => appendSrcdocIframeToBodyOfDocument(document, "B", "<body></body>", resolved));
let iframe = await appendIFrameAndWaitUntilLoaded;
let appendInnerIFrameAndWaitUntilLoaded = new Promise((resolved) => appendSrcdocIframeToBodyOfDocument(iframe.contentDocument, "B_1", SrcdocScript, resolved));
let innerIframe = await appendInnerIFrameAndWaitUntilLoaded;
await innerIframe.contentWindow.runTest();
}
async function runTest()
{
await resetCookies();
await setCookie("strict", "8", {"SameSite": "Strict", "Max-Age": 100, "path": "/"});
await setCookie("implicit-strict", "8", {"SameSite": null, "Max-Age": 100, "path": "/"});
await setCookie("strict-because-invalid-SameSite-value", "8", {"SameSite": "invalid", "Max-Age": 100, "path": "/"});
await setCookie("lax", "8", {"SameSite": "Lax", "Max-Age": 100, "path": "/"});
debug("Retrieve cookies from srcdoc iframe:");
await testRetrieveCookiesFromSrcdocIframe();
debug("<br>Retrieve cookies from srcdoc iframe inside srcdoc iframe:")
await testRetrieveCookiesFromNestedSrcdocIframe();
for(let iframe of document.querySelectorAll("iframe"))
document.body.removeChild(iframe);
await resetCookies();
finishJSTest();
}
runTest();
</script>
</body>
</html>