Bug 1332165 - Trim values for the purposes of 'skipEmptyFields' in _getPasswordFields. r=dolske draft
authorMatthew Noorenberghe <mozilla@noorenberghe.ca>
Mon, 23 Jan 2017 23:31:34 -0800
changeset 465563 73d0ac7f9e22e40165fcd20780118a751f1718a5
parent 464800 bd0cd9af94d9334b862d9891013fed56fb9b3b7c
child 543167 6885b44d873f49e8167ed6631f74c2d53946f7e0
push id42621
push usermozilla@noorenberghe.ca
push dateTue, 24 Jan 2017 07:32:21 +0000
reviewersdolske
bugs1332165
milestone53.0a1
Bug 1332165 - Trim values for the purposes of 'skipEmptyFields' in _getPasswordFields. r=dolske We will no longer prompt to save passwords consisting solely of whitespace. MozReview-Commit-ID: FknB39TCHEa
toolkit/components/passwordmgr/LoginManagerContent.jsm
toolkit/components/passwordmgr/test/unit/test_getPasswordFields.js
--- a/toolkit/components/passwordmgr/LoginManagerContent.jsm
+++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm
@@ -610,17 +610,17 @@ var LoginManagerContent = {
       // Exclude ones matching a `notPasswordSelector`, if specified.
       if (fieldOverrideRecipe && fieldOverrideRecipe.notPasswordSelector &&
           element.matches(fieldOverrideRecipe.notPasswordSelector)) {
         log("skipping password field (id/name is", element.id, " / ",
             element.name + ") due to recipe:", fieldOverrideRecipe);
         continue;
       }
 
-      if (skipEmptyFields && !element.value) {
+      if (skipEmptyFields && !element.value.trim()) {
         continue;
       }
 
       pwFields[pwFields.length] = {
                                     index   : i,
                                     element
                                   };
     }
--- a/toolkit/components/passwordmgr/test/unit/test_getPasswordFields.js
+++ b/toolkit/components/passwordmgr/test/unit/test_getPasswordFields.js
@@ -72,18 +72,28 @@ const TESTCASES = [
   {
     description: "2 password fields outside of a <form> with 1 linked via @form + skipEmpty",
     document: `<input id="pw1" type=password><input id="pw2" type=password form="form1">
       <form id="form1"></form>`,
     returnedFieldIDsByFormLike: [[], []],
     skipEmptyFields: true,
   },
   {
+    description: "skipEmptyFields should also skip white-space only fields",
+    document: `<input id="pw-space" type=password value=" ">
+               <input id="pw-tab" type=password value="	">
+               <input id="pw-newline" type=password form="form1" value="
+">
+      <form id="form1"></form>`,
+    returnedFieldIDsByFormLike: [[], []],
+    skipEmptyFields: true,
+  },
+  {
     description: "2 password fields outside of a <form> with 1 linked via @form + skipEmpty with 1 empty",
-    document: `<input id="pw1" type=password value="pass1"><input id="pw2" type=password form="form1">
+    document: `<input id="pw1" type=password value=" pass1 "><input id="pw2" type=password form="form1">
       <form id="form1"></form>`,
     returnedFieldIDsByFormLike: [["pw1"], []],
     skipEmptyFields: true,
     fieldOverrideRecipe: {
       // Ensure a recipe without `notPasswordSelector` doesn't cause a problem.
       hosts: ["localhost:8080"],
     },
   },