From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser/browser_privacyPreferences.js | 439 +++++++++++++++++++++ 1 file changed, 439 insertions(+) create mode 100644 browser/extensions/formautofill/test/browser/browser_privacyPreferences.js (limited to 'browser/extensions/formautofill/test/browser/browser_privacyPreferences.js') diff --git a/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js b/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js new file mode 100644 index 0000000000..2d5759ca66 --- /dev/null +++ b/browser/extensions/formautofill/test/browser/browser_privacyPreferences.js @@ -0,0 +1,439 @@ +"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" + ); + }); + } + ); +}); -- cgit v1.2.3