199 lines
6 KiB
JavaScript
199 lines
6 KiB
JavaScript
/* 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();
|
|
});
|