1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
"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(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.
function* createAndRemoveTab(formValue) {
// Create a new tab.
let tab = gBrowser.addTab(URL);
let browser = tab.linkedBrowser;
yield promiseBrowserLoaded(browser);
// Set form value.
yield setInputValue(browser, formValue);
// Remove the tab.
yield promiseRemoveTab(tab);
}
// Test that valid CC numbers are not collected.
for (let number of validCCNumbers) {
yield createAndRemoveTab(number);
let [{state}] = JSON.parse(ss.getClosedTabData(window));
ok(!("formdata" in state), "valid CC numbers are not collected");
}
// Test that non-CC numbers are still collected.
for (let number of invalidCCNumbers) {
yield createAndRemoveTab(number);
let [{state: {formdata}}] = JSON.parse(ss.getClosedTabData(window));
is(formdata.id.txt, number,
"numbers that are not valid CC numbers are still collected");
}
});
function setInputValue(browser, formValue) {
return ContentTask.spawn(browser, formValue, function* (formValue) {
content.document.getElementById("txt").setUserInput(formValue);
});
}
|