4 <script src="/js-test-resources/js-test.js"></script>
5 <script src="resources/cookie-utilities.js"></script>
9 description("Check that cookies created by JavaScript with max-age or expiry longer than a week get capped to a week.");
13 function checkThatCookieDoesNotExpireAfter(cookieData, maxAgeInSeconds) {
15 let maxExpiryDateInMilliseconds = now.getTime() + (maxAgeInSeconds * 1000);
17 if (maxExpiryDateInMilliseconds > cookieData["expires"])
20 testFailed("Cookie named " + cookieData["name"] + " expires in more than " + maxAgeInSeconds + " seconds.");
23 const twoDaysInSeconds = 2 * 24 * 60 * 60;
24 const shortLivedCookieMaxAge = { name : "shortLivedCookieMaxAge", lifetime : "Max-Age=" + twoDaysInSeconds + ";" };
25 document.cookie = shortLivedCookieMaxAge.name + "=foobar; " + shortLivedCookieMaxAge.lifetime + " path=/";
27 const twoDaysAsExpiresDate = createExpiresDateFromMaxAge(twoDaysInSeconds);
28 const shortLivedCookieExpires = { name : "shortLivedCookieExpires", lifetime : "Expires=" + twoDaysAsExpiresDate + ";" };
29 document.cookie = shortLivedCookieExpires.name + "=foobar; " + shortLivedCookieExpires.lifetime + " path=/";
31 const oneWeekInSeconds = 7 * 24 * 60 * 60;
32 const twoWeeksInSeconds = 2 * oneWeekInSeconds;
33 const longLivedCookieMaxAge = { name : "longLivedCookieMaxAge", lifetime : "Max-Age=" + twoWeeksInSeconds + ";" };
34 document.cookie = longLivedCookieMaxAge.name + "=foobar; " + longLivedCookieMaxAge.lifetime + " path=/";
36 const twoWeeksAsExpiresDate = createExpiresDateFromMaxAge(twoWeeksInSeconds);
37 const longLivedCookieExpires = { name : "longLivedCookieExpires", lifetime : "Expires=" + twoWeeksAsExpiresDate + ";" };
38 document.cookie = longLivedCookieExpires.name + "=foobar; " + longLivedCookieExpires.lifetime + " path=/";
40 const overTwoDaysInSeconds = twoDaysInSeconds + 30;
41 const overOneWeekInSeconds = oneWeekInSeconds + 30;
43 let cookies = internals.getCookies();
45 testFailed("No cookies found.");
46 for (let cookie of cookies) {
47 switch (cookie.name) {
48 case shortLivedCookieMaxAge.name:
49 checkThatCookieDoesNotExpireAfter(cookie, overTwoDaysInSeconds);
51 case shortLivedCookieExpires.name:
52 checkThatCookieDoesNotExpireAfter(cookie, overTwoDaysInSeconds);
54 case longLivedCookieMaxAge.name:
55 checkThatCookieDoesNotExpireAfter(cookie, overOneWeekInSeconds);
57 case longLivedCookieExpires.name:
58 checkThatCookieDoesNotExpireAfter(cookie, overOneWeekInSeconds);
62 if (passedTests === 4) {
63 testPassed("The two short-lived cookies don't expire after more than " + overTwoDaysInSeconds + " seconds.");
64 testPassed("The two long-lived cookies don't expire after more than " + overOneWeekInSeconds + " seconds.");
66 testFailed("At least one cookie's expiry attribute was beyond the test thresholds.");
68 testFailed("No internals object.");