forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			475 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			475 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| function assertAllSitesNotListed(win) {
 | |
|   let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   let removeBtn = frameDoc.getElementById("removeSelected");
 | |
|   let removeAllBtn = frameDoc.getElementById("removeAll");
 | |
|   let sitesList = frameDoc.getElementById("sitesList");
 | |
|   let sites = sitesList.getElementsByTagName("richlistitem");
 | |
|   is(sites.length, 0, "Should not list all sites");
 | |
|   is(removeBtn.disabled, true, "Should disable the removeSelected button");
 | |
|   is(removeAllBtn.disabled, true, "Should disable the removeAllBtn button");
 | |
| }
 | |
| 
 | |
| // Test selecting and removing all sites one by one
 | |
| add_task(async function test_selectRemove() {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   let updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
| 
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
| 
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   let frameDoc = null;
 | |
|   let saveBtn = null;
 | |
|   let cancelBtn = null;
 | |
|   let settingsDialogClosePromise = null;
 | |
| 
 | |
|   // Test the initial state
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Cancel" button
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   cancelBtn = frameDoc.querySelector("dialog").getButton("cancel");
 | |
|   removeAllSitesOneByOne();
 | |
|   assertAllSitesNotListed(win);
 | |
|   cancelBtn.doCommand();
 | |
|   await settingsDialogClosePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Save Changes" button but cancelling save
 | |
|   let cancelPromise = BrowserTestUtils.promiseAlertDialogOpen("cancel");
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   cancelBtn = frameDoc.querySelector("dialog").getButton("cancel");
 | |
|   removeAllSitesOneByOne();
 | |
|   assertAllSitesNotListed(win);
 | |
|   saveBtn.doCommand();
 | |
|   await cancelPromise;
 | |
|   cancelBtn.doCommand();
 | |
|   await settingsDialogClosePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Save Changes" button and accepting save
 | |
|   let acceptPromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   removeAllSitesOneByOne();
 | |
|   assertAllSitesNotListed(win);
 | |
|   saveBtn.doCommand();
 | |
|   await acceptPromise;
 | |
|   await settingsDialogClosePromise;
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertAllSitesNotListed(win);
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| 
 | |
|   function removeAllSitesOneByOne() {
 | |
|     frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|     let removeBtn = frameDoc.getElementById("removeSelected");
 | |
|     let sitesList = frameDoc.getElementById("sitesList");
 | |
|     let sites = sitesList.getElementsByTagName("richlistitem");
 | |
|     for (let i = sites.length - 1; i >= 0; --i) {
 | |
|       sites[i].click();
 | |
|       removeBtn.doCommand();
 | |
|     }
 | |
|   }
 | |
| });
 | |
| 
 | |
| // Test selecting and removing partial sites
 | |
