browser_siteData2.js (14545B)
1 "use strict"; 2 3 function assertAllSitesNotListed(win) { 4 let frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 5 let removeBtn = frameDoc.getElementById("removeSelected"); 6 let removeAllBtn = frameDoc.getElementById("removeAll"); 7 let sitesList = frameDoc.getElementById("sitesList"); 8 let sites = sitesList.getElementsByTagName("richlistitem"); 9 is(sites.length, 0, "Should not list all sites"); 10 is(removeBtn.disabled, true, "Should disable the removeSelected button"); 11 is(removeAllBtn.disabled, true, "Should disable the removeAllBtn button"); 12 } 13 14 // Test selecting and removing all sites one by one 15 add_task(async function test_selectRemove() { 16 let hosts = await addTestData([ 17 { 18 usage: 1024, 19 origin: "https://account.xyz.com", 20 persisted: true, 21 }, 22 { 23 usage: 1024, 24 origin: "https://shopping.xyz.com", 25 }, 26 { 27 usage: 1024, 28 origin: "http://cinema.bar.com", 29 persisted: true, 30 }, 31 { 32 usage: 1024, 33 origin: "http://email.bar.com", 34 }, 35 ]); 36 37 let updatePromise = promiseSiteDataManagerSitesUpdated(); 38 39 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 40 await updatePromise; 41 await openSiteDataSettingsDialog(); 42 43 let win = gBrowser.selectedBrowser.contentWindow; 44 let doc = gBrowser.selectedBrowser.contentDocument; 45 let frameDoc = null; 46 let saveBtn = null; 47 let cancelBtn = null; 48 let settingsDialogClosePromise = null; 49 50 // Test the initial state 51 assertSitesListed(doc, hosts); 52 53 // Test the "Cancel" button 54 settingsDialogClosePromise = promiseSettingsDialogClose(); 55 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 56 cancelBtn = frameDoc.querySelector("dialog").getButton("cancel"); 57 removeAllSitesOneByOne(); 58 assertAllSitesNotListed(win); 59 cancelBtn.doCommand(); 60 await settingsDialogClosePromise; 61 await openSiteDataSettingsDialog(); 62 assertSitesListed(doc, hosts); 63 64 // Test the "Save Changes" button but cancelling save 65 let cancelPromise = BrowserTestUtils.promiseAlertDialogOpen("cancel"); 66 settingsDialogClosePromise = promiseSettingsDialogClose(); 67 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 68 saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 69 cancelBtn = frameDoc.querySelector("dialog").getButton("cancel"); 70 removeAllSitesOneByOne(); 71 assertAllSitesNotListed(win); 72 saveBtn.doCommand(); 73 await cancelPromise; 74 cancelBtn.doCommand(); 75 await settingsDialogClosePromise; 76 await openSiteDataSettingsDialog(); 77 assertSitesListed(doc, hosts); 78 79 // Test the "Save Changes" button and accepting save 80 let acceptPromise = BrowserTestUtils.promiseAlertDialogOpen("accept"); 81 settingsDialogClosePromise = promiseSettingsDialogClose(); 82 updatePromise = promiseSiteDataManagerSitesUpdated(); 83 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 84 saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 85 removeAllSitesOneByOne(); 86 assertAllSitesNotListed(win); 87 saveBtn.doCommand(); 88 await acceptPromise; 89 await settingsDialogClosePromise; 90 await updatePromise; 91 await openSiteDataSettingsDialog(); 92 assertAllSitesNotListed(win); 93 94 await SiteDataTestUtils.clear(); 95 BrowserTestUtils.removeTab(gBrowser.selectedTab); 96 97 function removeAllSitesOneByOne() { 98 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 99 let removeBtn = frameDoc.getElementById("removeSelected"); 100 let sitesList = frameDoc.getElementById("sitesList"); 101 let sites = sitesList.getElementsByTagName("richlistitem"); 102 for (let i = sites.length - 1; i >= 0; --i) { 103 sites[i].click(); 104 removeBtn.doCommand(); 105 } 106 } 107 }); 108 109 // Test selecting and removing partial sites 110 add_task(async function test_removePartialSites() { 111 let hosts = await addTestData([ 112 { 113 usage: 1024, 114 origin: "https://account.xyz.com", 115 persisted: true, 116 }, 117 { 118 usage: 1024, 119 origin: "https://shopping.xyz.com", 120 persisted: false, 121 }, 122 { 123 usage: 1024, 124 origin: "http://cinema.bar.com", 125 persisted: true, 126 }, 127 { 128 usage: 1024, 129 origin: "http://email.bar.com", 130 persisted: false, 131 }, 132 { 133 usage: 1024, 134 origin: "https://s3-us-west-2.amazonaws.com", 135 persisted: true, 136 }, 137 { 138 usage: 1024, 139 origin: "https://127.0.0.1", 140 persisted: false, 141 }, 142 ]); 143 144 let updatePromise = promiseSiteDataManagerSitesUpdated(); 145 146 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 147 await updatePromise; 148 await openSiteDataSettingsDialog(); 149 150 let win = gBrowser.selectedBrowser.contentWindow; 151 let doc = gBrowser.selectedBrowser.contentDocument; 152 let frameDoc = null; 153 let saveBtn = null; 154 let cancelBtn = null; 155 let removeDialogOpenPromise = null; 156 let settingsDialogClosePromise = null; 157 158 // Test the initial state 159 assertSitesListed(doc, hosts); 160 161 // Test the "Cancel" button 162 settingsDialogClosePromise = promiseSettingsDialogClose(); 163 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 164 cancelBtn = frameDoc.querySelector("dialog").getButton("cancel"); 165 removeSelectedSite(hosts.slice(0, 2)); 166 assertSitesListed(doc, hosts.slice(2)); 167 cancelBtn.doCommand(); 168 await settingsDialogClosePromise; 169 await openSiteDataSettingsDialog(); 170 assertSitesListed(doc, hosts); 171 172 // Test the "Save Changes" button but canceling save 173 removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen( 174 "cancel", 175 REMOVE_DIALOG_URL 176 ); 177 settingsDialogClosePromise = promiseSettingsDialogClose(); 178 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 179 saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 180 cancelBtn = frameDoc.querySelector("dialog").getButton("cancel"); 181 removeSelectedSite(hosts.slice(0, 2)); 182 assertSitesListed(doc, hosts.slice(2)); 183 saveBtn.doCommand(); 184 await removeDialogOpenPromise; 185 cancelBtn.doCommand(); 186 await settingsDialogClosePromise; 187 await openSiteDataSettingsDialog(); 188 assertSitesListed(doc, hosts); 189 190 // Test the "Save Changes" button and accepting save 191 removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen( 192 "accept", 193 REMOVE_DIALOG_URL 194 ); 195 settingsDialogClosePromise = promiseSettingsDialogClose(); 196 updatePromise = promiseSiteDataManagerSitesUpdated(); 197 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 198 saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 199 removeSelectedSite(hosts.slice(0, 2)); 200 assertSitesListed(doc, hosts.slice(2)); 201 saveBtn.doCommand(); 202 await removeDialogOpenPromise; 203 await settingsDialogClosePromise; 204 await updatePromise; 205 await openSiteDataSettingsDialog(); 206 assertSitesListed(doc, hosts.slice(2)); 207 208 await SiteDataTestUtils.clear(); 209 BrowserTestUtils.removeTab(gBrowser.selectedTab); 210 211 function removeSelectedSite(removeHosts) { 212 frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 213 let removeBtn = frameDoc.getElementById("removeSelected"); 214 is( 215 removeBtn.disabled, 216 true, 217 "Should start with disabled removeSelected button" 218 ); 219 let sitesList = frameDoc.getElementById("sitesList"); 220 removeHosts.forEach(host => { 221 let site = sitesList.querySelector(`richlistitem[host="${host}"]`); 222 if (site) { 223 site.click(); 224 let currentSelectedIndex = sitesList.selectedIndex; 225 is( 226 removeBtn.disabled, 227 false, 228 "Should enable the removeSelected button" 229 ); 230 removeBtn.doCommand(); 231 let newSelectedIndex = sitesList.selectedIndex; 232 if (currentSelectedIndex >= sitesList.itemCount) { 233 is(newSelectedIndex, currentSelectedIndex - 1); 234 } else { 235 is(newSelectedIndex, currentSelectedIndex); 236 } 237 } else { 238 ok(false, `Should not select and remove inexistent site of ${host}`); 239 } 240 }); 241 } 242 }); 243 244 // Test searching and then removing only visible sites 245 add_task(async function () { 246 let hosts = await addTestData([ 247 { 248 usage: 1024, 249 origin: "https://account.xyz.com", 250 persisted: true, 251 }, 252 { 253 usage: 1024, 254 origin: "https://shopping.xyz.com", 255 persisted: false, 256 }, 257 { 258 usage: 1024, 259 origin: "http://cinema.bar.com", 260 persisted: true, 261 }, 262 { 263 usage: 1024, 264 origin: "http://email.bar.com", 265 persisted: false, 266 }, 267 ]); 268 269 let updatePromise = promiseSiteDataManagerSitesUpdated(); 270 271 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 272 await updatePromise; 273 await openSiteDataSettingsDialog(); 274 275 // Search "foo" to only list foo.com sites 276 let win = gBrowser.selectedBrowser.contentWindow; 277 let doc = gBrowser.selectedBrowser.contentDocument; 278 let frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 279 let searchBox = frameDoc.getElementById("searchBox"); 280 await new Promise(resolve => { 281 searchBox.addEventListener("MozInputSearch:search", resolve, { 282 once: true, 283 }); 284 searchBox.select(); 285 EventUtils.sendString("xyz"); 286 }); 287 assertSitesListed( 288 doc, 289 hosts.filter(host => host.includes("xyz")) 290 ); 291 292 // Test only removing all visible sites listed 293 updatePromise = promiseSiteDataManagerSitesUpdated(); 294 let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen( 295 "accept", 296 REMOVE_DIALOG_URL 297 ); 298 let settingsDialogClosePromise = promiseSettingsDialogClose(); 299 let removeAllBtn = frameDoc.getElementById("removeAll"); 300 let saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 301 removeAllBtn.doCommand(); 302 saveBtn.doCommand(); 303 await acceptRemovePromise; 304 await settingsDialogClosePromise; 305 await updatePromise; 306 await openSiteDataSettingsDialog(); 307 assertSitesListed( 308 doc, 309 hosts.filter(host => !host.includes("xyz")) 310 ); 311 312 await SiteDataTestUtils.clear(); 313 BrowserTestUtils.removeTab(gBrowser.selectedTab); 314 }); 315 316 // Test dynamically clearing all site data 317 add_task(async function () { 318 let hosts = await addTestData([ 319 { 320 usage: 1024, 321 origin: "https://account.xyz.com", 322 persisted: true, 323 }, 324 { 325 usage: 1024, 326 origin: "https://shopping.xyz.com", 327 persisted: false, 328 }, 329 ]); 330 331 let updatePromise = promiseSiteDataManagerSitesUpdated(); 332 333 // Test the initial state 334 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 335 await updatePromise; 336 await openSiteDataSettingsDialog(); 337 let doc = gBrowser.selectedBrowser.contentDocument; 338 assertSitesListed(doc, hosts); 339 340 await addTestData([ 341 { 342 usage: 1024, 343 origin: "http://cinema.bar.com", 344 persisted: true, 345 }, 346 { 347 usage: 1024, 348 origin: "http://email.bar.com", 349 persisted: false, 350 }, 351 ]); 352 353 // Test clearing all site data dynamically 354 let win = gBrowser.selectedBrowser.contentWindow; 355 let frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 356 updatePromise = promiseSiteDataManagerSitesUpdated(); 357 let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept"); 358 let settingsDialogClosePromise = promiseSettingsDialogClose(); 359 let removeAllBtn = frameDoc.getElementById("removeAll"); 360 let saveBtn = frameDoc.querySelector("dialog").getButton("accept"); 361 removeAllBtn.doCommand(); 362 saveBtn.doCommand(); 363 await acceptRemovePromise; 364 await settingsDialogClosePromise; 365 await updatePromise; 366 await openSiteDataSettingsDialog(); 367 assertAllSitesNotListed(win); 368 369 await SiteDataTestUtils.clear(); 370 BrowserTestUtils.removeTab(gBrowser.selectedTab); 371 }); 372 373 // Tests clearing search box content via backspace does not delete site data 374 add_task(async function () { 375 let hosts = await addTestData([ 376 { 377 usage: 1024, 378 origin: "https://account.xyz.com", 379 persisted: true, 380 }, 381 { 382 usage: 1024, 383 origin: "https://shopping.xyz.com", 384 persisted: false, 385 }, 386 { 387 usage: 1024, 388 origin: "http://cinema.bar.com", 389 persisted: true, 390 }, 391 { 392 usage: 1024, 393 origin: "http://email.bar.com", 394 persisted: false, 395 }, 396 ]); 397 398 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 399 await openSiteDataSettingsDialog(); 400 401 let win = gBrowser.selectedBrowser.contentWindow; 402 let doc = gBrowser.selectedBrowser.contentDocument; 403 let frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 404 let searchBox = frameDoc.getElementById("searchBox"); 405 await new Promise(resolve => { 406 searchBox.addEventListener("MozInputSearch:search", resolve, { 407 once: true, 408 }); 409 searchBox.select(); 410 EventUtils.sendString("xyz"); 411 }); 412 assertSitesListed( 413 doc, 414 hosts.filter(host => host.includes("xyz")) 415 ); 416 417 // Make sure the focus is on the search box 418 searchBox.focus(); 419 if (AppConstants.platform == "macosx") { 420 EventUtils.synthesizeKey("VK_BACK_SPACE", {}, win); 421 } else { 422 EventUtils.synthesizeKey("VK_DELETE", {}, win); 423 } 424 assertSitesListed( 425 doc, 426 hosts.filter(host => host.includes("xyz")) 427 ); 428 429 await SiteDataTestUtils.clear(); 430 BrowserTestUtils.removeTab(gBrowser.selectedTab); 431 }); 432 433 // Tests remove site data via backspace 434 add_task(async function () { 435 let hosts = await addTestData([ 436 { 437 usage: 1024, 438 origin: "https://account.xyz.com", 439 persisted: true, 440 }, 441 { 442 usage: 1024, 443 origin: "https://shopping.xyz.com", 444 persisted: false, 445 }, 446 { 447 usage: 1024, 448 origin: "http://cinema.bar.com", 449 persisted: true, 450 }, 451 { 452 usage: 1024, 453 origin: "http://email.bar.com", 454 persisted: false, 455 }, 456 ]); 457 458 await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); 459 await openSiteDataSettingsDialog(); 460 461 let win = gBrowser.selectedBrowser.contentWindow; 462 let doc = gBrowser.selectedBrowser.contentDocument; 463 let frameDoc = win.gSubDialog._topDialog._frame.contentDocument; 464 // Test initial state 465 assertSitesListed(doc, hosts); 466 467 let sitesList = frameDoc.getElementById("sitesList"); 468 let site = sitesList.querySelector(`richlistitem[host="xyz.com"]`); 469 if (site) { 470 // Move the focus from the search box to the list and select an item 471 sitesList.focus(); 472 site.click(); 473 if (AppConstants.platform == "macosx") { 474 EventUtils.synthesizeKey("VK_BACK_SPACE", {}, win); 475 } else { 476 EventUtils.synthesizeKey("VK_DELETE", {}, win); 477 } 478 } 479 480 assertSitesListed( 481 doc, 482 hosts.filter(host => !host.includes("xyz")) 483 ); 484 485 await SiteDataTestUtils.clear(); 486 BrowserTestUtils.removeTab(gBrowser.selectedTab); 487 });