"use strict"; // Test not displaying sites which store 0 byte and don't have persistent storage. add_task(async function test_exclusions() { let hosts = await addTestData([ { usage: 0, origin: "https://account.xyz.com", persisted: true, }, { usage: 0, 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: 0, origin: "http://cookies.bar.com", cookies: 5, persisted: false, }, ]); let updatePromise = promiseSiteDataManagerSitesUpdated(); let doc = gBrowser.selectedBrowser.contentDocument; await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); await updatePromise; await openSiteDataSettingsDialog(); assertSitesListed( doc, hosts.filter(host => host != "shopping.xyz.com") ); await SiteDataTestUtils.clear(); BrowserTestUtils.removeTab(gBrowser.selectedTab); }); // Test grouping and listing sites across scheme, port and origin attributes by host add_task(async function test_grouping() { let quotaUsage = 7000000; await addTestData([ { usage: quotaUsage, origin: "https://account.xyz.com^userContextId=1", cookies: 2, persisted: true, }, { usage: quotaUsage, origin: "https://account.xyz.com", cookies: 1, persisted: false, }, { usage: quotaUsage, origin: "https://account.xyz.com:123", cookies: 1, persisted: false, }, { usage: quotaUsage, origin: "http://account.xyz.com", cookies: 1, persisted: false, }, ]); let updatedPromise = promiseSiteDataManagerSitesUpdated(); await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); await updatedPromise; await openSiteDataSettingsDialog(); let win = gBrowser.selectedBrowser.contentWindow; let dialogFrame = win.gSubDialog._topDialog._frame; let frameDoc = dialogFrame.contentDocument; let siteItems = frameDoc.getElementsByTagName("richlistitem"); is( siteItems.length, 1, "Should group sites across scheme, port and origin attributes" ); let columns = siteItems[0].querySelectorAll(".item-box > label"); let expected = "account.xyz.com"; is(columns[0].value, expected, "Should group and list sites by host"); is( columns[1].value, "5", "Should group cookies across scheme, port and origin attributes" ); let [value, unit] = DownloadUtils.convertByteUnits(quotaUsage * 4); let l10nAttributes = frameDoc.l10n.getAttributes(columns[2]); is( l10nAttributes.id, "site-storage-persistent", "Should show the site as persistent if one origin is persistent." ); // The shown quota can be slightly larger than the raw data we put in (though it should // never be smaller), but that doesn't really matter to us since we only want to test that // the site data dialog accumulates this into a single column. ok( parseFloat(l10nAttributes.args.value) >= parseFloat(value), "Should show the correct accumulated quota size." ); is( l10nAttributes.args.unit, unit, "Should show the correct quota size unit." ); await SiteDataTestUtils.clear(); BrowserTestUtils.removeTab(gBrowser.selectedTab); }); // Test sorting add_task(async function test_sorting() { let testData = [ { baseDomain: "xyz.com", usage: 1024, origin: "https://account.xyz.com", cookies: 6, persisted: true, }, { baseDomain: "foo.com", usage: 1024 * 2, origin: "https://books.foo.com", cookies: 0, persisted: false, }, { baseDomain: "bar.com", usage: 1024 * 3, origin: "http://cinema.bar.com", cookies: 3, persisted: true, }, ]; await addTestData(testData); let updatePromise = promiseSiteDataManagerSitesUpdated(); await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); await updatePromise; await openSiteDataSettingsDialog(); let dialog = content.gSubDialog._topDialog; let dialogFrame = dialog._frame; let frameDoc = dialogFrame.contentDocument; let hostCol = frameDoc.getElementById("hostCol"); let usageCol = frameDoc.getElementById("usageCol"); let cookiesCol = frameDoc.getElementById("cookiesCol"); let sitesList = frameDoc.getElementById("sitesList"); function getHostOrder() { let siteItems = sitesList.getElementsByTagName("richlistitem"); return Array.from(siteItems).map(item => item.getAttribute("host")); } // Test default sorting by usage, descending. Assert.deepEqual( getHostOrder(), ["cinema.bar.com", "books.foo.com", "account.xyz.com"], "Has sorted descending by usage" ); // Test sorting on the usage column usageCol.click(); Assert.deepEqual( getHostOrder(), ["account.xyz.com", "books.foo.com", "cinema.bar.com"], "Has sorted ascending by usage" ); usageCol.click(); Assert.deepEqual( getHostOrder(), ["cinema.bar.com", "books.foo.com", "account.xyz.com"], "Has sorted descending by usage" ); // Test sorting on the host column hostCol.click(); Assert.deepEqual( getHostOrder(), ["cinema.bar.com", "books.foo.com", "account.xyz.com"], "Has sorted ascending by base domain" ); hostCol.click(); Assert.deepEqual( getHostOrder(), ["account.xyz.com", "books.foo.com", "cinema.bar.com"], "Has sorted descending by base domain" ); // Test sorting on the cookies column cookiesCol.click(); Assert.deepEqual( getHostOrder(), ["books.foo.com", "cinema.bar.com", "account.xyz.com"], "Has sorted ascending by cookies" ); cookiesCol.click(); Assert.deepEqual( getHostOrder(), ["account.xyz.com", "cinema.bar.com", "books.foo.com"], "Has sorted descending by cookies" ); await SiteDataTestUtils.clear(); BrowserTestUtils.removeTab(gBrowser.selectedTab); });