| add_task(async function test_removePartialSites() {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://s3-us-west-2.amazonaws.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://127.0.0.1",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   let updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
| 
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
| 
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   let frameDoc = null;
 | |
|   let saveBtn = null;
 | |
|   let cancelBtn = null;
 | |
|   let removeDialogOpenPromise = null;
 | |
|   let settingsDialogClosePromise = null;
 | |
| 
 | |
|   // Test the initial state
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Cancel" button
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   cancelBtn = frameDoc.querySelector("dialog").getButton("cancel");
 | |
|   await removeSelectedSite(hosts.slice(0, 2));
 | |
|   assertSitesListed(doc, hosts.slice(2));
 | |
|   cancelBtn.doCommand();
 | |
|   await settingsDialogClosePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Save Changes" button but canceling save
 | |
|   removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen(
 | |
|     "cancel",
 | |
|     REMOVE_DIALOG_URL
 | |
|   );
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   cancelBtn = frameDoc.querySelector("dialog").getButton("cancel");
 | |
|   await removeSelectedSite(hosts.slice(0, 2));
 | |
|   assertSitesListed(doc, hosts.slice(2));
 | |
|   saveBtn.doCommand();
 | |
|   await removeDialogOpenPromise;
 | |
|   cancelBtn.doCommand();
 | |
|   await settingsDialogClosePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   // Test the "Save Changes" button and accepting save
 | |
|   removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen(
 | |
|     "accept",
 | |
|     REMOVE_DIALOG_URL
 | |
|   );
 | |
|   settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   await removeSelectedSite(hosts.slice(0, 2));
 | |
|   assertSitesListed(doc, hosts.slice(2));
 | |
|   saveBtn.doCommand();
 | |
|   await removeDialogOpenPromise;
 | |
|   await settingsDialogClosePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(doc, hosts.slice(2));
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| 
 | |
|   function removeSelectedSite(removeHosts) {
 | |
|     frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|     let removeBtn = frameDoc.getElementById("removeSelected");
 | |
|     is(
 | |
|       removeBtn.disabled,
 | |
|       true,
 | |
|       "Should start with disabled removeSelected button"
 | |
|     );
 | |
|     let sitesList = frameDoc.getElementById("sitesList");
 | |
|     removeHosts.forEach(host => {
 | |
|       let site = sitesList.querySelector(`richlistitem[host="${host}"]`);
 | |
|       if (site) {
 | |
|         site.click();
 | |
|         let currentSelectedIndex = sitesList.selectedIndex;
 | |
|         is(
 | |
|           removeBtn.disabled,
 | |
|           false,
 | |
|           "Should enable the removeSelected button"
 | |
|         );
 | |
|         removeBtn.doCommand();
 | |
|         let newSelectedIndex = sitesList.selectedIndex;
 | |
|         if (currentSelectedIndex >= sitesList.itemCount) {
 | |
|           is(newSelectedIndex, currentSelectedIndex - 1);
 | |
|         } else {
 | |
|           is(newSelectedIndex, currentSelectedIndex);
 | |
|         }
 | |
|       } else {
 | |
|         ok(false, `Should not select and remove inexistent site of ${host}`);
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| });
 | |
| 
 | |
| // Test searching and then removing only visible sites
 | |
| add_task(async function () {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   let updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
| 
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
| 
 | |
|   // Search "foo" to only list foo.com sites
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   let searchBox = frameDoc.getElementById("searchBox");
 | |
|   searchBox.value = "xyz";
 | |
|   searchBox.doCommand();
 | |
|   assertSitesListed(
 | |
|     doc,
 | |
|     hosts.filter(host => host.includes("xyz"))
 | |
|   );
 | |
| 
 | |
|   // Test only removing all visible sites listed
 | |
|   updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
|   let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen(
 | |
|     "accept",
 | |
|     REMOVE_DIALOG_URL
 | |
|   );
 | |
|   let settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   let removeAllBtn = frameDoc.getElementById("removeAll");
 | |
|   let saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   removeAllBtn.doCommand();
 | |
|   saveBtn.doCommand();
 | |
|   await acceptRemovePromise;
 | |
|   await settingsDialogClosePromise;
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertSitesListed(
 | |
|     doc,
 | |
|     hosts.filter(host => !host.includes("xyz"))
 | |
|   );
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | |
| 
 | |
| // Test dynamically clearing all site data
 | |
| add_task(async function () {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   let updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
| 
 | |
|   // Test the initial state
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   // Test clearing all site data dynamically
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   updatePromise = promiseSiteDataManagerSitesUpdated();
 | |
|   let acceptRemovePromise = BrowserTestUtils.promiseAlertDialogOpen("accept");
 | |
|   let settingsDialogClosePromise = promiseSettingsDialogClose();
 | |
|   let removeAllBtn = frameDoc.getElementById("removeAll");
 | |
|   let saveBtn = frameDoc.querySelector("dialog").getButton("accept");
 | |
|   removeAllBtn.doCommand();
 | |
|   saveBtn.doCommand();
 | |
|   await acceptRemovePromise;
 | |
|   await settingsDialogClosePromise;
 | |
|   await updatePromise;
 | |
|   await openSiteDataSettingsDialog();
 | |
|   assertAllSitesNotListed(win);
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | |
| 
 | |
| // Tests clearing search box content via backspace does not delete site data
 | |
| add_task(async function () {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await openSiteDataSettingsDialog();
 | |
| 
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   let searchBox = frameDoc.getElementById("searchBox");
 | |
|   searchBox.value = "xyz";
 | |
|   searchBox.doCommand();
 | |
|   assertSitesListed(
 | |
|     doc,
 | |
|     hosts.filter(host => host.includes("xyz"))
 | |
|   );
 | |
| 
 | |
|   // Make sure the focus is on the search box
 | |
|   searchBox.focus();
 | |
|   if (AppConstants.platform == "macosx") {
 | |
|     EventUtils.synthesizeKey("VK_BACK_SPACE", {}, win);
 | |
|   } else {
 | |
|     EventUtils.synthesizeKey("VK_DELETE", {}, win);
 | |
|   }
 | |
|   assertSitesListed(
 | |
|     doc,
 | |
|     hosts.filter(host => host.includes("xyz"))
 | |
|   );
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | |
| 
 | |
| // Tests remove site data via backspace
 | |
| add_task(async function () {
 | |
|   let hosts = await addTestData([
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://account.xyz.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "https://shopping.xyz.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://cinema.bar.com",
 | |
|       persisted: true,
 | |
|     },
 | |
|     {
 | |
|       usage: 1024,
 | |
|       origin: "http://email.bar.com",
 | |
|       persisted: false,
 | |
|     },
 | |
|   ]);
 | |
| 
 | |
|   await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
 | |
|   await openSiteDataSettingsDialog();
 | |
| 
 | |
|   let win = gBrowser.selectedBrowser.contentWindow;
 | |
|   let doc = gBrowser.selectedBrowser.contentDocument;
 | |
|   let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
 | |
|   // Test initial state
 | |
|   assertSitesListed(doc, hosts);
 | |
| 
 | |
|   let sitesList = frameDoc.getElementById("sitesList");
 | |
|   let site = sitesList.querySelector(`richlistitem[host="xyz.com"]`);
 | |
|   if (site) {
 | |
|     // Move the focus from the search box to the list and select an item
 | |
|     sitesList.focus();
 | |
|     site.click();
 | |
|     if (AppConstants.platform == "macosx") {
 | |
|       EventUtils.synthesizeKey("VK_BACK_SPACE", {}, win);
 | |
|     } else {
 | |
|       EventUtils.synthesizeKey("VK_DELETE", {}, win);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   assertSitesListed(
 | |
|     doc,
 | |
|     hosts.filter(host => !host.includes("xyz"))
 | |
|   );
 | |
| 
 | |
|   await SiteDataTestUtils.clear();
 | |
|   BrowserTestUtils.removeTab(gBrowser.selectedTab);
 | |
| });
 | 
