tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit fa3d7c3009495ba39c6c04c115946cf58c389773
parent ee1c5b8158bdac2a799d36ac30783bf897ee2fde
Author: Emma Zuehlcke <emz@mozilla.com>
Date:   Tue, 30 Sep 2025 15:22:26 +0000

Bug 1971439 - Update tests for updated Cookies and Site Data section. r=mstriemer

Differential Revision: https://phabricator.services.mozilla.com/D263917

Diffstat:
Mbrowser/components/preferences/tests/browser_cookies_exceptions.js | 9++++++++-
Mbrowser/components/preferences/tests/browser_ignore_invalid_capability.js | 9++++++++-
Mbrowser/components/preferences/tests/browser_privacy_syncDataClearing.js | 3+++
Mbrowser/components/preferences/tests/browser_privacy_syncDataClearing_v2.js | 3+++
Mbrowser/components/preferences/tests/privacypane_tests_perwindow.js | 10++++++++--
Mbrowser/components/preferences/tests/siteData/browser_clearSiteData.js | 24++++++++++++++++--------
Mbrowser/components/preferences/tests/siteData/browser_clearSiteData_v2.js | 23++++++++++++++---------
Mbrowser/components/preferences/tests/siteData/browser_siteData.js | 29++++++++++++++++-------------
Mbrowser/components/preferences/tests/siteData/head.js | 17++++++++++++++---
9 files changed, 90 insertions(+), 37 deletions(-)

