Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
const PAGE_PREFS = "about:preferences";
const PAGE_PRIVACY = PAGE_PREFS + "#privacy";
const SELECTORS = {
group: "#formAutofillGroupBox",
addressAutofillCheckbox: "#addressAutofill checkbox",
creditCardAutofillCheckbox: "#creditCardAutofill checkbox",
savedAddressesBtn: "#addressAutofill button",
savedCreditCardsBtn: "#creditCardAutofill button",
addressAutofillLearnMore: "#addressAutofillLearnMore",
creditCardAutofillLearnMore: "#creditCardAutofillLearnMore",
reauthCheckbox: "#creditCardReauthenticate checkbox",
};
const { FormAutofill } = ChromeUtils.importESModule(
"resource://autofill/FormAutofill.sys.mjs"
);
// Visibility of form autofill group should be hidden when opening
// preferences page.
add_task(async function test_aboutPreferences() {
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PREFS },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
true,
"Form Autofill group should be hidden"
);
});
}
);
});
// Visibility of form autofill group should be visible when opening
// directly to privacy page. Checkbox is checked by default.
add_task(async function test_aboutPreferencesPrivacy() {
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
false,
"Form Autofill group should be visible"
);
is(
content.document.querySelector(selectors.addressAutofillCheckbox)
.checked,
true,
"Autofill addresses checkbox should be checked"
);
is(
content.document.querySelector(selectors.creditCardAutofillCheckbox)
.checked,
true,
"Autofill credit cards checkbox should be checked"
);
ok(
content.document
.querySelector(selectors.addressAutofillLearnMore)
.href.includes("autofill-card-address"),
"Autofill addresses learn more link should contain autofill-card-address"
);
ok(
content.document
.querySelector(selectors.creditCardAutofillLearnMore)
.href.includes("credit-card-autofill"),
"Autofill credit cards learn more link should contain credit-card-autofill"
);
});
}
);
});
add_task(async function test_openManageAutofillDialogs() {
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
const args = [
SELECTORS,
MANAGE_ADDRESSES_DIALOG_URL,
MANAGE_CREDIT_CARDS_DIALOG_URL,
];
await SpecialPowers.spawn(
browser,
[args],
([selectors, addrUrl, ccUrl]) => {
function testManageDialogOpened(expectedUrl) {
return {
open: openUrl => is(openUrl, expectedUrl, "Manage dialog called"),
};
}
let realgSubDialog = content.window.gSubDialog;
content.window.gSubDialog = testManageDialogOpened(addrUrl);
content.document.querySelector(selectors.savedAddressesBtn).click();
content.window.gSubDialog = testManageDialogOpened(ccUrl);
content.document.querySelector(selectors.savedCreditCardsBtn).click();
content.window.gSubDialog = realgSubDialog;
}
);
}
);
});
add_task(async function test_autofillCheckboxes() {
await SpecialPowers.pushPrefEnv({
set: [[ENABLED_AUTOFILL_ADDRESSES_PREF, false]],
});
await SpecialPowers.pushPrefEnv({
set: [[ENABLED_AUTOFILL_CREDITCARDS_PREF, false]],
});
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
// Checkbox should be unchecked when form autofill addresses and credit cards are disabled.
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
false,
"Form Autofill group should be visible"
);
is(
content.document.querySelector(selectors.addressAutofillCheckbox)
.checked,
false,
"Checkbox should be unchecked when Autofill Addresses is disabled"
);
is(
content.document.querySelector(selectors.creditCardAutofillCheckbox)
.checked,
false,
"Checkbox should be unchecked when Autofill Credit Cards is disabled"
);
content.document
.querySelector(selectors.addressAutofillCheckbox)
.scrollIntoView({ block: "center", behavior: "instant" });
});
info("test toggling the checkboxes");
await BrowserTestUtils.synthesizeMouseAtCenter(
SELECTORS.addressAutofillCheckbox,
{},
browser
);
is(
Services.prefs.getBoolPref(ENABLED_AUTOFILL_ADDRESSES_PREF),
true,
"Check address autofill is now enabled"
);
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
content.document
.querySelector(selectors.creditCardAutofillCheckbox)
.scrollIntoView({ block: "center", behavior: "instant" });
});
await BrowserTestUtils.synthesizeMouseAtCenter(
SELECTORS.creditCardAutofillCheckbox,
{},
browser
);
is(
Services.prefs.getBoolPref(ENABLED_AUTOFILL_CREDITCARDS_PREF),
true,
"Check credit card autofill is now enabled"
);
}
);
});
add_task(async function test_creditCardNotAvailable() {
await SpecialPowers.pushPrefEnv({
set: [[AUTOFILL_CREDITCARDS_AVAILABLE_PREF, false]],
});
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
false,
"Form Autofill group should be visible"
);
ok(
!content.document.querySelector(selectors.creditCardAutofillCheckbox),
"Autofill credit cards checkbox should not exist"
);
});
}
);
});
add_task(async function test_reauth() {
await SpecialPowers.pushPrefEnv({
set: [[AUTOFILL_CREDITCARDS_AVAILABLE_PREF, "on"]],
});
let { OSKeyStore } = ChromeUtils.importESModule(
"resource://gre/modules/OSKeyStore.sys.mjs"
);
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(
browser,
[SELECTORS, OSKeyStore.canReauth()],
(selectors, canReauth) => {
is(
canReauth,
!!content.document.querySelector(selectors.reauthCheckbox),
"Re-authentication checkbox should be available if OSKeyStore.canReauth() is `true`"
);
}
);
}
);
});
add_task(async function test_addressAutofillNotAvailable() {
await SpecialPowers.pushPrefEnv({
set: [[AUTOFILL_ADDRESSES_AVAILABLE_PREF, "off"]],
});
let autofillAddressEnabledValue = Services.prefs.getBoolPref(
ENABLED_AUTOFILL_ADDRESSES_PREF
);
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
false,
"Form Autofill group should be visible"
);
is(
content.document.querySelector(selectors.addressAutofillCheckbox),
null,
"Address checkbox should not exist when address autofill is not enabled"
);
is(
content.document.querySelector(selectors.creditCardAutofillCheckbox)
.checked,
true,
"Checkbox should be checked when Autofill Credit Cards is enabled"
);
});
info("test toggling the credit card autofill checkbox");
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
content.document
.querySelector(selectors.creditCardAutofillCheckbox)
.scrollIntoView({ block: "center", behavior: "instant" });
});
await BrowserTestUtils.synthesizeMouseAtCenter(
SELECTORS.creditCardAutofillCheckbox,
{},
browser
);
is(
Services.prefs.getBoolPref(ENABLED_AUTOFILL_CREDITCARDS_PREF),
false,
"Check credit card autofill is now disabled"
);
is(
Services.prefs.getBoolPref(ENABLED_AUTOFILL_ADDRESSES_PREF),
autofillAddressEnabledValue,
"Address autofill enabled's value should not change due to credit card checkbox interaction"
);
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.addressAutofillCheckbox),
null,
"Address checkbox should exist due to interaction with credit card checkbox"
);
});
}
);
await SpecialPowers.popPrefEnv();
});
add_task(async function test_addressAutofillNotAvailableViaRegion() {
await SpecialPowers.pushPrefEnv({
set: [
["extensions.formautofill.addresses.supported", "detect"],
["extensions.formautofill.creditCards.enabled", true],
["browser.search.region", "FR"],
[ENABLED_AUTOFILL_ADDRESSES_SUPPORTED_COUNTRIES_PREF, "US,CA"],
],
});
const addressAutofillEnabledPrefValue = Services.prefs.getBoolPref(
ENABLED_AUTOFILL_ADDRESSES_PREF
);
const addressAutofillAvailablePrefValue = Services.prefs.getCharPref(
AUTOFILL_ADDRESSES_AVAILABLE_PREF
);
is(
FormAutofill.isAutofillAddressesAvailable,
false,
"Address autofill should not be available due to unsupported region"
);
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.group).hidden,
false,
"Form Autofill group should be visible"
);
is(
content.document.querySelector(selectors.addressAutofillCheckbox),
null,
"Address checkbox should not exist due to address autofill not being available"
);
is(
content.document.querySelector(selectors.creditCardAutofillCheckbox)
.checked,
true,
"Checkbox should be checked when Autofill Credit Cards is enabled"
);
});
info("test toggling the credit card autofill checkbox");
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
content.document
.querySelector(selectors.creditCardAutofillCheckbox)
.scrollIntoView({ block: "center", behavior: "instant" });
});
await BrowserTestUtils.synthesizeMouseAtCenter(
SELECTORS.creditCardAutofillCheckbox,
{},
browser
);
is(
Services.prefs.getBoolPref(ENABLED_AUTOFILL_CREDITCARDS_PREF),
false,
"Check credit card autofill is now disabled"
);
is(
Services.prefs.getCharPref(AUTOFILL_ADDRESSES_AVAILABLE_PREF),
addressAutofillAvailablePrefValue,
"Address autofill availability should not change due to interaction with credit card checkbox"
);
is(
addressAutofillEnabledPrefValue,
Services.prefs.getBoolPref(ENABLED_AUTOFILL_ADDRESSES_PREF),
"Address autofill enabled pref should not change due to credit card checkbox"
);
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.addressAutofillCheckbox),
null,
"Address checkbox should not exist due to address autofill not being available"
);
});
}
);
await SpecialPowers.popPrefEnv();
});
// Checkboxes should be disabled based on whether or not they are locked.
add_task(async function test_aboutPreferencesPrivacy() {
Services.prefs.lockPref(ENABLED_AUTOFILL_ADDRESSES_PREF);
Services.prefs.lockPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
registerCleanupFunction(function () {
Services.prefs.unlockPref(ENABLED_AUTOFILL_ADDRESSES_PREF);
Services.prefs.unlockPref(ENABLED_AUTOFILL_CREDITCARDS_PREF);
});
let finalPrefPaneLoaded = TestUtils.topicObserved(
"sync-pane-loaded",
() => true
);
await BrowserTestUtils.withNewTab(
{ gBrowser, url: PAGE_PRIVACY },
async function (browser) {
await finalPrefPaneLoaded;
await SpecialPowers.spawn(browser, [SELECTORS], selectors => {
is(
content.document.querySelector(selectors.addressAutofillCheckbox)
.disabled,
true,
"Autofill addresses checkbox should be disabled"
);
is(
content.document.querySelector(selectors.creditCardAutofillCheckbox)
.disabled,
true,
"Autofill credit cards checkbox should be disabled"
);
});
}
);
});