cookieListItem_attributes.https.any.js (5797B)
1 // META: title=Cookie Store API: cookieListItem attributes 2 // META: global=serviceworker 3 4 // This is a copy of cookieListItem_attributes.https.window.js, minus all the bits that only work 5 // in a window context, which unfortunately includes the testdriver asserts. 6 // 7 // Please keep them synchronized. 8 9 'use strict'; 10 11 const currentHostname = (new URL(self.location.href)).hostname; 12 13 const oneDayInSeconds = 24 * 60 * 60; 14 const fourHundredDaysInSeconds = 400 * oneDayInSeconds; 15 const tenYearsInSeconds = 10 * 365 * oneDayInSeconds; 16 const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds; 17 const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds; 18 19 function assert_cookie_keys(cookie) { 20 const cookieKeys = Object.keys(cookie); 21 assert_array_equals(cookieKeys, ['name', 'value']); 22 } 23 24 promise_test(async testCase => { 25 await cookieStore.delete('cookie-name'); 26 27 await cookieStore.set('cookie-name', 'cookie-value'); 28 testCase.add_cleanup(async () => { 29 await cookieStore.delete('cookie-name'); 30 }); 31 32 const cookie = await cookieStore.get('cookie-name'); 33 assert_equals(cookie.name, 'cookie-name'); 34 assert_equals(cookie.value, 'cookie-value'); 35 assert_cookie_keys(cookie); 36 }, 'CookieListItem - cookieStore.set defaults with positional name and value'); 37 38 promise_test(async testCase => { 39 await cookieStore.delete('cookie-name'); 40 41 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' }); 42 testCase.add_cleanup(async () => { 43 await cookieStore.delete('cookie-name'); 44 }); 45 const cookie = await cookieStore.get('cookie-name'); 46 assert_equals(cookie.name, 'cookie-name'); 47 assert_equals(cookie.value, 'cookie-value'); 48 assert_cookie_keys(cookie); 49 }, 'CookieListItem - cookieStore.set defaults with name and value in options'); 50 51 promise_test(async testCase => { 52 await cookieStore.delete('cookie-name'); 53 54 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 55 expires: tenYearsFromNowInSeconds * 1000 }); 56 testCase.add_cleanup(async () => { 57 await cookieStore.delete('cookie-name'); 58 }); 59 const cookie = await cookieStore.get('cookie-name'); 60 assert_equals(cookie.name, 'cookie-name'); 61 assert_equals(cookie.value, 'cookie-value'); 62 assert_cookie_keys(cookie); 63 }, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' + 64 'years in the future'); 65 66 promise_test(async testCase => { 67 await cookieStore.delete('cookie-name'); 68 69 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 70 expires: new Date(tenYearsFromNowInSeconds) * 1000 }); 71 testCase.add_cleanup(async () => { 72 await cookieStore.delete('cookie-name'); 73 }); 74 const cookie = await cookieStore.get('cookie-name'); 75 assert_equals(cookie.name, 'cookie-name'); 76 assert_equals(cookie.value, 'cookie-value'); 77 assert_cookie_keys(cookie); 78 }, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' + 79 'years in the future'); 80 81 promise_test(async testCase => { 82 await cookieStore.delete({ name: 'cookie-name', domain: currentHostname }); 83 84 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 85 domain: currentHostname }); 86 testCase.add_cleanup(async () => { 87 await cookieStore.delete({ name: 'cookie-name', domain: currentHostname }); 88 }); 89 const cookie = await cookieStore.get('cookie-name'); 90 assert_equals(cookie.name, 'cookie-name'); 91 assert_equals(cookie.value, 'cookie-value'); 92 assert_cookie_keys(cookie); 93 }, 'CookieListItem - cookieStore.set with domain set to the current hostname'); 94 95 promise_test(async testCase => { 96 const currentUrl = new URL(self.location.href); 97 const currentPath = currentUrl.pathname; 98 const currentDirectory = 99 currentPath.substr(0, currentPath.lastIndexOf('/') + 1); 100 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 101 102 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 103 path: currentDirectory }); 104 testCase.add_cleanup(async () => { 105 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 106 }); 107 const cookie = await cookieStore.get('cookie-name'); 108 assert_equals(cookie.name, 'cookie-name'); 109 assert_equals(cookie.value, 'cookie-value'); 110 assert_cookie_keys(cookie); 111 }, 'CookieListItem - cookieStore.set with path set to the current directory'); 112 113 promise_test(async testCase => { 114 const currentUrl = new URL(self.location.href); 115 const currentPath = currentUrl.pathname; 116 const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/')); 117 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 118 119 await cookieStore.set({ name: 'cookie-name', value: 'cookie-value', 120 path: currentDirectory }); 121 testCase.add_cleanup(async () => { 122 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 123 }); 124 const cookie = await cookieStore.get('cookie-name'); 125 assert_equals(cookie.name, 'cookie-name'); 126 assert_equals(cookie.value, 'cookie-value'); 127 assert_cookie_keys(cookie); 128 }, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /'); 129 130 ['strict', 'lax', 'none'].forEach(sameSiteValue => { 131 promise_test(async testCase => { 132 await cookieStore.delete('cookie-name'); 133 134 await cookieStore.set({ 135 name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue }); 136 testCase.add_cleanup(async () => { 137 await cookieStore.delete('cookie-name'); 138 }); 139 const cookie = await cookieStore.get('cookie-name'); 140 assert_equals(cookie.name, 'cookie-name'); 141 assert_equals(cookie.value, 'cookie-value'); 142 assert_cookie_keys(cookie); 143 }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`); 144 145 });