summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/siteData/browser_siteData2.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/siteData/browser_siteData2.js')
-rw-r--r--browser/components/preferences/tests/siteData/browser_siteData2.js475
1 files changed, 475 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/siteData/browser_siteData2.js b/browser/components/preferences/tests/siteData/browser_siteData2.js
new file mode 100644
index 0000000000..863a8dcefe
--- /dev/null
+++ b/browser/components/preferences/tests/siteData/browser_siteData2.js
@@ -0,0 +1,475 @@
+"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);
+});