cookieStore_delete_arguments.https.any.js (9419B)
1 // META: title=Cookie Store API: cookieStore.delete() arguments 2 // META: script=resources/cookie-test-helpers.js 3 // META: global=window,serviceworker 4 5 'use strict'; 6 const MAX_COOKIE_NAME_SIZE = 4096; 7 8 promise_test(async testCase => { 9 await cookieStore.set('cookie-name', 'cookie-value'); 10 testCase.add_cleanup(async () => { 11 await setCookieStringHttp(`cookie-name=deleted; Max-Age=0`); 12 }); 13 await cookieStore.delete('cookie-name'); 14 const cookie = await cookieStore.get('cookie-name'); 15 assert_equals(cookie, null); 16 }, 'cookieStore.delete with positional name'); 17 18 promise_test(async testCase => { 19 await cookieStore.set('cookie-name', 'cookie-value'); 20 testCase.add_cleanup(async () => { 21 await setCookieStringHttp(`cookie-name=deleted; Max-Age=0`); 22 }); 23 24 await cookieStore.delete({ name: 'cookie-name' }); 25 const cookie = await cookieStore.get('cookie-name'); 26 assert_equals(cookie, null); 27 }, 'cookieStore.delete with name in options'); 28 29 promise_test(async testCase => { 30 const currentUrl = new URL(self.location.href); 31 const currentDomain = currentUrl.hostname; 32 33 await promise_rejects_js(testCase, TypeError, cookieStore.set( 34 { name: 'cookie-name', value: 'cookie-value', 35 domain: `.${currentDomain}` })); 36 }, 'cookieStore.delete domain starts with "."'); 37 38 promise_test(async testCase => { 39 await promise_rejects_js(testCase, TypeError, cookieStore.set( 40 { name: 'cookie-name', value: 'cookie-value', domain: 'example.com' })); 41 }, 'cookieStore.delete with domain that is not equal current host'); 42 43 promise_test(async testCase => { 44 const currentUrl = new URL(self.location.href); 45 const currentDomain = currentUrl.hostname; 46 await cookieStore.set( 47 { name: 'cookie-name', value: 'cookie-value', domain: currentDomain }); 48 testCase.add_cleanup(async () => { 49 await setCookieStringHttp(`cookie-name=deleted; Domain=${currentDomain}; Max-Age=0`); 50 }); 51 52 await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); 53 const cookie = await cookieStore.get('cookie-name'); 54 assert_equals(cookie, null); 55 }, 'cookieStore.delete with domain set to the current hostname'); 56 57 promise_test(async testCase => { 58 const currentUrl = new URL(self.location.href); 59 const currentDomain = currentUrl.hostname; 60 const subDomain = `sub.${currentDomain}`; 61 62 await promise_rejects_js(testCase, TypeError, cookieStore.delete( 63 { name: 'cookie-name', domain: subDomain })); 64 }, 'cookieStore.delete with domain set to a subdomain of the current hostname'); 65 66 promise_test(async testCase => { 67 const currentUrl = new URL(self.location.href); 68 const currentDomain = currentUrl.hostname; 69 assert_not_equals(currentDomain[0] === '.', 70 'this test assumes that the current hostname does not start with .'); 71 const domainSuffix = currentDomain.substr(1); 72 73 await promise_rejects_js(testCase, TypeError, cookieStore.delete( 74 { name: 'cookie-name', domain: domainSuffix })); 75 }, 'cookieStore.delete with domain set to a non-domain-matching suffix of ' + 76 'the current hostname'); 77 78 promise_test(async testCase => { 79 const currentUrl = new URL(self.location.href); 80 const currentPath = currentUrl.pathname; 81 const currentDirectory = 82 currentPath.substr(0, currentPath.lastIndexOf('/') + 1); 83 await cookieStore.set( 84 { name: 'cookie-name', value: 'cookie-value', path: currentDirectory }); 85 testCase.add_cleanup(async () => { 86 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}; Max-Age=0`); 87 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}/; Max-Age=0`); 88 }); 89 90 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 91 const cookie = await cookieStore.get('cookie-name'); 92 assert_equals(cookie, null); 93 }, 'cookieStore.delete with path set to the current directory'); 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 const subDirectory = currentDirectory + "subdir/"; 101 await cookieStore.set( 102 { name: 'cookie-name', value: 'cookie-value', path: currentDirectory }); 103 testCase.add_cleanup(async () => { 104 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}; Max-Age=0`); 105 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}/; Max-Age=0`); 106 }); 107 108 await cookieStore.delete({ name: 'cookie-name', path: subDirectory }); 109 const cookie = await cookieStore.get('cookie-name'); 110 assert_equals(cookie.name, 'cookie-name'); 111 assert_equals(cookie.value, 'cookie-value'); 112 }, 'cookieStore.delete with path set to subdirectory of the current directory'); 113 114 promise_test(async testCase => { 115 const currentUrl = new URL(self.location.href); 116 const currentPath = currentUrl.pathname; 117 const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/')); 118 await setCookieStringHttp(`cookie-name=cookie-value; Path=${currentDirectory};`); 119 120 testCase.add_cleanup(async () => { 121 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}; Max-Age=0`); 122 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}/; Max-Age=0`); 123 }); 124 125 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 126 const cookie = await cookieStore.get('cookie-name'); 127 assert_equals(cookie, null); 128 }, 'cookieStore.delete does not append / at the end of path'); 129 130 promise_test(async testCase => { 131 if (typeof self.document === 'undefined') { 132 // The test is being run from a service worker context where document is undefined 133 testCase.done(); 134 return; 135 } 136 const currentUrl = new URL(self.location.href); 137 const currentPath = currentUrl.pathname; 138 const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/')); 139 await setCookieStringDocument('cookie-name=cookie-value; path=' + currentDirectory); 140 testCase.add_cleanup(async () => { 141 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}; Max-Age=0`); 142 await setCookieStringHttp(`cookie-name=deleted; Path=${currentDirectory}/; Max-Age=0`); 143 }); 144 await cookieStore.delete({ name: 'cookie-name', path: currentDirectory }); 145 const cookie = await cookieStore.get('cookie-name'); 146 assert_equals(cookie, null); 147 }, 'cookieStore.delete can delete a cookie set by document.cookie if document is defined'); 148 149 promise_test(async testCase => { 150 const currentUrl = new URL(self.location.href); 151 const currentPath = currentUrl.pathname; 152 const currentDirectory = 153 currentPath.substr(0, currentPath.lastIndexOf('/') + 1); 154 const invalidPath = currentDirectory.substr(1); 155 156 await promise_rejects_js(testCase, TypeError, cookieStore.delete( 157 { name: 'cookie-name', path: invalidPath })); 158 }, 'cookieStore.delete with path that does not start with /'); 159 160 promise_test(async testCase => { 161 await cookieStore.set('cookie-name', 'cookie-value'); 162 testCase.add_cleanup(async () => { 163 await setCookieStringHttp(`cookie-name=deleted; Max-Age=0`); 164 }); 165 166 const cookie_attributes = await cookieStore.get('cookie-name'); 167 assert_equals(cookie_attributes.name, 'cookie-name'); 168 assert_equals(cookie_attributes.value, 'cookie-value'); 169 170 await cookieStore.delete(cookie_attributes.name); 171 const cookie = await cookieStore.get('cookie-name'); 172 assert_equals(cookie, null); 173 }, 'cookieStore.delete with get result'); 174 175 promise_test(async testCase => { 176 await cookieStore.set('', 'cookie-value'); 177 testCase.add_cleanup(async () => { 178 await setCookieStringHttp(`=deleted; Max-Age=0`); 179 }); 180 181 await cookieStore.delete(''); 182 const cookie = await cookieStore.get(''); 183 assert_equals(cookie, null); 184 }, 'cookieStore.delete with positional empty name'); 185 186 promise_test(async testCase => { 187 await cookieStore.set('', 'cookie-value'); 188 testCase.add_cleanup(async () => { 189 await setCookieStringHttp(`=deleted; Max-Age=0`); 190 }); 191 192 await cookieStore.delete({ name: '' }); 193 const cookie = await cookieStore.get(''); 194 assert_equals(cookie, null); 195 }, 'cookieStore.delete with empty name in options'); 196 197 promise_test(async testCase => { 198 const cookieName = 't'.repeat(MAX_COOKIE_NAME_SIZE); 199 await cookieStore.set(cookieName, ''); 200 testCase.add_cleanup(async () => { 201 await setCookieStringHttp(cookieName + '=; Max-Age=0'); 202 }); 203 204 await cookieStore.delete({name: cookieName}); 205 const cookie = await cookieStore.get(cookieName); 206 assert_equals(cookie, null); 207 }, 'cookieStore.delete with maximum cookie name size'); 208 209 promise_test(async testCase => { 210 // Cookies having a __Host- prefix are not allowed to specify a domain 211 await cookieStore.delete('cookie-name'); 212 213 const currentUrl = new URL(self.location.href); 214 const currentDomain = currentUrl.hostname; 215 216 await promise_rejects_js(testCase, TypeError, cookieStore.delete( 217 { name: '__Host-cookie-name', 218 value: 'cookie-value', 219 domain: currentDomain })); 220 const cookie = await cookieStore.get('cookie-name'); 221 assert_equals(cookie, null); 222 }, 'cookieStore.delete with a __Host- prefix should not have a domain'); 223 224 promise_test(async testCase => { 225 await cookieStore.set('cookie-name', 'cookie-value'); 226 testCase.add_cleanup(async () => { 227 await cookieStore.delete('cookie-name'); 228 }); 229 const cookie = await cookieStore.delete(' cookie-name \t'); 230 assert_equals(cookie, undefined); 231 }, 'cookieStore.delete with whitespace');