blob: 1d14cbd5040ee3df2833f6fddce216a44155645b [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="/js-test-resources/js-test.js"></script>
<script src="/cookies/resources/cookie-utilities.js"></script>
<script src="resources/util.js"></script>
</head>
<body onload="runTest()">
<script>
description("Test for CNAME Cloaking: Cookie expiry capping if the top frame has an alternate CNAME and the sub resource has a different alternate CNAME.");
jsTestIsAsync = true;
function finishTest() {
resetCookiesForCurrentOrigin();
setEnableFeature(false, function() {
finishJSTest();
});
}
const oneWeekInSeconds = 7 * 24 * 60 * 60;
const overOneWeekInSeconds = oneWeekInSeconds + 600;
const underOneWeekInSeconds = oneWeekInSeconds - 600;
function checkCookieExpiry(cookieData, seconds, shouldBeLessThan) {
let now = new Date();
let expiryDateInMilliseconds = now.getTime() + (seconds * 1000);
if ((cookieData["expires"] < expiryDateInMilliseconds) === shouldBeLessThan) {
let underOneWeekExpiryDateInMilliseconds = now.getTime() + (underOneWeekInSeconds * 1000);
if (cookieData["expires"] < underOneWeekExpiryDateInMilliseconds)
testFailed("Cookie named " + cookieData["name"] + " was capped too low.");
else
testPassed("Cookie named " + cookieData["name"] + " expires in " + (shouldBeLessThan ? "less" : "more") + " than " + seconds + " seconds.");
} else
testFailed("Cookie named " + cookieData["name"] + " expires in " + (shouldBeLessThan ? "more" : "less") + " than " + seconds + " seconds.");
}
const cookieName = "cnameTestCookie";
const subPathToSetFirstPartyCookie = "resources/set-cookie.py?name=" + cookieName + "&value=value&dummy=" + Math.random();
function setAndCheckCookie() {
fetch(subPathToSetFirstPartyCookie).then(function() {
if (internals) {
let cookies = internals.getCookies();
if (!cookies.length)
testFailed("No cookies found.");
for (let cookie of cookies) {
if (cookie.name === cookieName) {
checkCookieExpiry(cookie, overOneWeekInSeconds, true);
} else {
testFailed("Unknown cookie " + cookie.name + " found.");
}
}
finishTest();
}
});
}
const firstParty = "http://127.0.0.1:8000";
const firstPartyCNAMEForTesting = "http://testwebkit.org";
const thirdPartyCNAMEForTesting = "http://3rdpartytestwebkit.org";
function runTest() {
setEnableFeature(true, function() {
testRunner.statisticsSetFirstPartyHostCNAMEDomain(firstParty, firstPartyCNAMEForTesting, function() {
testRunner.statisticsSetThirdPartyCNAMEDomain(thirdPartyCNAMEForTesting, function() {
setAndCheckCookie();
});
});
});
}
</script>
</body>