477 lines
14 KiB
JavaScript
477 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");
|
|
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");
|
|
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();
|
|
updatePromise = promiseSiteDataManagerSitesUpdated();
|
|
frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
|
|
saveBtn = frameDoc.querySelector("dialog").getButton("accept");
|
|
removeSelectedSite(hosts.slice(0, 2));
|
|
assertSitesListed(doc, hosts.slice(2));
|
|
saveBtn.doCommand();
|
|
await removeDialogOpenPromise;
|
|
await settingsDialogClosePromise;
|
|
await updatePromise;
|
|
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);
|
|
});
|