Bug 1361237 - Part 1: Use a set of regexp to recognize Credit Card autofill types.; r?MattN draft
authorSean Lee <selee@mozilla.com>
Fri, 26 May 2017 23:02:21 +0800
changeset 650151 8e27e7541b86ce0270543f64ff36b046a3f1d3e3
parent 649622 7dddbd85047c6dc73ddbe1e423cd643a217845b3
child 650152 adf9f4f79e3b3a34cad3090ef099cebff296e103
child 650399 fa9750f8f422a2c1215764d3224f4d756b3ee160
child 651150 eb94bb2c743584583f43d946c8ccfe81fab1a2b4
push id75285
push userbmo:selee@mozilla.com
push dateMon, 21 Aug 2017 21:37:20 +0000
reviewersMattN
bugs1361237
milestone57.0a1
Bug 1361237 - Part 1: Use a set of regexp to recognize Credit Card autofill types.; r?MattN MozReview-Commit-ID: 6snz9FFwzni
browser/extensions/formautofill/content/heuristicsRegexp.js
browser/extensions/formautofill/test/unit/test_getInfo.js
--- a/browser/extensions/formautofill/content/heuristicsRegexp.js
+++ b/browser/extensions/formautofill/content/heuristicsRegexp.js
@@ -197,10 +197,70 @@ var HeuristicsRegExp = {
       "|famille|^nom" +                       // fr-FR
       "|cognome" +                            // it-IT
       "|姓" +                                 // ja-JP
       "|morada|apelidos|surename|sobrenome" + // pt-BR, pt-PT
       "|Фамилия" +                            // ru
       "|\\b성(?:[^명]|\\b)",                  // ko-KR
       "iu"
     ),
+
+    // ==== Credit Card Fields ====
+    "cc-name": new RegExp(
+      "card.?(?:holder|owner)|name.*(\\b)?on(\\b)?.*card" +
+      "|(?:card|cc).?name|cc.?full.?name" +
+      "|karteninhaber" +                  // de-DE
+      "|nombre.*tarjeta" +                // es
+      "|nom.*carte" +                     // fr-FR
+      "|nome.*cart" +                     // it-IT
+      "|名前" +                           // ja-JP
+      "|Имя.*карты" +                     // ru
+      "|信用卡开户名|开户名|持卡人姓名" + // zh-CN
+      "|持卡人姓名",                      // zh-TW
+      "iu"
+    ),
+    "cc-number": new RegExp(
+      "(add)?(?:card|cc|acct).?(?:number|#|no|num|field)" +
+      "|nummer" +                // de-DE
+      "|credito|numero|número" + // es
+      "|numéro" +                // fr-FR
+      "|カード番号" +            // ja-JP
+      "|Номер.*карты" +          // ru
+      "|信用卡号|信用卡号码" +   // zh-CN
+      "|信用卡卡號" +            // zh-TW
+      "|카드",                   // ko-KR
+      "iu"
+    ),
+    "cc-exp-month": new RegExp(
+      "expir|exp.*mo|exp.*date|ccmonth|cardmonth|addmonth" +
+      "|gueltig|gültig|monat" + // de-DE
+      "|fecha" +                // es
+      "|date.*exp" +            // fr-FR
+      "|scadenza" +             // it-IT
+      "|有効期限" +             // ja-JP
+      "|validade" +             // pt-BR, pt-PT
+      "|Срок действия карты" +  // ru
+      "|月",                    // zh-CN,
+      "iu"
+    ),
+    "cc-exp-year": new RegExp(
+      "exp|^/|(add)?year" +
+      "|ablaufdatum|gueltig|gültig|jahr" + // de-DE
+      "|fecha" +                           // es
+      "|scadenza" +                        // it-IT
+      "|有効期限" +                        // ja-JP
+      "|validade" +                        // pt-BR, pt-PT
+      "|Срок действия карты" +             // ru
+      "|年|有效期",                        // zh-CN
+      "iu"
+    ),
+    "cc-exp": new RegExp(
+      "expir|exp.*date|^expfield$" +
+      "|gueltig|gültig" +     // de-DE
+      "|fecha" +              // es
+      "|date.*exp" +          // fr-FR
+      "|scadenza" +           // it-IT
+      "|有効期限" +           // ja-JP
+      "|validade" +           // pt-BR, pt-PT
+      "|Срок действия карты", // ru
+    ),
   },
 };
--- a/browser/extensions/formautofill/test/unit/test_getInfo.js
+++ b/browser/extensions/formautofill/test/unit/test_getInfo.js
@@ -220,16 +220,30 @@ const TESTCASES = [
     elementId: "targetElement",
     expectedReturnValue: {
       fieldName: "address-level2",
       section: "",
       addressType: "",
       contactType: "",
     },
   },
+  {
+    description: "Verify credit card number",
+    document: `<form>
+                 <label for="targetElement"> Card Number</label>
+                 <input id="targetElement" type="text">
+               </form>`,
+    elementId: "targetElement",
+    expectedReturnValue: {
+      fieldName: "cc-number",
+      section: "",
+      addressType: "",
+      contactType: "",
+    },
+  },
 ];
 
 TESTCASES.forEach(testcase => {
   add_task(async function() {
     do_print("Starting testcase: " + testcase.description);
 
     let doc = MockDocument.createTestDocument(
       "http://localhost:8080/test/", testcase.document);