Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

"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,
persisted: true,
},
{
usage: 1024,
},
{
usage: 1024,
persisted: true,
},
{
usage: 1024,
},
]);
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,
persisted: true,
},
{
usage: 1024,
persisted: false,
},
{
usage: 1024,
persisted: true,
},
{
usage: 1024,
persisted: false,
},
{
usage: 1024,
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,
persisted: true,
},
{
usage: 1024,
persisted: false,
},
{
usage: 1024,
persisted: true,
},
{
usage: 1024,
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,
persisted: true,
},
{
usage: 1024,
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,
persisted: true,
},
{
usage: 1024,
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,
persisted: true,
},
{
usage: 1024,
persisted: false,
},
{
usage: 1024,
persisted: true,
},
{
usage: 1024,
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,
persisted: true,
},
{
usage: 1024,
persisted: false,
},
{
usage: 1024,
persisted: true,
},
{
usage: 1024,
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);
});