diff --git a/browser/components/preferences/tests/browser_cookies_exceptions.js b/browser/components/preferences/tests/browser_cookies_exceptions.js @@ -537,7 +537,14 @@ async function runTest(test, getObservances) { let promiseSubDialogLoaded = promiseLoadSubDialog( "chrome://browser/content/preferences/dialogs/permissions.xhtml" ); - doc.getElementById("cookieExceptions").doCommand(); + + let cookieExceptionsButton = doc.getElementById("cookieExceptions"); + cookieExceptionsButton.scrollIntoView(); + await EventUtils.synthesizeMouseAtCenter( + cookieExceptionsButton, + {}, + doc.ownerGlobal + ); let win = await promiseSubDialogLoaded; diff --git a/browser/components/preferences/tests/browser_ignore_invalid_capability.js b/browser/components/preferences/tests/browser_ignore_invalid_capability.js @@ -26,7 +26,14 @@ add_task(async function testInvalidCapabilityIgnored() { let promiseSubDialogLoaded = promiseLoadSubDialog( "chrome://browser/content/preferences/dialogs/permissions.xhtml" ); - doc.getElementById("cookieExceptions").doCommand(); + + let cookieExceptionsButton = doc.getElementById("cookieExceptions"); + cookieExceptionsButton.scrollIntoView(); + EventUtils.synthesizeMouseAtCenter( + cookieExceptionsButton, + {}, + doc.ownerGlobal + ); let win = await promiseSubDialogLoaded; doc = win.document; diff --git a/browser/components/preferences/tests/browser_privacy_syncDataClearing.js b/browser/components/preferences/tests/browser_privacy_syncDataClearing.js @@ -199,6 +199,9 @@ add_task(async function test_syncWithCustomPrefs() { alwaysClearBox.click(); + // Wait for UI to update. + await new Promise(resolve => requestAnimationFrame(resolve)); + ok(!alwaysClearBox.checked, "AlwaysClear is deselected"); is( deleteOnCloseBox.checked, diff --git a/browser/components/preferences/tests/browser_privacy_syncDataClearing_v2.js b/browser/components/preferences/tests/browser_privacy_syncDataClearing_v2.js @@ -226,6 +226,9 @@ add_task(async function test_syncWithCustomPrefs() { alwaysClearBox.click(); + // Wait for UI to update. + await new Promise(resolve => requestAnimationFrame(resolve)); + ok(!alwaysClearBox.checked, "AlwaysClear is deselected"); is( deleteOnCloseBox.checked, diff --git a/browser/components/preferences/tests/privacypane_tests_perwindow.js b/browser/components/preferences/tests/privacypane_tests_perwindow.js @@ -142,9 +142,9 @@ function test_dependent_elements(win) { check_independents(false); } -function test_dependent_cookie_elements(win) { +async function test_dependent_cookie_elements(win) { let deleteOnCloseCheckbox = win.document.getElementById("deleteOnClose"); - let deleteOnCloseNote = win.document.getElementById("deleteOnCloseNote"); + let deleteOnCloseNote = win.document.getElementById("deleteOnCloseInfo"); let blockCookiesMenu = win.document.getElementById("blockCookiesMenu"); let controls = [blockCookiesMenu, deleteOnCloseCheckbox]; @@ -171,10 +171,12 @@ function test_dependent_cookie_elements(win) { blockCookiesCheckbox.checked = true; controlChanged(blockCookiesCheckbox); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(false); blockCookiesCheckbox.checked = false; controlChanged(blockCookiesCheckbox); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(true, [blockCookiesMenu]); expect_disabled(false, [deleteOnCloseCheckbox]); is_element_hidden( @@ -184,6 +186,7 @@ function test_dependent_cookie_elements(win) { blockCookiesMenu.value = "always"; controlChanged(blockCookiesMenu); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(true, [deleteOnCloseCheckbox]); expect_disabled(false, [blockCookiesMenu]); is_element_hidden( @@ -197,6 +200,7 @@ function test_dependent_cookie_elements(win) { blockCookiesMenu.value = "unvisited"; } controlChanged(blockCookiesMenu); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(false); let historymode = win.document.getElementById("historyMode"); @@ -205,6 +209,7 @@ function test_dependent_cookie_elements(win) { // disable the "keep cookies until..." menu. historymode.value = "dontremember"; controlChanged(historymode); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(true, [deleteOnCloseCheckbox]); is_element_visible( deleteOnCloseNote, @@ -214,6 +219,7 @@ function test_dependent_cookie_elements(win) { historymode.value = "remember"; controlChanged(historymode); + await new Promise(resolve => requestAnimationFrame(resolve)); expect_disabled(false); is_element_hidden( deleteOnCloseNote, diff --git a/browser/components/preferences/tests/siteData/browser_clearSiteData.js b/browser/components/preferences/tests/siteData/browser_clearSiteData.js @@ -52,8 +52,10 @@ async function testClearData(clearSiteData, clearCache) { gBrowser.selectedBrowser, [], async function () { - let sizeLabel = content.document.getElementById("totalSiteDataSize"); - return sizeLabel.textContent; + let siteDataSizeItem = content.document.getElementById("siteDataSize"); + // The <strong> element contains the data size. + let usage = siteDataSizeItem.querySelector("strong"); + return usage.textContent; } ); @@ -62,7 +64,12 @@ async function testClearData(clearSiteData, clearCache) { let url = "chrome://browser/content/preferences/dialogs/clearSiteData.xhtml"; let dialogOpened = promiseLoadSubDialog(url); - clearSiteDataButton.doCommand(); + clearSiteDataButton.scrollIntoView(); + EventUtils.synthesizeMouseAtCenter( + clearSiteDataButton.buttonEl, + {}, + doc.ownerGlobal + ); let dialogWin = await dialogOpened; // Convert the usage numbers in the same way the UI does it to assert @@ -176,11 +183,12 @@ async function testClearData(clearSiteData, clearCache) { gBrowser.selectedBrowser, [{ initialSizeLabelValue }], async function (opts) { - let sizeLabel = content.document.getElementById("totalSiteDataSize"); - await ContentTaskUtils.waitForCondition( - () => sizeLabel.textContent != opts.initialSizeLabelValue, - "Site data size label should have updated." - ); + let siteDataSizeItem = content.document.getElementById("siteDataSize"); + let usage = siteDataSizeItem.querySelector("strong"); + let siteDataSizeText = usage.textContent; + await ContentTaskUtils.waitForCondition(() => { + return siteDataSizeText != opts.initialSizeLabelValue; + }, "Site data size label should have updated."); } ); } diff --git a/browser/components/preferences/tests/siteData/browser_clearSiteData_v2.js b/browser/components/preferences/tests/siteData/browser_clearSiteData_v2.js @@ -52,8 +52,11 @@ async function testClearData(clearSiteData, clearCache) { gBrowser.selectedBrowser, [], async function () { - let sizeLabel = content.document.getElementById("totalSiteDataSize"); - return sizeLabel.textContent; + let siteDataSizeItem = content.document.getElementById("siteDataSize"); + // The <strong> element contains the data size. + let usage = siteDataSizeItem.querySelector("strong"); + let siteDataSizeText = usage.textContent; + return siteDataSizeText; } ); @@ -62,7 +65,7 @@ async function testClearData(clearSiteData, clearCache) { let url = "chrome://browser/content/sanitize_v2.xhtml"; let dialogOpened = promiseLoadSubDialog(url); - clearSiteDataButton.doCommand(); + clearSiteDataButton.click(); let dialogWin = await dialogOpened; // Convert the usage numbers in the same way the UI does it to assert @@ -166,11 +169,13 @@ async function testClearData(clearSiteData, clearCache) { gBrowser.selectedBrowser, [{ initialSizeLabelValue }], async function (opts) { - let sizeLabel = content.document.getElementById("totalSiteDataSize"); - await ContentTaskUtils.waitForCondition( - () => sizeLabel.textContent != opts.initialSizeLabelValue, - "Site data size label should have updated." - ); + let siteDataSizeItem = content.document.getElementById("siteDataSize"); + // The <strong> element contains the data size. + let usage = siteDataSizeItem.querySelector("strong"); + let siteDataSizeText = usage.textContent; + await ContentTaskUtils.waitForCondition(() => { + return siteDataSizeText != opts.initialSizeLabelValue; + }, "Site data size label should have updated."); } ); } @@ -234,7 +239,7 @@ add_task(async function testPersistentStorage() { let url = "chrome://browser/content/sanitize_v2.xhtml"; let dialogOpened = promiseLoadSubDialog(url); - clearSiteDataButton.doCommand(); + clearSiteDataButton.click(); let dialogWin = await dialogOpened; let dialogClosed = BrowserTestUtils.waitForEvent(dialogWin, "unload"); diff --git a/browser/components/preferences/tests/siteData/browser_siteData.js b/browser/components/preferences/tests/siteData/browser_siteData.js @@ -17,7 +17,7 @@ function getPersistentStoragePermStatus(origin) { // Test listing site using quota usage or site using appcache // This is currently disabled because of bug 1414751. -add_task(async function () { +add_task(async function test_list_sites() { // Open a test site which would save into appcache await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_OFFLINE_URL); BrowserTestUtils.removeTab(gBrowser.selectedTab); @@ -69,7 +69,7 @@ add_task(async function () { }).skip(); // Bug 1414751 // Test buttons are disabled and loading message shown while updating sites -add_task(async function () { +add_task(async function test_ui_loading_state() { let updatedPromise = promiseSiteDataManagerSitesUpdated(); await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); await updatedPromise; @@ -78,7 +78,7 @@ add_task(async function () { let doc = gBrowser.selectedBrowser.contentDocument; let clearBtn = doc.getElementById("clearSiteDataButton"); let settingsButton = doc.getElementById("siteDataSettings"); - let totalSiteDataSizeLabel = doc.getElementById("totalSiteDataSize"); + let totalSiteDataSizeLabel = doc.getElementById("siteDataSize"); is( clearBtn.disabled, false, @@ -94,7 +94,7 @@ add_task(async function () { Assert.deepEqual( doc.l10n.getAttributes(totalSiteDataSizeLabel), { - id: "sitedata-total-size", + id: "sitedata-total-size2", args: { value, unit }, }, "Should show the right total site data size" @@ -102,6 +102,9 @@ add_task(async function () { }); Services.obs.notifyObservers(null, "sitedatamanager:updating-sites"); + // Wait a tick for the UI to update. + await new Promise(resolve => requestAnimationFrame(resolve)); + is( clearBtn.disabled, true, @@ -112,16 +115,16 @@ add_task(async function () { true, "Should disable settings button while updating sites" ); - Assert.deepEqual( - doc.l10n.getAttributes(totalSiteDataSizeLabel), - { - id: "sitedata-total-size-calculating", - args: null, - }, + Assert.equal( + doc.l10n.getAttributes(totalSiteDataSizeLabel).id, + "sitedata-total-size-calculating", "Should show the loading message while updating" ); Services.obs.notifyObservers(null, "sitedatamanager:sites-updated"); + // Wait a tick for the UI to update. + await new Promise(resolve => setTimeout(resolve, 0)); + is( clearBtn.disabled, false, @@ -138,7 +141,7 @@ add_task(async function () { Assert.deepEqual( doc.l10n.getAttributes(totalSiteDataSizeLabel), { - id: "sitedata-total-size", + id: "sitedata-total-size2", args: { value, unit }, }, "Should show the right total site data size" @@ -149,7 +152,7 @@ add_task(async function () { }); // Test clearing service worker through the settings panel -add_task(async function () { +add_task(async function test_clear_service_worker() { // Register a test service worker await loadServiceWorkerTestPage(TEST_SERVICE_WORKER_URL); await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true }); @@ -186,7 +189,7 @@ add_task(async function () { }); // Test showing and removing sites with cookies. -add_task(async function () { +add_task(async function test_manage_sites_with_cookies() { // Add some test cookies. let uri = Services.io.newURI("https://example.com"); let uri2 = Services.io.newURI("https://example.org"); diff --git a/browser/components/preferences/tests/siteData/head.js b/browser/components/preferences/tests/siteData/head.js @@ -132,7 +132,7 @@ function openPreferencesViaOpenPreferencesAPI(aPane, aOptions) { }); } -function openSiteDataSettingsDialog() { +async function openSiteDataSettingsDialog() { let doc = gBrowser.selectedBrowser.contentDocument; let settingsBtn = doc.getElementById("siteDataSettings"); let dialogOverlay = content.gSubDialog._preloadDialog._overlay; @@ -149,8 +149,19 @@ function openSiteDataSettingsDialog() { ]).then(() => { is_element_visible(dialogOverlay, "The Settings dialog should be visible"); }); - settingsBtn.doCommand(); - return fullyLoadPromise; + // Wait for the dialog button to be enabled. It is disabled while + // SiteDataManager updates the site list and usage. + await BrowserTestUtils.waitForMutationCondition( + settingsBtn, + { + attributeFilter: ["disabled"], + }, + () => { + return !settingsBtn.disabled; + } + ); + settingsBtn.click(); + await fullyLoadPromise; } function promiseSettingsDialogClose() {