summaryrefslogtreecommitdiffstats
path: root/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js')
-rw-r--r--browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js199
1 files changed, 199 insertions, 0 deletions
diff --git a/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js b/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js
new file mode 100644
index 0000000000..6a6e419229
--- /dev/null
+++ b/browser/components/preferences/tests/browser_privacy_passwordGenerationAndAutofill.js
@@ -0,0 +1,199 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function initialState() {
+ // 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("generatePasswords");
+ let autofillFormsCheckbox = doc.getElementById(
+ "passwordAutofillCheckbox"
+ );
+ doc.getElementById("passwordSettings").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 toggleGenerationEnabled() {
+ // 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("generatePasswords");
+
+ 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 toggleRememberSignon() {
+ // 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("generatePasswords");
+
+ 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");
+
+ // 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, "#savePasswords checkbox is un-checked");
+ ok(generationCheckbox.disabled, "generation checkbox becomes disabled");
+ }
+ );
+ await SpecialPowers.popPrefEnv();
+});