blob: 60fc5377d7dee6042990be0c2dbfb745ae05cd59 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
</head>
<body onload="runTest()">
<script>
description("Check that only HttpOnly cookies remain if all script-accessible cookies are deleted.");
jsTestIsAsync = true;
const httpOnlyCookieName = "http-only-cookie";
const serverSideCookieName = "server-side-cookie";
const clientSideCookieName = "client-side-cookie";
function sortStringArray(a, b) {
a = a.toLowerCase();
b = b.toLowerCase();
return a > b ? 1 : b > a ? -1 : 0;
}
function checkCookies(isAfterScriptAccessibleDeletion) {
let unsortedTestPassedMessages = [];
let cookies = internals.getCookies();
if (!cookies.length)
testFailed((isAfterScriptAccessibleDeletion ? "After" : "Before") + " script-accessible deletion: No cookies found.");
for (let cookie of cookies) {
switch (cookie.name) {
case httpOnlyCookieName:
unsortedTestPassedMessages.push((isAfterScriptAccessibleDeletion ? "After" : "Before") + " script-accessible deletion: " + (isAfterScriptAccessibleDeletion ? " " : "") + "HttpOnly cookie exists.");
break;
case serverSideCookieName:
if (isAfterScriptAccessibleDeletion)
testFailed("After script-accessible deletion: Regular server-side cookie exists.");
else
unsortedTestPassedMessages.push("Before script-accessible deletion: Regular server-side cookie exists.");
break;
case clientSideCookieName:
if (isAfterScriptAccessibleDeletion)
testFailed("After script-accessible deletion: Client-side cookie exists.");
else
unsortedTestPassedMessages.push("Before script-accessible deletion: Client-side cookie exists.");
break;
}
}
let sortedTestPassedMessages = unsortedTestPassedMessages.sort(sortStringArray);
for (let testPassedMessage of sortedTestPassedMessages)
testPassed(testPassedMessage);
}
async function runTest() {
if (!testRunner || !internals) {
testFailed("No testRunner or no internals.");
return;
}
testRunner.setUseITPDatabase(true);
await fetch("/cookies/resources/set-http-only-cookie.php?cookieName=" + httpOnlyCookieName, { credentials: "same-origin" });
await fetch("/cookies/resources/setCookies.cgi", { headers: { "Set-Cookie": serverSideCookieName + "=1; path=/;" }, credentials: "same-origin" });
document.cookie = clientSideCookieName + "=1";
checkCookies(false);
testRunner.statisticsDeleteCookiesForHost("http://127.0.0.1", false);
checkCookies(true);
testRunner.statisticsDeleteCookiesForHost("http://127.0.0.1", true);
let cookiesLeft = internals.getCookies().length;
if (cookiesLeft === 0)
testPassed("After full deletion: All cookies are gone.");
else
testFailed("After full deletion: " + cookiesLeft + " cookie(s) left.");
finishJSTest();
}
</script>
</body>
</html>