browser_cleanup.js (6991B)
1 /* eslint-disable mozilla/no-arbitrary-setTimeout */ 2 3 const TEST_HOST = "example.org"; 4 const TEST_DOMAIN = "https://" + TEST_HOST; 5 const TEST_PATH = "/browser/dom/reporting/tests/"; 6 const TEST_TOP_PAGE = TEST_DOMAIN + TEST_PATH + "empty.html"; 7 const TEST_SJS = TEST_DOMAIN + TEST_PATH + "delivering.sjs"; 8 9 async function storeReportingHeader(browser, extraParams = "") { 10 await SpecialPowers.spawn( 11 browser, 12 [{ url: TEST_SJS, extraParams }], 13 async obj => { 14 await content 15 .fetch( 16 obj.url + 17 "?task=header" + 18 (obj.extraParams.length ? "&" + obj.extraParams : "") 19 ) 20 .then(r => r.text()) 21 .then(text => { 22 is(text, "OK", "Report-to header sent"); 23 }); 24 } 25 ); 26 } 27 28 add_task(async function () { 29 await SpecialPowers.flushPrefEnv(); 30 await SpecialPowers.pushPrefEnv({ 31 set: [ 32 ["dom.reporting.enabled", true], 33 ["dom.reporting.header.enabled", true], 34 ["dom.reporting.testing.enabled", true], 35 ["dom.reporting.delivering.timeout", 1], 36 ["dom.reporting.cleanup.timeout", 1], 37 ["privacy.userContext.enabled", true], 38 ], 39 }); 40 }); 41 42 add_task(async function () { 43 info("Testing a total cleanup"); 44 45 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE); 46 gBrowser.selectedTab = tab; 47 48 let browser = gBrowser.getBrowserForTab(tab); 49 await BrowserTestUtils.browserLoaded(browser); 50 51 ok( 52 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 53 "No data before the test" 54 ); 55 56 await storeReportingHeader(browser); 57 ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data"); 58 59 await new Promise(resolve => { 60 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () => 61 resolve() 62 ); 63 }); 64 65 ok( 66 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 67 "No data before a full cleanup" 68 ); 69 70 info("Removing the tab"); 71 BrowserTestUtils.removeTab(tab); 72 }); 73 74 add_task(async function () { 75 info("Testing a total QuotaManager cleanup"); 76 77 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE); 78 gBrowser.selectedTab = tab; 79 80 let browser = gBrowser.getBrowserForTab(tab); 81 await BrowserTestUtils.browserLoaded(browser); 82 83 ok( 84 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 85 "No data before the test" 86 ); 87 88 await storeReportingHeader(browser); 89 ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data"); 90 91 await new Promise(resolve => { 92 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_REPORTS, () => 93 resolve() 94 ); 95 }); 96 97 ok( 98 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 99 "No data before a reports cleanup" 100 ); 101 102 info("Removing the tab"); 103 BrowserTestUtils.removeTab(tab); 104 }); 105 106 add_task(async function () { 107 info("Testing a QuotaManager host cleanup"); 108 109 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE); 110 gBrowser.selectedTab = tab; 111 112 let browser = gBrowser.getBrowserForTab(tab); 113 await BrowserTestUtils.browserLoaded(browser); 114 115 ok( 116 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 117 "No data before the test" 118 ); 119 120 await storeReportingHeader(browser); 121 ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data"); 122 123 await new Promise(resolve => { 124 Services.clearData.deleteDataFromHost( 125 TEST_HOST, 126 true, 127 Ci.nsIClearDataService.CLEAR_REPORTS, 128 () => resolve() 129 ); 130 }); 131 132 ok( 133 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 134 "No data before a reports cleanup" 135 ); 136 137 info("Removing the tab"); 138 BrowserTestUtils.removeTab(tab); 139 }); 140 141 add_task(async function () { 142 info("Testing a 410 endpoint status"); 143 144 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE); 145 gBrowser.selectedTab = tab; 146 147 let browser = gBrowser.getBrowserForTab(tab); 148 await BrowserTestUtils.browserLoaded(browser); 149 150 ok( 151 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 152 "No data before the test" 153 ); 154 155 await storeReportingHeader(browser, "410=true"); 156 ok(ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "We have data"); 157 158 await SpecialPowers.spawn(browser, [], async _ => { 159 let testingInterface = new content.TestingDeprecatedInterface(); 160 ok(!!testingInterface, "Created a deprecated interface"); 161 }); 162 163 await new Promise((resolve, reject) => { 164 let count = 0; 165 let id = setInterval(_ => { 166 ++count; 167 if (count > 10) { 168 ok(false, "Something went wrong."); 169 clearInterval(id); 170 reject(); 171 } 172 173 if (!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN)) { 174 ok(true, "No data after a 410!"); 175 clearInterval(id); 176 resolve(); 177 } 178 }, 1000); 179 }); 180 181 info("Removing the tab"); 182 BrowserTestUtils.removeTab(tab); 183 }); 184 185 add_task(async function () { 186 info("Creating a new container"); 187 188 let identity = ContextualIdentityService.create( 189 "Report-To-Test", 190 "fingerprint", 191 "orange" 192 ); 193 194 info("Creating a new container tab"); 195 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE, { 196 userContextId: identity.userContextId, 197 }); 198 is( 199 tab.getAttribute("usercontextid"), 200 "" + identity.userContextId, 201 "New tab has the right UCI" 202 ); 203 gBrowser.selectedTab = tab; 204 205 let browser = gBrowser.getBrowserForTab(tab); 206 await BrowserTestUtils.browserLoaded(browser); 207 208 ok( 209 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 210 "No data before the test" 211 ); 212 213 await storeReportingHeader(browser); 214 ok( 215 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 216 "We don't have data for the origin" 217 ); 218 ok( 219 ChromeUtils.hasReportingHeaderForOrigin( 220 TEST_DOMAIN + "^userContextId=" + identity.userContextId 221 ), 222 "We have data for the origin + userContextId" 223 ); 224 225 info("Removing the tab"); 226 BrowserTestUtils.removeTab(tab); 227 228 ContextualIdentityService.remove(identity.userContextId); 229 230 ok( 231 !ChromeUtils.hasReportingHeaderForOrigin( 232 TEST_DOMAIN + "^userContextId=" + identity.userContextId 233 ), 234 "No more data after a container removal" 235 ); 236 }); 237 238 add_task(async function () { 239 info("TTL cleanup"); 240 241 let tab = BrowserTestUtils.addTab(gBrowser, TEST_TOP_PAGE); 242 gBrowser.selectedTab = tab; 243 244 let browser = gBrowser.getBrowserForTab(tab); 245 await BrowserTestUtils.browserLoaded(browser); 246 247 ok( 248 !ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 249 "No data before the test" 250 ); 251 252 await storeReportingHeader(browser); 253 ok( 254 ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), 255 "We have data for the origin" 256 ); 257 258 // Let's wait a bit. 259 await new Promise(resolve => { 260 setTimeout(resolve, 5000); 261 }); 262 263 ok(!ChromeUtils.hasReportingHeaderForOrigin(TEST_DOMAIN), "No data anymore"); 264 265 info("Removing the tab"); 266 BrowserTestUtils.removeTab(tab); 267 }); 268 269 add_task(async function () { 270 info("Cleaning up."); 271 await new Promise(resolve => { 272 Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () => 273 resolve() 274 ); 275 }); 276 });