commit 815dcbccd91adeedf31cf2e4fbe583e31a5a7f21
parent d11399d4690058734d93a61d60666ae575d547c4
Author: Emma Zuehlcke <emz@mozilla.com>
Date: Tue, 11 Nov 2025 11:18:19 +0000
Bug 1971438 - Update tests for history preferences section. r=mconley
Differential Revision: https://phabricator.services.mozilla.com/D270375
Diffstat:
7 files changed, 160 insertions(+), 79 deletions(-)
diff --git a/browser/components/enterprisepolicies/tests/browser/browser_policy_privatebrowsingmodeavailability.js b/browser/components/enterprisepolicies/tests/browser/browser_policy_privatebrowsingmodeavailability.js
@@ -27,8 +27,9 @@ add_task(async function test_privatebrowsing_disabled() {
"about:preferences#privacy",
async browser => {
ok(
- browser.contentDocument.querySelector("menuitem[value='dontremember']")
- .disabled,
+ browser.contentDocument
+ .getElementById("historyMode")
+ .inputEl.querySelector("option[value='dontremember']").disabled,
"Don't remember history should be disabled"
);
}
diff --git a/browser/components/preferences/tests/browser_cookies_exceptions.js b/browser/components/preferences/tests/browser_cookies_exceptions.js
@@ -530,9 +530,8 @@ async function runTest(test, getObservances) {
});
let doc = gBrowser.contentDocument;
- let historyMode = doc.getElementById("historyMode");
- historyMode.value = "custom";
- historyMode.doCommand();
+
+ await selectHistoryMode(gBrowser.contentWindow, "custom");
let promiseSubDialogLoaded = promiseLoadSubDialog(
"chrome://browser/content/preferences/dialogs/permissions.xhtml"
diff --git a/browser/components/preferences/tests/browser_privacy_syncDataClearing.js b/browser/components/preferences/tests/browser_privacy_syncDataClearing.js
@@ -26,6 +26,9 @@ add_task(async function test_syncWithoutCustomPrefs() {
deleteOnCloseBox.click();
+ // Wait for UI to update.
+ await new Promise(resolve => requestAnimationFrame(resolve));
+
ok(deleteOnCloseBox.checked, "DeleteOnClose is selected");
is(
deleteOnCloseBox.checked,
@@ -51,6 +54,9 @@ add_task(async function test_syncWithoutCustomPrefs() {
deleteOnCloseBox.click();
+ // Wait for UI to update.
+ await new Promise(resolve => requestAnimationFrame(resolve));
+
ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected");
is(
deleteOnCloseBox.checked,
@@ -187,6 +193,8 @@ add_task(async function test_syncWithCustomPrefs() {
["privacy.clearOnShutdown.cache", true],
["privacy.clearOnShutdown.offlineApps", true],
["privacy.sanitize.sanitizeOnShutdown", true],
+ // Make sure custom is selected so the depending checkboxes are visible.
+ ["privacy.history.custom", true],
],
});
@@ -288,9 +296,8 @@ add_task(async function test_initialState() {
);
// Reset history mode
- let historyMode = document.getElementById("historyMode");
- historyMode.value = "remember";
- historyMode.doCommand();
- BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
+ gBrowser.contentWindow.Preferences.getSetting("historyMode").value =
+ "remember";
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
diff --git a/browser/components/preferences/tests/browser_privacy_syncDataClearing_v2.js b/browser/components/preferences/tests/browser_privacy_syncDataClearing_v2.js
@@ -29,6 +29,9 @@ add_task(async function test_syncWithoutCustomPrefs() {
deleteOnCloseBox.click();
+ // Wait for UI to update.
+ await new Promise(resolve => requestAnimationFrame(resolve));
+
ok(deleteOnCloseBox.checked, "DeleteOnClose is selected");
is(
deleteOnCloseBox.checked,
@@ -64,6 +67,9 @@ add_task(async function test_syncWithoutCustomPrefs() {
deleteOnCloseBox.click();
+ // Wait for UI to update.
+ await new Promise(resolve => requestAnimationFrame(resolve));
+
ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected");
is(
deleteOnCloseBox.checked,
@@ -161,6 +167,9 @@ add_task(async function test_syncWithCustomPrefs() {
deleteOnCloseBox.click();
+ // Wait for UI to update.
+ await new Promise(resolve => requestAnimationFrame(resolve));
+
ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected");
is(
!deleteOnCloseBox.checked,
@@ -312,9 +321,8 @@ add_task(async function test_initialState() {
);
// Reset history mode
- let historyMode = document.getElementById("historyMode");
- historyMode.value = "remember";
- historyMode.doCommand();
- BrowserTestUtils.removeTab(gBrowser.selectedTab);
await SpecialPowers.popPrefEnv();
+ gBrowser.contentWindow.Preferences.getSetting("historyMode").value =
+ "remember";
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
diff --git a/browser/components/preferences/tests/browser_warning_permanent_private_browsing.js b/browser/components/preferences/tests/browser_warning_permanent_private_browsing.js
@@ -30,9 +30,11 @@ function checkForPrompt(prefVal) {
return doc.defaultView.CONFIRM_RESTART_PROMPT_RESTART_NOW;
};
// Tick the checkbox and pretend the user did it:
- let checkbox = doc.getElementById("privateBrowsingAutoStart");
- checkbox.checked = prefVal;
- checkbox.doCommand();
+ await updateCheckBox(
+ gBrowser.contentWindow,
+ "privateBrowsingAutoStart",
+ prefVal
+ );
// Now the prompt should have shown.
ok(
diff --git a/browser/components/preferences/tests/head.js b/browser/components/preferences/tests/head.js
@@ -637,3 +637,69 @@ async function clickCheckboxWithConfirmDialog(
return checkbox;
}
+
+/**
+ * Select the given history mode via dropdown in the privacy pane.
+ * @param {Window} win - The preferences window which contains the
+ * dropdown.
+ * @param {string} value - The history mode to select.
+ */
+async function selectHistoryMode(win, value) {
+ let historyMode = win.document.getElementById("historyMode").inputEl;
+
+ // Find the index of the option with the given value. Do this before the first
+ // click so we can bail out early if the option does not exist.
+ let optionIndexStr = Array.from(historyMode.children)
+ .findIndex(option => option.value == value)
+ ?.toString();
+ if (optionIndexStr == null) {
+ throw new Error(
+ "Could not find history mode option item for value: " + value
+ );
+ }
+
+ // Scroll into view for click to succeed.
+ historyMode.scrollIntoView();
+
+ let popupShownPromise = BrowserTestUtils.waitForSelectPopupShown(window);
+
+ await EventUtils.synthesizeMouseAtCenter(
+ historyMode,
+ {},
+ historyMode.ownerGlobal
+ );
+
+ let popup = await popupShownPromise;
+ let popupItems = Array.from(popup.children);
+
+ let targetItem = popupItems.find(item => item.value == optionIndexStr);
+
+ if (!targetItem) {
+ throw new Error(
+ "Could not find history mode popup item for value: " + value
+ );
+ }
+
+ let popupHiddenPromise = BrowserTestUtils.waitForPopupEvent(popup, "hidden");
+
+ EventUtils.synthesizeMouseAtCenter(targetItem, {}, targetItem.ownerGlobal);
+
+ await popupHiddenPromise;
+}
+
+async function updateCheckBox(win, id, value) {
+ let checkbox = win.document.getElementById(id);
+ ok(checkbox, "the " + id + " checkbox should exist");
+ is_element_visible(checkbox, "the " + id + " checkbox should be visible");
+
+ // No need to click if we're already in the desired state.
+ if (checkbox.checked === value) {
+ return;
+ }
+
+ // Scroll into view for click to succeed.
+ checkbox.scrollIntoView();
+
+ // Toggle the state.
+ await EventUtils.synthesizeMouseAtCenter(checkbox, {}, checkbox.ownerGlobal);
+}
diff --git a/browser/components/preferences/tests/privacypane_tests_perwindow.js b/browser/components/preferences/tests/privacypane_tests_perwindow.js
@@ -22,33 +22,43 @@ function controlChanged(element) {
}
// We can only test the panes that don't trigger a preference update
-function test_pane_visibility(win) {
- let modes = {
- remember: "historyRememberPane",
- custom: "historyCustomPane",
- };
+async function test_pane_visibility(win) {
+ // Elements which should only be visible in history mode "custom".
+ let customElementIds = [
+ "privateBrowsingAutoStart",
+ "rememberHistory",
+ "rememberForms",
+ "alwaysClear",
+ "clearDataSettings",
+ ];
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
- let historypane = win.document.getElementById("historyPane");
- ok(historypane, "history mode pane should exist");
- for (let mode in modes) {
- historymode.value = mode;
- controlChanged(historymode);
- is(
- historypane.selectedPanel,
- win.document.getElementById(modes[mode]),
- "The correct pane should be selected for the " + mode + " mode"
- );
+ await selectHistoryMode(win, "custom");
+
+ for (let id of customElementIds) {
+ let element = win.document.getElementById(id);
+ ok(element, `the ${id} element should exist`);
is_element_visible(
- historypane.selectedPanel,
- "Correct pane should be visible for the " + mode + " mode"
+ element,
+ `the ${id} element should be visible in 'custom' mode`
+ );
+ }
+
+ await selectHistoryMode(win, "remember");
+
+ for (let id of customElementIds) {
+ let element = win.document.getElementById(id);
+ ok(element, `the ${id} element should exist`);
+ is_element_hidden(
+ element,
+ `the ${id} element should be hidden in 'remember' mode`
);
}
}
-function test_dependent_elements(win) {
+async function test_dependent_elements(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
@@ -130,16 +140,16 @@ function test_dependent_elements(win) {
}
// controls should only change in custom mode
- historymode.value = "remember";
- controlChanged(historymode);
+ await selectHistoryMode(win, "remember");
expect_disabled(false);
check_independents(false);
// setting the mode to custom shouldn't change anything
- historymode.value = "custom";
- controlChanged(historymode);
+ await selectHistoryMode(win, "custom");
expect_disabled(false);
check_independents(false);
+
+ await selectHistoryMode(win, "remember");
}
async function test_dependent_cookie_elements(win) {
@@ -203,13 +213,12 @@ async function test_dependent_cookie_elements(win) {
await new Promise(resolve => requestAnimationFrame(resolve));
expect_disabled(false);
- let historymode = win.document.getElementById("historyMode");
-
// The History mode setting for "never remember history" should still
// disable the "keep cookies until..." menu.
- historymode.value = "dontremember";
- controlChanged(historymode);
- await new Promise(resolve => requestAnimationFrame(resolve));
+
+ // Suppress restart prompt, because we can't restart in a mochitest.
+ win._shouldPromptForRestartPBM = false;
+ await selectHistoryMode(win, "dontremember");
expect_disabled(true, [deleteOnCloseCheckbox]);
is_element_visible(
deleteOnCloseNote,
@@ -217,9 +226,10 @@ async function test_dependent_cookie_elements(win) {
);
expect_disabled(false, [blockCookiesMenu]);
- historymode.value = "remember";
- controlChanged(historymode);
- await new Promise(resolve => requestAnimationFrame(resolve));
+ // Suppress restart prompt, because we can't restart in a mochitest.
+ win._shouldPromptForRestartPBM = false;
+
+ await selectHistoryMode(win, "remember");
expect_disabled(false);
is_element_hidden(
deleteOnCloseNote,
@@ -227,7 +237,7 @@ async function test_dependent_cookie_elements(win) {
);
}
-function test_dependent_clearonclose_elements(win) {
+async function test_dependent_clearonclose_elements(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
let pbautostart = win.document.getElementById("privateBrowsingAutoStart");
@@ -247,20 +257,16 @@ function test_dependent_clearonclose_elements(win) {
);
}
- historymode.value = "custom";
- controlChanged(historymode);
- pbautostart.checked = false;
- controlChanged(pbautostart);
- alwaysclear.checked = false;
- controlChanged(alwaysclear);
+ await selectHistoryMode(win, "custom");
+ await updateCheckBox(win, "privateBrowsingAutoStart", false);
+
+ await updateCheckBox(win, "alwaysClear", false);
expect_disabled(true);
- alwaysclear.checked = true;
- controlChanged(alwaysclear);
+ await updateCheckBox(win, "alwaysClear", true);
expect_disabled(false);
- alwaysclear.checked = false;
- controlChanged(alwaysclear);
+ await updateCheckBox(win, "alwaysClear", false);
expect_disabled(true);
}
@@ -289,29 +295,24 @@ async function test_dependent_prefs(win) {
}
// controls should be checked in remember mode
- historymode.value = "remember";
- controlChanged(historymode);
+ await selectHistoryMode(win, "remember");
// Initial updates from prefs are not sync, so wait:
- await TestUtils.waitForCondition(
- () => controls[0].getAttribute("checked") == "true"
- );
+ await TestUtils.waitForCondition(() => controls[0].checked);
expect_checked(true);
// even if they're unchecked in custom mode
- historymode.value = "custom";
- controlChanged(historymode);
- controls.forEach(function (control) {
- control.checked = false;
- controlChanged(control);
- });
+ await selectHistoryMode(win, "custom");
+
+ for (let control of controls) {
+ await updateCheckBox(win, control.id, false);
+ }
expect_checked(false);
- historymode.value = "remember";
- controlChanged(historymode);
+ await selectHistoryMode(win, "remember");
expect_checked(true);
}
function test_historymode_retention(mode, expect) {
- return function test_historymode_retention_fn(win) {
+ return async function test_historymode_retention_fn(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
@@ -331,13 +332,12 @@ function test_historymode_retention(mode, expect) {
);
}
- historymode.value = mode;
- controlChanged(historymode);
+ await selectHistoryMode(win, mode);
};
}
function test_custom_retention(controlToChange, expect, valueIncrement) {
- return function test_custom_retention_fn(win) {
+ return async function test_custom_retention_fn(win) {
let historymode = win.document.getElementById("historyMode");
ok(historymode, "history mode menulist should exist");
@@ -349,20 +349,18 @@ function test_custom_retention(controlToChange, expect, valueIncrement) {
);
}
- historymode.value = "custom";
- controlChanged(historymode);
+ await selectHistoryMode(win, "custom");
controlToChange = win.document.getElementById(controlToChange);
ok(controlToChange, "the control to change should exist");
switch (controlToChange.localName) {
case "checkbox":
- controlToChange.checked = !controlToChange.checked;
+ await updateCheckBox(win, controlToChange.id, !controlToChange.checked);
break;
case "menulist":
- controlToChange.value = valueIncrement;
+ await selectHistoryMode(win, valueIncrement);
break;
}
- controlChanged(controlToChange);
};
}