browser_cookiePermission_subDomains.js (8868B)
1 const { SiteDataTestUtils } = ChromeUtils.importESModule( 2 "resource://testing-common/SiteDataTestUtils.sys.mjs" 3 ); 4 5 add_setup(async function () { 6 await SpecialPowers.pushPrefEnv({ 7 set: [ 8 ["privacy.sanitize.sanitizeOnShutdown", true], 9 ["privacy.clearOnShutdown.cookies", true], 10 ["privacy.clearOnShutdown.offlineApps", true], 11 ["privacy.clearOnShutdown.cache", false], 12 ["privacy.clearOnShutdown.sessions", false], 13 ["privacy.clearOnShutdown.history", false], 14 ["privacy.clearOnShutdown.formdata", false], 15 ["privacy.clearOnShutdown.downloads", false], 16 ["privacy.clearOnShutdown.siteSettings", false], 17 ["browser.sanitizer.loglevel", "All"], 18 ], 19 }); 20 }); 21 // 2 domains: www.mozilla.org (session-only) mozilla.org (allowed) - after the 22 // cleanp, mozilla.org must have data. 23 add_task(async function subDomains1() { 24 info("Test subdomains and custom setting"); 25 26 // Let's clean up all the data. 27 await new Promise(resolve => { 28 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve); 29 }); 30 31 // Domains and data 32 let originA = "https://www.mozilla.org"; 33 PermissionTestUtils.add( 34 originA, 35 "cookie", 36 Ci.nsICookiePermission.ACCESS_SESSION 37 ); 38 39 SiteDataTestUtils.addToCookies({ origin: originA }); 40 await SiteDataTestUtils.addToIndexedDB(originA); 41 42 let originB = "https://mozilla.org"; 43 PermissionTestUtils.add( 44 originB, 45 "cookie", 46 Ci.nsICookiePermission.ACCESS_ALLOW 47 ); 48 49 SiteDataTestUtils.addToCookies({ origin: originB }); 50 await SiteDataTestUtils.addToIndexedDB(originB); 51 52 // Check 53 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 54 ok( 55 await SiteDataTestUtils.hasIndexedDB(originA), 56 "We have IDB for " + originA 57 ); 58 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 59 ok( 60 await SiteDataTestUtils.hasIndexedDB(originB), 61 "We have IDB for " + originB 62 ); 63 64 // Cleaning up 65 await Sanitizer.runSanitizeOnShutdown(); 66 67 // Check again 68 ok( 69 !SiteDataTestUtils.hasCookies(originA), 70 "We should not have cookies for " + originA 71 ); 72 ok( 73 !(await SiteDataTestUtils.hasIndexedDB(originA)), 74 "We should not have IDB for " + originA 75 ); 76 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 77 ok( 78 await SiteDataTestUtils.hasIndexedDB(originB), 79 "We have IDB for " + originB 80 ); 81 82 // Cleaning up permissions 83 PermissionTestUtils.remove(originA, "cookie"); 84 PermissionTestUtils.remove(originB, "cookie"); 85 }); 86 87 // session only cookie life-time, 2 domains (sub.mozilla.org, www.mozilla.org), 88 // only the former has a cookie permission. 89 add_task(async function subDomains2() { 90 info("Test subdomains and custom setting with cookieBehavior == 2"); 91 92 // Let's clean up all the data. 93 await new Promise(resolve => { 94 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve); 95 }); 96 97 // Domains and data 98 let originA = "https://sub.mozilla.org"; 99 PermissionTestUtils.add( 100 originA, 101 "cookie", 102 Ci.nsICookiePermission.ACCESS_ALLOW 103 ); 104 105 SiteDataTestUtils.addToCookies({ origin: originA }); 106 await SiteDataTestUtils.addToIndexedDB(originA); 107 108 let originB = "https://www.mozilla.org"; 109 110 SiteDataTestUtils.addToCookies({ origin: originB }); 111 await SiteDataTestUtils.addToIndexedDB(originB); 112 113 // Check 114 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 115 ok( 116 await SiteDataTestUtils.hasIndexedDB(originA), 117 "We have IDB for " + originA 118 ); 119 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 120 ok( 121 await SiteDataTestUtils.hasIndexedDB(originB), 122 "We have IDB for " + originB 123 ); 124 125 // Cleaning up 126 await Sanitizer.runSanitizeOnShutdown(); 127 128 // Check again 129 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 130 ok( 131 await SiteDataTestUtils.hasIndexedDB(originA), 132 "We have IDB for " + originA 133 ); 134 ok( 135 !SiteDataTestUtils.hasCookies(originB), 136 "We should not have cookies for " + originB 137 ); 138 ok( 139 !(await SiteDataTestUtils.hasIndexedDB(originB)), 140 "We should not have IDB for " + originB 141 ); 142 143 // Cleaning up permissions 144 PermissionTestUtils.remove(originA, "cookie"); 145 }); 146 147 // session only cookie life-time, 3 domains (sub.mozilla.org, www.mozilla.org, mozilla.org), 148 // only the former has a cookie permission. Both sub.mozilla.org and mozilla.org should 149 // be sustained. 150 add_task(async function subDomains3() { 151 info( 152 "Test base domain and subdomains and custom setting with cookieBehavior == 2" 153 ); 154 155 // Let's clean up all the data. 156 await new Promise(resolve => { 157 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve); 158 }); 159 160 // Domains and data 161 let originA = "https://sub.mozilla.org"; 162 PermissionTestUtils.add( 163 originA, 164 "cookie", 165 Ci.nsICookiePermission.ACCESS_ALLOW 166 ); 167 SiteDataTestUtils.addToCookies({ origin: originA }); 168 await SiteDataTestUtils.addToIndexedDB(originA); 169 170 let originB = "https://mozilla.org"; 171 SiteDataTestUtils.addToCookies({ origin: originB }); 172 await SiteDataTestUtils.addToIndexedDB(originB); 173 174 let originC = "https://www.mozilla.org"; 175 SiteDataTestUtils.addToCookies({ origin: originC }); 176 await SiteDataTestUtils.addToIndexedDB(originC); 177 178 // Check 179 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 180 ok( 181 await SiteDataTestUtils.hasIndexedDB(originA), 182 "We have IDB for " + originA 183 ); 184 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 185 ok( 186 await SiteDataTestUtils.hasIndexedDB(originB), 187 "We have IDB for " + originB 188 ); 189 ok(SiteDataTestUtils.hasCookies(originC), "We have cookies for " + originC); 190 ok( 191 await SiteDataTestUtils.hasIndexedDB(originC), 192 "We have IDB for " + originC 193 ); 194 195 // Cleaning up 196 await Sanitizer.runSanitizeOnShutdown(); 197 198 // Check again 199 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 200 ok( 201 await SiteDataTestUtils.hasIndexedDB(originA), 202 "We have IDB for " + originA 203 ); 204 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 205 ok( 206 await SiteDataTestUtils.hasIndexedDB(originB), 207 "We have IDB for " + originB 208 ); 209 ok( 210 !SiteDataTestUtils.hasCookies(originC), 211 "We should not have cookies for " + originC 212 ); 213 ok( 214 !(await SiteDataTestUtils.hasIndexedDB(originC)), 215 "We should not have IDB for " + originC 216 ); 217 218 // Cleaning up permissions 219 PermissionTestUtils.remove(originA, "cookie"); 220 }); 221 222 // clear on shutdown, 3 domains (sub.sub.mozilla.org, sub.mozilla.org, mozilla.org), 223 // only the former has a cookie permission. Both sub.mozilla.org and mozilla.org should 224 // be sustained due to Permission of sub.sub.mozilla.org 225 add_task(async function subDomains4() { 226 info("Test subdomain cookie permission inheritance with two subdomains"); 227 228 // Let's clean up all the data. 229 await new Promise(resolve => { 230 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve); 231 }); 232 233 // Domains and data 234 let originA = "https://sub.sub.mozilla.org"; 235 PermissionTestUtils.add( 236 originA, 237 "cookie", 238 Ci.nsICookiePermission.ACCESS_ALLOW 239 ); 240 SiteDataTestUtils.addToCookies({ origin: originA }); 241 await SiteDataTestUtils.addToIndexedDB(originA); 242 243 let originB = "https://sub.mozilla.org"; 244 SiteDataTestUtils.addToCookies({ origin: originB }); 245 await SiteDataTestUtils.addToIndexedDB(originB); 246 247 let originC = "https://mozilla.org"; 248 SiteDataTestUtils.addToCookies({ origin: originC }); 249 await SiteDataTestUtils.addToIndexedDB(originC); 250 251 // Check 252 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 253 ok( 254 await SiteDataTestUtils.hasIndexedDB(originA), 255 "We have IDB for " + originA 256 ); 257 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 258 ok( 259 await SiteDataTestUtils.hasIndexedDB(originB), 260 "We have IDB for " + originB 261 ); 262 ok(SiteDataTestUtils.hasCookies(originC), "We have cookies for " + originC); 263 ok( 264 await SiteDataTestUtils.hasIndexedDB(originC), 265 "We have IDB for " + originC 266 ); 267 268 // Cleaning up 269 await Sanitizer.runSanitizeOnShutdown(); 270 271 // Check again 272 ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); 273 ok( 274 await SiteDataTestUtils.hasIndexedDB(originA), 275 "We have IDB for " + originA 276 ); 277 ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); 278 ok( 279 await SiteDataTestUtils.hasIndexedDB(originB), 280 "We have IDB for " + originB 281 ); 282 ok(SiteDataTestUtils.hasCookies(originC), "We have cookies for " + originC); 283 ok( 284 await SiteDataTestUtils.hasIndexedDB(originC), 285 "We have IDB for " + originC 286 ); 287 288 // Cleaning up permissions 289 PermissionTestUtils.remove(originA, "cookie"); 290 });