cookieListItem_attributes.https.window.js (8402B)
1 // META: title=Cookie Store API: cookieListItem attributes 2 // META: script=/resources/testdriver.js 3 // META: script=/resources/testdriver-vendor.js 4 5 // Please keep this synchronized with cookieListItem_attributes.https.any.js. 6 7 'use strict'; 8 9 const currentHostname = location.hostname; 10 11 const oneDayInSeconds = 24 * 60 * 60; 12 const fourHundredDaysInSeconds = 400 * oneDayInSeconds; 13 const tenYearsInSeconds = 10 * 365 * oneDayInSeconds; 14 const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds; 15 const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds; 16 17 function assert_cookie_keys(cookie) { 18 const cookieKeys = Object.keys(cookie); 19 assert_array_equals(cookieKeys, ['name', 'value']); 20 } 21 22 promise_test(async testCase => { 23 await cookieStore.delete('cookie-name'); 24 25 await cookieStore.set('cookie-name', 'cookie-value'); 26 testCase.add_cleanup(async () => { 27 await cookieStore.delete('cookie-name'); 28 }); 29 30 const cookie = await cookieStore.get('cookie-name'); 31 assert_equals(cookie.name, 'cookie-name'); 32 assert_equals(cookie.value, 'cookie-value'); 33 assert_cookie_keys(cookie); 34 35 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 36 assert_equals(internalCookie.name, 'cookie-name'); 37 assert_equals(internalCookie.value, 'cookie-value'); 38 assert_equals(internalCookie.path, '/'); 39 assert_equals(internalCookie.domain, currentHostname); 40 assert_true(internalCookie.secure); 41 assert_false(internalCookie.httpOnly); 42 assert_equals(internalCookie.expiry, undefined); 43 assert_equals(internalCookie.sameSite, 'Strict'); 44 }, 'CookieListItem - cookieStore.set defaults with positional name and value'); 45 46 promise_test(async testCase => { 47 await cookieStore.delete('cookie-name'); 48 49 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); 50 testCase.add_cleanup(async () => { 51 await cookieStore.delete('cookie-name'); 52 }); 53 const cookie = await cookieStore.get('cookie-name'); 54 assert_equals(cookie.name, 'cookie-name'); 55 assert_equals(cookie.value, 'cookie-value'); 56 assert_cookie_keys(cookie); 57 58 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 59 assert_equals(internalCookie.name, 'cookie-name'); 60 assert_equals(internalCookie.value, 'cookie-value'); 61 assert_equals(internalCookie.path, '/'); 62 assert_equals(internalCookie.domain, currentHostname); 63 assert_true(internalCookie.secure); 64 assert_false(internalCookie.httpOnly); 65 assert_equals(internalCookie.expiry, undefined); 66 assert_equals(internalCookie.sameSite, 'Strict'); 67 }, 'CookieListItem - cookieStore.set defaults with name and value in options'); 68 69 promise_test(async testCase => { 70 await cookieStore.delete('cookie-name'); 71 72 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 73 expires: tenYearsFromNowInSeconds * 1000 }); 74 testCase.add_cleanup(async () => { 75 await cookieStore.delete('cookie-name'); 76 }); 77 const cookie = await cookieStore.get('cookie-name'); 78 assert_equals(cookie.name, 'cookie-name'); 79 assert_equals(cookie.value, 'cookie-value'); 80 assert_cookie_keys(cookie); 81 82 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 83 assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds); 84 }, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' + 85 'years in the future'); 86 87 promise_test(async testCase => { 88 await cookieStore.delete('cookie-name'); 89 90 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 91 expires: new Date(tenYearsFromNowInSeconds) * 1000 }); 92 testCase.add_cleanup(async () => { 93 await cookieStore.delete('cookie-name'); 94 }); 95 const cookie = await cookieStore.get('cookie-name'); 96 assert_equals(cookie.name, 'cookie-name'); 97 assert_equals(cookie.value, 'cookie-value'); 98 assert_cookie_keys(cookie); 99 100 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 101 assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds); 102 }, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' + 103 'years in the future'); 104 105 promise_test(async testCase => { 106 await cookieStore.delete({ name: 'cookie-name', domain: currentHostname }); 107 108 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 109 domain: currentHostname }); 110 testCase.add_cleanup(async () => { 111 await cookieStore.delete({ name: 'cookie-name', domain: currentHostname }); 112 }); 113 const cookie = await cookieStore.get('cookie-name'); 114 assert_equals(cookie.name, 'cookie-name'); 115 assert_equals(cookie.value, 'cookie-value'); 116 assert_cookie_keys(cookie); 117 118 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 119 assert_equals(internalCookie.domain, currentHostname); 120 }, 'CookieListItem - cookieStore.set with domain set to the current hostname'); 121 122 promise_test(async testCase => { 123 const currentUrl = new URL(self.location.href); 124 const currentPath = currentUrl.pathname; 125 const currentDirectory = 126 currentPath.substr(0, currentPath.lastIndexOf('/') + 1); 127 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 128 129 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 130 path: currentDirectory }); 131 testCase.add_cleanup(async () => { 132 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 133 }); 134 const cookie = await cookieStore.get('cookie-name'); 135 assert_equals(cookie.name, 'cookie-name'); 136 assert_equals(cookie.value, 'cookie-value'); 137 assert_cookie_keys(cookie); 138 139 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 140 assert_equals(internalCookie.path, currentDirectory); 141 }, 'CookieListItem - cookieStore.set with path set to the current directory'); 142 143 promise_test(async testCase => { 144 const currentUrl = new URL(self.location.href); 145 const currentPath = currentUrl.pathname; 146 const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/')); 147 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 148 149 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 150 path: currentDirectory }); 151 testCase.add_cleanup(async () => { 152 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 153 }); 154 const cookie = await cookieStore.get('cookie-name'); 155 assert_equals(cookie.name, 'cookie-name'); 156 assert_equals(cookie.value, 'cookie-value'); 157 assert_cookie_keys(cookie); 158 159 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 160 assert_equals(internalCookie.path, currentDirectory); 161 }, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /'); 162 163 ['strict', 'lax', 'none'].forEach(sameSiteValue => { 164 promise_test(async testCase => { 165 await cookieStore.delete('cookie-name'); 166 167 await cookieStore.set({ 168 name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue }); 169 testCase.add_cleanup(async () => { 170 await cookieStore.delete('cookie-name'); 171 }); 172 const cookie = await cookieStore.get('cookie-name'); 173 assert_equals(cookie.name, 'cookie-name'); 174 assert_equals(cookie.value, 'cookie-value'); 175 assert_cookie_keys(cookie); 176 177 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 178 assert_equals(internalCookie.sameSite, sameSiteValue.charAt(0).toUpperCase() + sameSiteValue.slice(1)); 179 }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`); 180 181 }); 182 183 promise_test(async testCase => { 184 await cookieStore.delete('cookie-name'); 185 testCase.add_cleanup(async () => { 186 await cookieStore.delete('cookie-name'); 187 }); 188 189 let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/")); 190 await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`); 191 192 assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.'); 193 194 const cookie = await cookieStore.get('cookie-name'); 195 assert_equals(cookie.name, 'cookie-name'); 196 assert_equals(cookie.value, '1'); 197 assert_cookie_keys(cookie); 198 199 const internalCookie = await test_driver.get_named_cookie('cookie-name'); 200 assert_approx_equals(internalCookie.expiry, fourHundredDaysFromNowInSeconds, oneDayInSeconds); 201 }, "Test max-age attribute over the 400 days");