commit 4e3f44dec5909a1176e0d50fe025ca722891ab9c
parent 0ebf4c57325616fab27d38e13e3d4663e2552742
Author: Micah Killoran <mtigley@mozilla.com>
Date: Wed, 19 Nov 2025 17:07:38 +0000
Bug 1971621 - Add tests for Passwords and Autofill section when redesign is enabled. r=dimi,akulyk
Depends on D265170
Differential Revision: https://phabricator.services.mozilla.com/D270055
Diffstat:
6 files changed, 530 insertions(+), 29 deletions(-)
diff --git a/browser/components/preferences/tests/browser_extension_controlled.js b/browser/components/preferences/tests/browser_extension_controlled.js
@@ -1048,6 +1048,9 @@ add_task(async function testExtensionControlledTrackingProtection() {
});
add_task(async function testExtensionControlledPasswordManager() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
const PASSWORD_MANAGER_ENABLED_PREF = "signon.rememberSignons";
const PASSWORD_MANAGER_ENABLED_DEFAULT = true;
const CONTROLLED_BUTTON_ID = "disablePasswordManagerExtension";
diff --git a/browser/components/preferences/tests/browser_password_management.js b/browser/components/preferences/tests/browser_password_management.js
@@ -16,6 +16,9 @@ add_setup(async function () {
var passwordsDialog;
add_task(async function test_openPasswordManagement() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let tabOpenPromise = BrowserTestUtils.waitForNewTab(gBrowser, "about:logins");
@@ -47,3 +50,39 @@ add_task(async function test_openPasswordManagement() {
BrowserTestUtils.removeTab(tab);
gBrowser.removeCurrentTab();
});
+
+add_task(async function test_openPasswordManagementNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
+
+ let tabOpenPromise = BrowserTestUtils.waitForNewTab(gBrowser, "about:logins");
+
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let doc = content.document;
+
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ Assert.ok(
+ !savePasswordCheckBox.checked,
+ "Save Password CheckBox should be unchecked by default"
+ );
+
+ let showPasswordsButton = doc.getElementById("manageSavedPasswords");
+ showPasswordsButton.click();
+ });
+
+ let tab = await tabOpenPromise;
+ ok(tab, "Tab opened");
+
+ // check telemetry events while we are in here
+ await LoginTestUtils.telemetry.waitForEventCount(1);
+ TelemetryTestUtils.assertEvents(
+ [["pwmgr", "open_management", "preferences"]],
+ { category: "pwmgr", method: "open_management" },
+ { clear: true, process: "content" }
+ );
+
+ BrowserTestUtils.removeTab(tab);
+ gBrowser.removeCurrentTab();
+});
diff --git a/browser/components/preferences/tests/browser_primaryPassword.js b/browser/components/preferences/tests/browser_primaryPassword.js
@@ -12,6 +12,9 @@ add_setup(async function () {
});
add_task(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
let prefs = await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
@@ -137,3 +140,125 @@ add_task(async function () {
BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
+
+add_task(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ let prefs = await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
+ leaveOpen: true,
+ });
+ is(prefs.selectedPane, "panePrivacy", "Privacy pane was selected");
+
+ let doc = gBrowser.contentDocument;
+ // Fake the subdialog and LoginHelper
+ let win = doc.defaultView;
+ let dialogURL = "";
+ let dialogOpened = false;
+ ChromeUtils.defineLazyGetter(win, "gSubDialog", () => ({
+ open(aDialogURL, { closingCallback: aCallback }) {
+ dialogOpened = true;
+ dialogURL = aDialogURL;
+ primaryPasswordSet = primaryPasswordNextState;
+ aCallback();
+ },
+ }));
+
+ let primaryPasswordSet = false;
+ win.LoginHelper = {
+ isPrimaryPasswordSet() {
+ return primaryPasswordSet;
+ },
+ getOSAuthEnabled() {
+ return true; // Since enabled by default.
+ },
+ };
+
+ let primaryPasswordNotSet = doc.querySelector("#primaryPasswordNotSet");
+ primaryPasswordNotSet.scrollIntoView();
+ ok(
+ primaryPasswordNotSet,
+ "'Primary password not set' control should be shown by default"
+ );
+ let button = doc.getElementById("addPrimaryPassword");
+
+ let primaryPasswordNextState = false;
+ if (OSKeyStoreTestUtils.canTestOSKeyStoreLogin() && OSKeyStore.canReauth()) {
+ let osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(false);
+ button.click();
+ info("waiting for os auth dialog to appear and get canceled");
+ await osAuthDialogShown;
+ ok(!dialogOpened, "the dialog should not have opened");
+ ok(
+ !dialogURL,
+ "the changemp dialog should not have been opened when the os auth dialog is canceled"
+ );
+ }
+
+ let primaryPasswordSetCtrl = doc.querySelector("#primaryPasswordSet");
+ primaryPasswordNextState = true;
+ if (OSKeyStoreTestUtils.canTestOSKeyStoreLogin() && OSKeyStore.canReauth()) {
+ let osAuthDialogShown = OSKeyStoreTestUtils.waitForOSKeyStoreLogin(true);
+ button.click();
+ info("waiting for os auth dialog to appear");
+ await osAuthDialogShown;
+ info("waiting for dialogURL to get set");
+ await TestUtils.waitForCondition(
+ () => dialogURL,
+ "wait for open to get called asynchronously"
+ );
+ is(
+ dialogURL,
+ "chrome://mozapps/content/preferences/changemp.xhtml",
+ "clicking on the checkbox should open the primary password dialog"
+ );
+ } else {
+ primaryPasswordSet = true;
+ doc.defaultView.gPrivacyPane._initMasterPasswordUI();
+ await TestUtils.waitForCondition(
+ () => !button.disabled,
+ "waiting for primary password button to get enabled"
+ );
+ }
+ ok(
+ primaryPasswordSetCtrl,
+ "'primary password set control' should be visible now"
+ );
+
+ dialogURL = "";
+ button.click();
+ await TestUtils.waitForCondition(
+ () => dialogURL,
+ "wait for open to get called asynchronously"
+ );
+ is(
+ dialogURL,
+ "chrome://mozapps/content/preferences/changemp.xhtml",
+ "clicking on the button should open the primary password dialog"
+ );
+
+ // Confirm that we won't automatically respond to the dialog,
+ // since we don't expect a dialog here, we want the test to fail if one appears.
+ is(
+ Services.prefs.getStringPref(
+ "toolkit.osKeyStore.unofficialBuildOnlyLogin",
+ ""
+ ),
+ "",
+ "Pref should be set to an empty string"
+ );
+
+ let removePrimaryPasswordButton = doc.querySelector(
+ "#turnOffPrimaryPassword"
+ );
+ primaryPasswordNextState = false;
+ dialogURL = "";
+ removePrimaryPasswordButton.click();
+ is(
+ dialogURL,
+ "chrome://mozapps/content/preferences/removemp.xhtml",
+ "clicking on the checkbox to uncheck primary password should show the removal dialog"
+ );
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
diff --git a/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js b/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js
@@ -2,6 +2,9 @@
* http://creativecommons.org/publicdomain/zero/1.0/ */
add_task(async function initialState() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
// check pref permutations to verify the UI opens in the correct state
const prefTests = [
{
@@ -112,6 +115,9 @@ add_task(async function initialState() {
});
add_task(async function toggleGenerationEnabled() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
// clicking the checkbox should toggle the pref
SpecialPowers.pushPrefEnv({
set: [
@@ -155,6 +161,9 @@ add_task(async function toggleGenerationEnabled() {
});
add_task(async function toggleRememberSignon() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
// toggling rememberSignons checkbox should make generation checkbox disabled
SpecialPowers.pushPrefEnv({
set: [
@@ -197,3 +206,215 @@ add_task(async function toggleRememberSignon() {
);
await SpecialPowers.popPrefEnv();
});
+
+// Settings redesign tests
+
+add_task(async function initialStateNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ // check pref permutations to verify the UI opens in the correct state
+ const prefTests = [
+ {
+ initialPrefs: [
+ ["signon.rememberSignons", true],
+ ["signon.generation.available", true],
+ ["signon.generation.enabled", true],
+ ["signon.autofillForms", true],
+ ],
+ expected: "checked",
+ },
+ {
+ initialPrefs: [
+ ["signon.rememberSignons", true],
+ ["signon.generation.available", true],
+ ["signon.generation.enabled", false],
+ ["signon.autofillForms", false],
+ ],
+ expected: "unchecked",
+ },
+ {
+ initialPrefs: [
+ ["signon.rememberSignons", true],
+ ["signon.generation.available", false],
+ ["signon.generation.enabled", false],
+ ],
+ expected: "hidden",
+ },
+ {
+ initialPrefs: [
+ ["signon.rememberSignons", false],
+ ["signon.generation.available", true],
+ ["signon.generation.enabled", true],
+ ["signon.autofillForms", true],
+ ],
+ expected: "disabled",
+ },
+ ];
+ for (let test of prefTests) {
+ // set initial pref values
+ info("initialState, testing with: " + JSON.stringify(test));
+ await SpecialPowers.pushPrefEnv({ set: test.initialPrefs });
+
+ // open about:privacy in a tab
+ // verify expected conditions
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: "about:preferences#privacy",
+ },
+ async function (browser) {
+ let doc = browser.contentDocument;
+ let generatePasswordsCheckbox = doc
+ .getElementById("suggestStrongPasswords")
+ .shadowRoot.querySelector("input");
+ let autofillFormsCheckbox = doc
+ .getElementById("fillUsernameAndPasswords")
+ .shadowRoot.querySelector("input");
+ doc.getElementById("passwordsGroup").scrollIntoView();
+
+ info("initialState, assert on expected state:" + test.expected);
+ switch (test.expected) {
+ case "hidden":
+ is_element_hidden(
+ generatePasswordsCheckbox,
+ "#generatePasswords checkbox is hidden"
+ );
+ break;
+ case "checked":
+ is_element_visible(
+ generatePasswordsCheckbox,
+ "#generatePasswords checkbox is visible"
+ );
+ ok(
+ generatePasswordsCheckbox.checked,
+ "#generatePasswords checkbox is checked"
+ );
+ ok(
+ autofillFormsCheckbox.checked,
+ "#passwordAutofillCheckbox is checked"
+ );
+ break;
+ case "unchecked":
+ ok(
+ !generatePasswordsCheckbox.checked,
+ "#generatePasswords checkbox is un-checked"
+ );
+ ok(
+ !autofillFormsCheckbox.checked,
+ "#passwordAutofillCheckbox is un-checked"
+ );
+ break;
+ case "disabled":
+ ok(
+ generatePasswordsCheckbox.disabled,
+ "#generatePasswords checkbox is disabled"
+ );
+ ok(
+ autofillFormsCheckbox.disabled,
+ "#passwordAutofillCheckbox is disabled"
+ );
+ break;
+ default:
+ ok(false, "Unknown expected state: " + test.expected);
+ }
+ }
+ );
+ await SpecialPowers.popPrefEnv();
+ }
+});
+
+add_task(async function toggleGenerationEnabledNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ // clicking the checkbox should toggle the pref
+ SpecialPowers.pushPrefEnv({
+ set: [
+ ["signon.generation.available", true],
+ ["signon.generation.enabled", false],
+ ["signon.rememberSignons", true],
+ ],
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: "about:preferences#privacy",
+ },
+ async function (browser) {
+ let doc = browser.contentDocument;
+ let checkbox = doc.getElementById("suggestStrongPasswords");
+
+ info("waiting for the browser to have focus");
+ await SimpleTest.promiseFocus(browser);
+ let prefChanged = TestUtils.waitForPrefChange(
+ "signon.generation.enabled"
+ );
+
+ // the preferences "Search" bar obscures the checkbox if we scrollIntoView and try to click on it
+ // so use keyboard events instead
+ checkbox.focus();
+ is(doc.activeElement, checkbox, "checkbox is focused");
+ EventUtils.synthesizeKey(" ");
+
+ info("waiting for pref to change");
+ await prefChanged;
+ ok(checkbox.checked, "#generatePasswords checkbox is checked");
+ ok(
+ Services.prefs.getBoolPref("signon.generation.enabled"),
+ "enabled pref is now true"
+ );
+ }
+ );
+ await SpecialPowers.popPrefEnv();
+});
+
+add_task(async function toggleRememberSignonNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ // toggling rememberSignons checkbox should make generation checkbox disabled
+ SpecialPowers.pushPrefEnv({
+ set: [
+ ["signon.generation.available", true],
+ ["signon.generation.enabled", true],
+ ["signon.rememberSignons", true],
+ ],
+ });
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: "about:preferences#privacy",
+ },
+ async function (browser) {
+ let doc = browser.contentDocument;
+ let checkbox = doc.getElementById("savePasswords");
+ let generationCheckbox = doc
+ .getElementById("suggestStrongPasswords")
+ .shadowRoot.querySelector("input");
+
+ ok(
+ !generationCheckbox.disabled,
+ "generation checkbox is not initially disabled"
+ );
+
+ info("waiting for the browser to have focus");
+ await SimpleTest.promiseFocus(browser);
+ let prefChanged = TestUtils.waitForPrefChange("signon.rememberSignons");
+
+ checkbox.click();
+
+ info("waiting for pref to change");
+ await prefChanged;
+ ok(!checkbox.checked, "#savePasswords checkbox is un-checked");
+ await BrowserTestUtils.waitForCondition(
+ () => generationCheckbox.disabled,
+ "generation checkbox becomes disabled",
+ 200
+ );
+ }
+ );
+ await SpecialPowers.popPrefEnv();
+});
diff --git a/browser/components/preferences/tests/browser_site_login_exceptions.js b/browser/components/preferences/tests/browser_site_login_exceptions.js
@@ -5,30 +5,66 @@ const PERMISSIONS_URL =
var exceptionsDialog;
add_task(async function openLoginExceptionsSubDialog() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
// ensure rememberSignons is off for this test;
ok(
!Services.prefs.getBoolPref("signon.rememberSignons"),
"Check initial value of signon.rememberSignons pref"
);
+ await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
+
+ let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
+
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ Assert.ok(
+ !savePasswordCheckBox.checked,
+ "Save Password CheckBox should be unchecked by default"
+ );
+ savePasswordCheckBox.click();
+
+ let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ loginExceptionsButton.click();
+ });
+
+ exceptionsDialog = await dialogOpened;
+
+ await addALoginException();
+ await deleteALoginException();
+
+ exceptionsDialog.close();
+
// Undo the save password change.
- registerCleanupFunction(async function () {
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
- let doc = content.document;
- let savePasswordCheckBox = doc.getElementById("savePasswords");
- if (savePasswordCheckBox.checked) {
- savePasswordCheckBox.click();
- }
- });
-
- gBrowser.removeCurrentTab();
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
});
+ gBrowser.removeCurrentTab();
+});
+
+add_task(async function openLoginExceptionsSubDialogNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
+ });
+ // ensure rememberSignons is off for this test;
+ ok(
+ !Services.prefs.getBoolPref("signon.rememberSignons"),
+ "Check initial value of signon.rememberSignons pref"
+ );
+
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
let doc = content.document;
let savePasswordCheckBox = doc.getElementById("savePasswords");
Assert.ok(
@@ -37,14 +73,33 @@ add_task(async function openLoginExceptionsSubDialog() {
);
savePasswordCheckBox.click();
- let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ let loginExceptionsButton = doc.getElementById("managePasswordExceptions");
+ await ContentTaskUtils.waitForCondition(
+ () => !loginExceptionsButton.disabled
+ );
loginExceptionsButton.click();
});
exceptionsDialog = await dialogOpened;
+
+ await addALoginException();
+ await deleteALoginException();
+
+ exceptionsDialog.close();
+
+ // Undo the save password change.
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
+ });
+
+ gBrowser.removeCurrentTab();
});
-add_task(async function addALoginException() {
+async function addALoginException() {
let doc = exceptionsDialog.document;
let richlistbox = doc.getElementById("permissionsBox");
@@ -65,9 +120,9 @@ add_task(async function addALoginException() {
let elements = richlistbox.getElementsByAttribute("origin", website);
is(elements.length, 1, "It should find only one coincidence");
}
-});
+}
-add_task(async function deleteALoginException() {
+async function deleteALoginException() {
let doc = exceptionsDialog.document;
let richlistbox = doc.getElementById("permissionsBox");
@@ -98,4 +153,4 @@ add_task(async function deleteALoginException() {
"Subdialog is visible after deleting an element"
);
}
-});
+}
diff --git a/browser/components/preferences/tests/browser_site_login_exceptions_policy.js b/browser/components/preferences/tests/browser_site_login_exceptions_policy.js
@@ -13,25 +13,66 @@ const PERMISSIONS_URL =
var exceptionsDialog;
add_task(async function openLoginExceptionsSubDialog() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", false]],
+ });
// ensure rememberSignons is off for this test;
ok(
!Services.prefs.getBoolPref("signon.rememberSignons"),
"Check initial value of signon.rememberSignons pref"
);
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson({
+ policies: {
+ PasswordManagerExceptions: ["https://pwexception.example.com"],
+ },
+ });
+
+ await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
+
+ let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
+
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let doc = content.document;
+ let savePasswordCheckBox = doc.getElementById("savePasswords");
+ savePasswordCheckBox.click();
+
+ let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ loginExceptionsButton.click();
+ });
+
+ exceptionsDialog = await dialogOpened;
+
+ let doc = exceptionsDialog.document;
+
+ let richlistbox = doc.getElementById("permissionsBox");
+ Assert.equal(richlistbox.itemCount, 1, `Row count should initially be 1`);
+
+ richlistbox.focus();
+ richlistbox.selectedIndex = 0;
+ Assert.ok(doc.getElementById("removePermission").disabled);
+
// Undo the save password change.
- registerCleanupFunction(async function () {
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
- let doc = content.document;
- let savePasswordCheckBox = doc.getElementById("savePasswords");
- if (savePasswordCheckBox.checked) {
- savePasswordCheckBox.click();
- }
- });
-
- gBrowser.removeCurrentTab();
- await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let savePasswordCheckBox = content.document.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
+ });
+
+ gBrowser.removeCurrentTab();
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
+});
+
+add_task(async function openLoginExceptionsSubDialogNew() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.settings-redesign.enabled", true]],
});
+ // ensure rememberSignons is off for this test;
+ ok(
+ !Services.prefs.getBoolPref("signon.rememberSignons"),
+ "Check initial value of signon.rememberSignons pref"
+ );
await EnterprisePolicyTesting.setupPolicyEngineWithJson({
policies: {
@@ -39,21 +80,27 @@ add_task(async function openLoginExceptionsSubDialog() {
},
});
+ info("Opening privacy panel");
await openPreferencesViaOpenPreferencesAPI("privacy", { leaveOpen: true });
let dialogOpened = promiseLoadSubDialog(PERMISSIONS_URL);
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
let doc = content.document;
let savePasswordCheckBox = doc.getElementById("savePasswords");
savePasswordCheckBox.click();
- let loginExceptionsButton = doc.getElementById("passwordExceptions");
+ let loginExceptionsButton = doc.getElementById("managePasswordExceptions");
+ await ContentTaskUtils.waitForCondition(
+ () => !loginExceptionsButton.disabled
+ );
loginExceptionsButton.click();
});
+ info("Waiting for dialog to open");
exceptionsDialog = await dialogOpened;
+ info("Assert remove permission is disabled");
let doc = exceptionsDialog.document;
let richlistbox = doc.getElementById("permissionsBox");
@@ -62,4 +109,15 @@ add_task(async function openLoginExceptionsSubDialog() {
richlistbox.focus();
richlistbox.selectedIndex = 0;
Assert.ok(doc.getElementById("removePermission").disabled);
+
+ // Undo the save password change.
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
+ let savePasswordCheckBox = content.document.getElementById("savePasswords");
+ if (savePasswordCheckBox.checked) {
+ savePasswordCheckBox.click();
+ }
+ });
+
+ gBrowser.removeCurrentTab();
+ await EnterprisePolicyTesting.setupPolicyEngineWithJson("");
});