| <!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> |