blob: e2ffd041ae32de28603b8191030ce8a305d2626b [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script src="/cookies/resources/cookie-utilities.js"></script>
</head>
<body>
<script>
description("Check that cookies created by JavaScript with max-age or expiry longer than a week get capped to a week.");
jsTestIsAsync = true;
testRunner.setUseITPDatabase(true);
if (internals)
internals.setResourceLoadStatisticsEnabled(true);
let passedTests = 0;
function checkThatCookieDoesNotExpireAfter(cookieData, maxAgeInSeconds) {
let now = new Date();
let maxExpiryDateInMilliseconds = now.getTime() + (maxAgeInSeconds * 1000);
if (maxExpiryDateInMilliseconds > cookieData["expires"])
++passedTests;
else
testFailed("Cookie named " + cookieData["name"] + " expires in more than " + maxAgeInSeconds + " seconds.");
}
const twoDaysInSeconds = 2 * 24 * 60 * 60;
const shortLivedCookieMaxAge = { name : "shortLivedCookieMaxAge", lifetime : "Max-Age=" + twoDaysInSeconds + ";" };
document.cookie = shortLivedCookieMaxAge.name + "=foobar; " + shortLivedCookieMaxAge.lifetime + " path=/";
const twoDaysAsExpiresDate = createExpiresDateFromMaxAge(twoDaysInSeconds);
const shortLivedCookieExpires = { name : "shortLivedCookieExpires", lifetime : "Expires=" + twoDaysAsExpiresDate + ";" };
document.cookie = shortLivedCookieExpires.name + "=foobar; " + shortLivedCookieExpires.lifetime + " path=/";
const oneWeekInSeconds = 7 * 24 * 60 * 60;
const twoWeeksInSeconds = 2 * oneWeekInSeconds;
const longLivedCookieMaxAge = { name : "longLivedCookieMaxAge", lifetime : "Max-Age=" + twoWeeksInSeconds + ";" };
document.cookie = longLivedCookieMaxAge.name + "=foobar; " + longLivedCookieMaxAge.lifetime + " path=/";
const twoWeeksAsExpiresDate = createExpiresDateFromMaxAge(twoWeeksInSeconds);
const longLivedCookieExpires = { name : "longLivedCookieExpires", lifetime : "Expires=" + twoWeeksAsExpiresDate + ";" };
document.cookie = longLivedCookieExpires.name + "=foobar; " + longLivedCookieExpires.lifetime + " path=/";
const overTwoDaysInSeconds = twoDaysInSeconds + 30;
const overOneWeekInSeconds = oneWeekInSeconds + 30;
if (internals) {
let cookies = internals.getCookies();
if (!cookies.length)
testFailed("No cookies found.");
for (let cookie of cookies) {
switch (cookie.name) {
case shortLivedCookieMaxAge.name:
checkThatCookieDoesNotExpireAfter(cookie, overTwoDaysInSeconds);
break;
case shortLivedCookieExpires.name:
checkThatCookieDoesNotExpireAfter(cookie, overTwoDaysInSeconds);
break;
case longLivedCookieMaxAge.name:
checkThatCookieDoesNotExpireAfter(cookie, overOneWeekInSeconds);
break;
case longLivedCookieExpires.name:
checkThatCookieDoesNotExpireAfter(cookie, overOneWeekInSeconds);
break;
}
}
resetCookiesForCurrentOrigin();
if (passedTests === 4) {
testPassed("The two short-lived cookies don't expire after more than " + overTwoDaysInSeconds + " seconds.");
testPassed("The two long-lived cookies don't expire after more than " + overOneWeekInSeconds + " seconds.");
} else
testFailed("At least one cookie's expiry attribute was beyond the test thresholds.");
} else
testFailed("No internals object.");
if (internals)
internals.setResourceLoadStatisticsEnabled(false);
finishJSTest();
</script>
</body>
</html>