diff options
Diffstat (limited to '')
-rw-r--r-- | browser/components/sessionstore/test/browser_formdata_cc.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_formdata_cc.js b/browser/components/sessionstore/test/browser_formdata_cc.js new file mode 100644 index 0000000000..7f0dac8115 --- /dev/null +++ b/browser/components/sessionstore/test/browser_formdata_cc.js @@ -0,0 +1,107 @@ +"use strict"; + +const URL = + "http://mochi.test:8888/browser/browser/components/" + + "sessionstore/test/browser_formdata_sample.html"; + +requestLongerTimeout(3); + +/** + * This test ensures that credit card numbers in form data will not be + * collected, while numbers that don't look like credit card numbers will + * still be collected. + */ +add_task(async function () { + const validCCNumbers = [ + // 15 digits + "930771457288760", + "474915027480942", + "924894781317325", + "714816113937185", + "790466087343106", + "474320195408363", + "219211148122351", + "633038472250799", + "354236732906484", + "095347810189325", + // 16 digits + "3091269135815020", + "5471839082338112", + "0580828863575793", + "5015290610002932", + "9465714503078607", + "4302068493801686", + "2721398408985465", + "6160334316984331", + "8643619970075142", + "0218246069710785", + ]; + + const invalidCCNumbers = [ + // 15 digits + "526931005800649", + "724952425140686", + "379761391174135", + "030551436468583", + "947377014076746", + "254848023655752", + "226871580283345", + "708025346034339", + "917585839076788", + "918632588027666", + // 16 digits + "9946177098017064", + "4081194386488872", + "3095975979578034", + "3662215692222536", + "6723210018630429", + "4411962856225025", + "8276996369036686", + "4449796938248871", + "3350852696538147", + "5011802870046957", + ]; + + // Creates a tab, loads a page with a form field, sets the value of the + // field, and then removes the tab to trigger data collection. + async function createAndRemoveTab(formValue) { + // Create a new tab. + let tab = BrowserTestUtils.addTab(gBrowser, URL); + let browser = tab.linkedBrowser; + await promiseBrowserLoaded(browser); + + // Set form value. + await setInputValue(browser, formValue); + + // Remove the tab. + await promiseRemoveTabAndSessionState(tab); + } + + // Test that valid CC numbers are not collected. + for (let number of validCCNumbers) { + await createAndRemoveTab(number); + let [{ state }] = ss.getClosedTabDataForWindow(window); + ok(!("formdata" in state), "valid CC numbers are not collected"); + } + + // Test that non-CC numbers are still collected. + for (let number of invalidCCNumbers) { + await createAndRemoveTab(number); + let [ + { + state: { formdata }, + }, + ] = ss.getClosedTabDataForWindow(window); + is( + formdata.id.txt, + number, + "numbers that are not valid CC numbers are still collected" + ); + } +}); + +function setInputValue(browser, formValue) { + return SpecialPowers.spawn(browser, [formValue], async function (newValue) { + content.document.getElementById("txt").setUserInput(newValue); + }); +} |