diff options
Diffstat (limited to 'browser/extensions/formautofill/test/browser/address')
7 files changed, 209 insertions, 6 deletions
diff --git a/browser/extensions/formautofill/test/browser/address/browser.toml b/browser/extensions/formautofill/test/browser/address/browser.toml index bff24a88b0..8b7f1ec760 100644 --- a/browser/extensions/formautofill/test/browser/address/browser.toml +++ b/browser/extensions/formautofill/test/browser/address/browser.toml @@ -18,6 +18,8 @@ support-files = [ ["browser_address_capture_page_navigation.js"] +["browser_address_capture_trimmed_data.js"] + ["browser_address_doorhanger_confirmation_popup.js"] ["browser_address_doorhanger_display.js"] diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_capture_form_removal.js b/browser/extensions/formautofill/test/browser/address/browser_address_capture_form_removal.js index f94fc8241f..fed89d4599 100644 --- a/browser/extensions/formautofill/test/browser/address/browser_address_capture_form_removal.js +++ b/browser/extensions/formautofill/test/browser/address/browser_address_capture_form_removal.js @@ -118,7 +118,7 @@ add_task(async function test_address_not_captured_without_prior_fetch() { }); info("Ensure that address doorhanger is not shown"); - await ensureNoDoorhanger(browser); + await ensureNoDoorhanger(); } ); }); diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_capture_trimmed_data.js b/browser/extensions/formautofill/test/browser/address/browser_address_capture_trimmed_data.js new file mode 100644 index 0000000000..c0856dfb8d --- /dev/null +++ b/browser/extensions/formautofill/test/browser/address/browser_address_capture_trimmed_data.js @@ -0,0 +1,100 @@ +"use strict"; + +const DEFAULT_TEST_DOC = ` +<form id="form"> + <input id="street-address" autocomplete="street-address"> + <select id="address-level1" autocomplete="address-level1"> + <option value=""></option> + <option value="AL">Alabama</option> + <option value="AK">Alaska</option> + <option value="AP">Armed Forces Pacific</option> + + <option value="ca">california</option> + <option value="AR">US-Arkansas</option> + <option value="US-CA">California</option> + <option value="CA">California</option> + <option value="US-AZ">US_Arizona</option> + <option value="Ariz">Arizonac</option> +</select> +<input id="city" autocomplete="address-level2"> +<input id="country" autocomplete="country"> +<input id="email" autocomplete="email"> +<input id="tel" autocomplete="tel"> +<input type="submit"/> +</form>`; + +const TESTCASES = [ + { + description: "Save address with trimmed address data", + document: DEFAULT_TEST_DOC, + targetElementId: "street-address", + formValue: { + "#street-address": "331 E. Evelyn Avenue ", + "#country": "US", + "#email": " ", + "#tel": "1-650-903-0800", + }, + expected: [ + { + "street-address": "331 E. Evelyn Avenue", + country: "US", + email: "", + tel: "+16509030800", + }, + ], + }, +]; + +async function expectSavedAddresses(expectedAddresses) { + const addresses = await getAddresses(); + is( + addresses.length, + expectedAddresses.length, + `${addresses.length} address in the storage` + ); + + for (let i = 0; i < expectedAddresses.length; i++) { + for (const [key, value] of Object.entries(expectedAddresses[i])) { + is(addresses[i][key] ?? "", value, `field ${key} should be equal`); + } + } + return addresses; +} + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + ["extensions.formautofill.addresses.enabled", true], + ["extensions.formautofill.addresses.supported", "on"], + ["extensions.formautofill.addresses.capture.enabled", true], + ], + }); +}); + +add_task(async function test_address_capture_trimmed_data() { + for (const TEST of TESTCASES) { + info(`Test ${TEST.description}`); + + const onChanged = waitForStorageChangedEvents("add"); + await BrowserTestUtils.withNewTab(EMPTY_URL, async function (browser) { + await SpecialPowers.spawn(browser, [TEST.document], doc => { + content.document.body.innerHTML = doc; + }); + + await SimpleTest.promiseFocus(browser); + + const onPopupShown = waitForPopupShown(); + await focusUpdateSubmitForm(browser, { + focusSelector: `#${TEST.targetElementId}`, + newValues: TEST.formValue, + }); + + await onPopupShown; + await clickDoorhangerButton(MAIN_BUTTON, 0); + }); + await onChanged; + + await expectSavedAddresses(TEST.expected); + await removeAllRecords(); + } +}); diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_not_shown.js b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_not_shown.js index b1b8a6b9d2..84508189bd 100644 --- a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_not_shown.js +++ b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_not_shown.js @@ -87,7 +87,7 @@ add_task(async function test_save_doorhanger_not_shown() { newValues: TEST.formValue, }); - await ensureNoDoorhanger(browser); + await ensureNoDoorhanger(); }); if (TEST.prefs) { diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_state.js b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_state.js index a247341fef..f3b04d7f9c 100644 --- a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_state.js +++ b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_state.js @@ -1,4 +1,5 @@ "use strict"; +requestLongerTimeout(3); async function expectSavedAddresses(expectedAddresses) { const addresses = await getAddresses(); @@ -18,7 +19,11 @@ async function expectSavedAddresses(expectedAddresses) { add_setup(async function () { await SpecialPowers.pushPrefEnv({ - set: [["extensions.formautofill.addresses.capture.enabled", true]], + set: [ + ["extensions.formautofill.addresses.enabled", true], + ["extensions.formautofill.addresses.supported", "on"], + ["extensions.formautofill.addresses.capture.enabled", true], + ], }); }); @@ -102,6 +107,7 @@ add_task(async function test_save_doorhanger_state_valid() { for (const TEST of TEST_CASES) { await expectSavedAddresses([]); + const onChanged = waitForStorageChangedEvents("add"); await BrowserTestUtils.withNewTab( { gBrowser, url: ADDRESS_FORM_URL }, async function (browser) { @@ -122,8 +128,103 @@ add_task(async function test_save_doorhanger_state_valid() { await clickDoorhangerButton(MAIN_BUTTON, 0); } ); + await onChanged; await expectSavedAddresses([Object.assign(DEFAULT, TEST.expected)]); await removeAllRecords(); } }); + +add_task(async function test_save_doorhanger_state_is_select() { + const DEFAULT_TEST_DOC = ` + <form id="form"> + <input id="name" autocomplete="name"> + <input id="street-address" autocomplete="street-address"> + <select id="address-level1" autocomplete="address-level1"> + <option value=""></option> + <option value="AL">Alabama</option> + <option value="AK">Alaska</option> + <option value="AP">Armed Forces Pacific</option> + + <option value="ca">california</option> + <option value="AR">US-Arkansas</option> + <option value="US-CA">California</option> + <option value="CA">California</option> + <option value="US-AZ">US_Arizona</option> + <option value="Ariz">Arizonac</option> + </select> + <input id="city" autocomplete="address-level2"> + <input id="country" autocomplete="country"> + <input id="submit" type="submit"> + </form>`; + + const TEST_CASES = [ + { + description: "Save state with regular select option", + filled: { "address-level1": "CA" }, + expected: { "address-level1": "CA" }, + }, + { + description: "Save state with lowercase value", + filled: { "address-level1": "ca" }, + expected: { "address-level1": "CA" }, + }, + { + description: "Save state with a country code prefixed to the label", + filled: { "address-level1": "AR" }, + expected: { "address-level1": "AR" }, + }, + { + description: "Save state with a country code prefixed to the value", + filled: { "address-level1": "US-CA" }, + expected: { "address-level1": "CA" }, + }, + { + description: + "Save state with a country code prefixed to the value and label", + filled: { "address-level1": "US-AZ" }, + expected: { "address-level1": "AZ" }, + }, + { + description: "Should not save when failed to abbreviate the value", + filled: { "address-level1": "Ariz" }, + expected: { "address-level1": "" }, + }, + { + description: "Should not save select with multiple selections", + filled: { "address-level1": ["AL", "AK", "AP"] }, + expected: { "address-level1": "" }, + }, + ]; + + for (const TEST of TEST_CASES) { + const onChanged = waitForStorageChangedEvents("add"); + await BrowserTestUtils.withNewTab(EMPTY_URL, async function (browser) { + info(`Test ${TEST.description}`); + + await SpecialPowers.spawn(browser, [DEFAULT_TEST_DOC], doc => { + content.document.body.innerHTML = doc; + }); + + await SimpleTest.promiseFocus(browser); + + const onPopupShown = waitForPopupShown(); + await focusUpdateSubmitForm(browser, { + focusSelector: "#name", + newValues: { + "#name": "John Doe", + "#street-address": "Main Street", + "#country": "US", + "#address-level1": TEST.filled["address-level1"], + }, + }); + + await onPopupShown; + await clickDoorhangerButton(MAIN_BUTTON, 0); + }); + await onChanged; + + await expectSavedAddresses([TEST.expected]); + await removeAllRecords(); + } +}); diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_unsupported_region.js b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_unsupported_region.js index fc3d1c7cf4..243f857fbb 100644 --- a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_unsupported_region.js +++ b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_unsupported_region.js @@ -53,7 +53,7 @@ add_task(async function test_save_doorhanger_unsupported_region_from_record() { }, }); - await ensureNoDoorhanger(browser); + await ensureNoDoorhanger(); } ); }); @@ -79,7 +79,7 @@ add_task(async function test_save_doorhanger_unsupported_region_from_pref() { }, }); - await ensureNoDoorhanger(browser); + await ensureNoDoorhanger(); } ); diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_telemetry.js b/browser/extensions/formautofill/test/browser/address/browser_address_telemetry.js index acd7a7c364..b55abd6c72 100644 --- a/browser/extensions/formautofill/test/browser/address/browser_address_telemetry.js +++ b/browser/extensions/formautofill/test/browser/address/browser_address_telemetry.js @@ -7,7 +7,7 @@ const { TelemetryTestUtils } = ChromeUtils.importESModule( ); const { AddressTelemetry } = ChromeUtils.importESModule( - "resource://autofill/AutofillTelemetry.sys.mjs" + "resource://gre/modules/shared/AutofillTelemetry.sys.mjs" ); // Telemetry definitions |