Bug 1442183 - Allow multiple selection in the site data manager list. r=prathiksha

MozReview-Commit-ID: D1u3963xC6C

--HG--
extra : rebase_source : e6e04f7295c7fc354b1c4049d37f943354d6476c
This commit is contained in:
Johann Hofmann 2018-04-11 08:59:49 +02:00
parent 5ccc4a0150
commit 470c2e1592
6 changed files with 101 additions and 19 deletions

View File

@ -12,3 +12,4 @@ support-files =
skip-if = (os == 'linux' && debug) # Bug 1439332
[browser_siteData2.js]
[browser_siteData3.js]
[browser_siteData_multi_select.js]

View File

@ -1,19 +1,5 @@
"use strict";
function promiseSettingsDialogClose() {
return new Promise(resolve => {
let win = gBrowser.selectedBrowser.contentWindow;
let dialogOverlay = win.gSubDialog._topDialog._overlay;
let dialogWin = win.gSubDialog._topDialog._frame.contentWindow;
dialogWin.addEventListener("unload", function unload() {
if (dialogWin.document.documentURI === "chrome://browser/content/preferences/siteDataSettings.xul") {
isnot(dialogOverlay.style.visibility, "visible", "The Settings dialog should be hidden");
resolve();
}
}, { once: true });
});
}
function assertAllSitesNotListed(win) {
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
let removeBtn = frameDoc.getElementById("removeSelected");

View File

@ -0,0 +1,84 @@
"use strict";
// Test selecting and removing partial sites
add_task(async function() {
mockSiteDataManager.register(SiteDataManager, [
{
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
},
{
usage: 1024,
origin: "https://[0:0:0:0:0:0:0:1]",
persisted: true
},
]);
let fakeHosts = mockSiteDataManager.fakeSites.map(site => site.principal.URI.host);
let updatePromise = promiseSiteDataManagerSitesUpdated();
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
await updatePromise;
await openSiteDataSettingsDialog();
let doc = gBrowser.selectedBrowser.contentDocument;
// Test the initial state
assertSitesListed(doc, fakeHosts);
let removeDialogOpenPromise = BrowserTestUtils.promiseAlertDialogOpen("accept", REMOVE_DIALOG_URL);
let settingsDialogClosePromise = promiseSettingsDialogClose();
let win = gBrowser.selectedBrowser.contentWindow;
let frameDoc = win.gSubDialog._topDialog._frame.contentDocument;
// Select some sites to remove.
let sitesList = frameDoc.getElementById("sitesList");
fakeHosts.slice(0, 2).forEach(host => {
let site = sitesList.querySelector(`richlistitem[host="${host}"]`);
sitesList.addItemToSelection(site);
});
let removeBtn = frameDoc.getElementById("removeSelected");
is(removeBtn.disabled, false, "Should enable the removeSelected button");
removeBtn.doCommand();
is(removeBtn.disabled, true, "Should disable the removeSelected button");
let saveBtn = frameDoc.getElementById("save");
assertSitesListed(doc, fakeHosts.slice(2));
saveBtn.doCommand();
await removeDialogOpenPromise;
await settingsDialogClosePromise;
await openSiteDataSettingsDialog();
assertSitesListed(doc, fakeHosts.slice(2));
await mockSiteDataManager.unregister();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -115,6 +115,20 @@ function openSiteDataSettingsDialog() {
return fullyLoadPromise;
}
function promiseSettingsDialogClose() {
return new Promise(resolve => {
let win = gBrowser.selectedBrowser.contentWindow;
let dialogOverlay = win.gSubDialog._topDialog._overlay;
let dialogWin = win.gSubDialog._topDialog._frame.contentWindow;
dialogWin.addEventListener("unload", function unload() {
if (dialogWin.document.documentURI === "chrome://browser/content/preferences/siteDataSettings.xul") {
isnot(dialogOverlay.style.visibility, "visible", "The Settings dialog should be hidden");
resolve();
}
}, { once: true });
});
}
function assertSitesListed(doc, hosts) {
let frameDoc = content.gSubDialog._topDialog._frame.contentDocument;
let removeBtn = frameDoc.getElementById("removeSelected");

View File

@ -259,10 +259,7 @@ let gSiteDataSettings = {
},
onClickRemoveSelected() {
let selected = this._list.selectedItem;
if (selected) {
this._removeSiteItems([selected]);
}
this._removeSiteItems(this._list.selectedItems);
this._list.clearSelection();
},

View File

@ -35,7 +35,7 @@
</hbox>
<separator class="thin"/>
<richlistbox id="sitesList" orient="vertical" flex="1">
<richlistbox seltype="multiple" id="sitesList" orient="vertical" flex="1">
<listheader>
<treecol flex="4" width="50" label="&hostCol.label;" id="hostCol"/>
<treecol flex="1" width="50" label="&cookiesCol.label;" id="cookiesCol"/>