251 lines
7.1 KiB
JavaScript
251 lines
7.1 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.firefoxRelay.feature", undefined],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
expected: "hidden",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "available"],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
expected: "checked",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "enabled"],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
expected: "checked",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "disabled"],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
expected: "unchecked",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", undefined],
|
|
["signon.rememberSignons", false],
|
|
],
|
|
expected: "hidden",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "available"],
|
|
["signon.rememberSignons", false],
|
|
],
|
|
expected: "checked",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "enabled"],
|
|
["signon.rememberSignons", false],
|
|
],
|
|
expected: "checked",
|
|
},
|
|
{
|
|
initialPrefs: [
|
|
["signon.firefoxRelay.feature", "disabled"],
|
|
["signon.rememberSignons", false],
|
|
],
|
|
expected: "unchecked",
|
|
},
|
|
];
|
|
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) {
|
|
const doc = browser.contentDocument;
|
|
const relayGroup = doc.getElementById("relayIntegrationBox");
|
|
const checkbox = doc.getElementById("relayIntegration");
|
|
const savePasswords = doc.getElementById("savePasswords");
|
|
doc.getElementById("passwordSettings").scrollIntoView();
|
|
|
|
Assert.equal(
|
|
checkbox.disabled,
|
|
!savePasswords.checked,
|
|
"#relayIntegration checkbox disabled when #passwordAutofillCheckbox is unchecked"
|
|
);
|
|
|
|
switch (test.expected) {
|
|
case "hidden":
|
|
is_element_hidden(relayGroup, "#relayIntegrationBox is hidden");
|
|
break;
|
|
case "checked":
|
|
is_element_visible(relayGroup, "#relayIntegrationBox is visible");
|
|
Assert.ok(
|
|
checkbox.checked,
|
|
"#relayIntegration checkbox is checked"
|
|
);
|
|
break;
|
|
case "unchecked":
|
|
is_element_visible(relayGroup, "#relayIntegrationBox is visible");
|
|
Assert.ok(
|
|
!checkbox.checked,
|
|
"#relayIntegration checkbox is un-checked"
|
|
);
|
|
break;
|
|
default:
|
|
Assert.ok(false, "Unknown expected state: " + test.expected);
|
|
break;
|
|
}
|
|
}
|
|
);
|
|
await SpecialPowers.popPrefEnv();
|
|
}
|
|
});
|
|
|
|
add_task(async function toggleRelayIntegration() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["signon.firefoxRelay.feature", "enabled"],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
});
|
|
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: "about:preferences#privacy",
|
|
},
|
|
async browser => {
|
|
await SimpleTest.promiseFocus(browser);
|
|
|
|
// the preferences "Search" bar obscures the checkbox if we scrollIntoView and try to click on it
|
|
// so use keyboard events instead
|
|
const doc = browser.contentDocument;
|
|
const relayCheckbox = doc.getElementById("relayIntegration");
|
|
relayCheckbox.focus();
|
|
Assert.equal(doc.activeElement, relayCheckbox, "checkbox is focused");
|
|
Assert.equal(
|
|
relayCheckbox.checked,
|
|
true,
|
|
"#relayIntegration checkbox is not checked"
|
|
);
|
|
|
|
async function clickOnFeatureCheckbox(
|
|
expectedPrefValue,
|
|
expectedCheckValue,
|
|
message
|
|
) {
|
|
const prefChanged = TestUtils.waitForPrefChange(
|
|
"signon.firefoxRelay.feature"
|
|
);
|
|
EventUtils.synthesizeKey(" ");
|
|
await prefChanged;
|
|
Assert.equal(
|
|
Services.prefs.getStringPref("signon.firefoxRelay.feature"),
|
|
expectedPrefValue,
|
|
message
|
|
);
|
|
Assert.equal(
|
|
relayCheckbox.checked,
|
|
expectedCheckValue,
|
|
`#relayIntegration checkbox is ${
|
|
expectedCheckValue ? "checked" : "unchecked"
|
|
}`
|
|
);
|
|
}
|
|
|
|
await clickOnFeatureCheckbox(
|
|
"disabled",
|
|
false,
|
|
'Turn integration off from "enabled" feature state'
|
|
);
|
|
await clickOnFeatureCheckbox(
|
|
"available",
|
|
true,
|
|
'Turn integration on from "enabled" feature state'
|
|
);
|
|
await clickOnFeatureCheckbox(
|
|
"disabled",
|
|
false,
|
|
'Turn integration off from "enabled" feature state'
|
|
);
|
|
}
|
|
);
|
|
await SpecialPowers.popPrefEnv();
|
|
});
|
|
|
|
add_task(async function toggleRememberSignon() {
|
|
// toggling rememberSignons checkbox should make generation checkbox disabled
|
|
SpecialPowers.pushPrefEnv({
|
|
set: [
|
|
["signon.firefoxRelay.feature", "available"],
|
|
["signon.rememberSignons", true],
|
|
],
|
|
});
|
|
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: "about:preferences#privacy",
|
|
},
|
|
async function (browser) {
|
|
const doc = browser.contentDocument;
|
|
const checkbox = doc.getElementById("savePasswords");
|
|
const relayCheckbox = doc.getElementById("relayIntegration");
|
|
|
|
Assert.ok(
|
|
!relayCheckbox.disabled,
|
|
"generation checkbox is not initially disabled"
|
|
);
|
|
|
|
await SimpleTest.promiseFocus(browser);
|
|
const 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();
|
|
Assert.equal(doc.activeElement, checkbox, "checkbox is focused");
|
|
EventUtils.synthesizeKey(" ");
|
|
|
|
await prefChanged;
|
|
Assert.ok(!checkbox.checked, "#savePasswords checkbox is un-checked");
|
|
Assert.ok(
|
|
relayCheckbox.disabled,
|
|
"Relay integration checkbox becomes disabled"
|
|
);
|
|
}
|
|
);
|
|
await SpecialPowers.popPrefEnv();
|
|
});
|
|
|
|
add_task(async function testLockedRelayPreference() {
|
|
// Locking relay preference should disable checkbox
|
|
Services.prefs.lockPref("signon.firefoxRelay.feature");
|
|
|
|
await BrowserTestUtils.withNewTab(
|
|
{
|
|
gBrowser,
|
|
url: "about:preferences#privacy",
|
|
},
|
|
async function (browser) {
|
|
const doc = browser.contentDocument;
|
|
const relayCheckbox = doc.getElementById("relayIntegration");
|
|
|
|
Assert.ok(relayCheckbox.disabled, "Relay checkbox should be disabled");
|
|
}
|
|
);
|
|
|
|
Services.prefs.unlockPref("signon.firefoxRelay.feature");
|
|
});
|