Bug 600551 - Password manager not working with input type=email. r=dolske, a=blocking
authorBobby Johnson <rjohnson19@gmail.com>
Fri, 19 Nov 2010 18:45:55 -0500
changeset 59105 0020a1042b3f2fa830bb03ec883320f3d7b30814
parent 59104 5113288ca83e4af4b1ca36a2afc67cc4c9db22e3
child 59106 d4cfad073452d87d7952cee29920cc7e9938c123
push id1
push usershaver@mozilla.com
push dateTue, 04 Jan 2011 17:58:04 +0000
reviewersdolske, blocking
bugs600551
milestone2.0b8pre
Bug 600551 - Password manager not working with input type=email. r=dolske, a=blocking
toolkit/components/passwordmgr/src/nsLoginManager.js
toolkit/components/passwordmgr/test/Makefile.in
toolkit/components/passwordmgr/test/test_basic_form_html5.html
--- a/toolkit/components/passwordmgr/src/nsLoginManager.js
+++ b/toolkit/components/passwordmgr/src/nsLoginManager.js
@@ -706,18 +706,26 @@ LoginManager.prototype = {
             return [null, null, null];
 
 
         // Locate the username field in the form by searching backwards
         // from the first passwordfield, assume the first text field is the
         // username. We might not find a username field if the user is
         // already logged in to the site. 
         for (var i = pwFields[0].index - 1; i >= 0; i--) {
-            if (form.elements[i].type == "text") {
-                usernameField = form.elements[i];
+            var element = form.elements[i];
+            var fieldType = (element.hasAttribute("type") ?
+                             element.getAttribute("type").toLowerCase() :
+                             element.type);
+            if (fieldType == "text"  ||
+                fieldType == "email" ||
+                fieldType == "url"   ||
+                fieldType == "tel"   ||
+                fieldType == "number") {
+                usernameField = element;
                 break;
             }
         }
 
         if (!usernameField)
             this.log("(form -- no username field found)");
 
 
--- a/toolkit/components/passwordmgr/test/Makefile.in
+++ b/toolkit/components/passwordmgr/test/Makefile.in
@@ -50,16 +50,17 @@ DIRS = \
 endif
 
 # Module name for xpcshell tests.
 MODULE		= test_passwordmgr
 
 # Mochitest tests
 MOCHI_TESTS = \
 		test_basic_form.html \
+		test_basic_form_html5.html \
 		test_basic_form_2.html \
 		test_basic_form_0pw.html \
 		test_basic_form_1pw.html \
 		test_basic_form_1pw_2.html \
 		test_basic_form_2pw_1.html \
 		test_basic_form_2pw_2.html \
 		test_basic_form_3pw_1.html \
 		test_basic_form_autocomplete.html \
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/test_basic_form_html5.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Test for Login Manager</title>
+  <script type="text/javascript" src="/MochiKit/packed.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>  
+  <script type="text/javascript" src="pwmgr_common.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+Login Manager test: html5 input types (email, tel, url, etc.)
+<p id="display"></p>
+<div id="content" style="display: none">
+
+  <form id="form1" action="http://bug600551-1">
+    <input  type="email"    name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form2" action="http://bug600551-2">
+    <input  type="tel"      name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form3" action="http://bug600551-3">
+    <input  type="url"      name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  
+  <form id="form4" action="http://bug600551-4">
+    <input  type="number"   name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <!-- The following forms should not be filled with usernames -->
+  <form id="form5" action="formtest.js">
+    <input  type="search"   name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form6" action="formtest.js">
+    <input  type="datetime" name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form7" action="formtest.js">
+    <input  type="date"     name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form8" action="formtest.js">
+    <input  type="month" name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form9" action="formtest.js">
+    <input  type="week"     name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form10" action="formtest.js">
+    <input  type="time"     name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form11" action="formtest.js">
+    <input  type="datetime-local" name="uname">
+    <input  type="password"       name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form12" action="formtest.js">
+    <input  type="range"    name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+  
+  <form id="form13" action="formtest.js">
+    <input  type="color"    name="uname">
+    <input  type="password" name="pword">
+    <button type="submit">Submit</button>
+  </form>
+
+
+</div>
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+/* Test for Login Manager: 600551
+  (Password manager not working with input type=email)
+ */
+commonInit();
+
+netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+
+const Ci = Components.interfaces;
+const Cc = Components.classes;
+pwmgr = Cc["@mozilla.org/login-manager;1"].
+        getService(Ci.nsILoginManager);
+
+login1  = Cc["@mozilla.org/login-manager/loginInfo;1"].
+           createInstance(Ci.nsILoginInfo);
+login2  = Cc["@mozilla.org/login-manager/loginInfo;1"].
+           createInstance(Ci.nsILoginInfo);
+login3  = Cc["@mozilla.org/login-manager/loginInfo;1"].
+           createInstance(Ci.nsILoginInfo);        
+login4  = Cc["@mozilla.org/login-manager/loginInfo;1"].
+           createInstance(Ci.nsILoginInfo);
+
+login1.init("http://mochi.test:8888", "http://bug600551-1", null,
+            "testuser@example.com", "testpass1", "", "");
+login2.init("http://mochi.test:8888", "http://bug600551-2", null,
+            "555-555-5555", "testpass2", "", "");
+login3.init("http://mochi.test:8888", "http://bug600551-3", null,
+            "http://mozilla.org", "testpass3", "", "");
+login4.init("http://mochi.test:8888", "http://bug600551-4", null,
+            "123456789", "testpass4", "", "");
+
+pwmgr.addLogin(login1);
+pwmgr.addLogin(login2);
+pwmgr.addLogin(login3);
+pwmgr.addLogin(login4);
+
+function startTest() {
+  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+
+  checkForm(1, "testuser@example.com", "testpass1");
+  checkForm(2, "555-555-5555", "testpass2");
+  checkForm(3, "http://mozilla.org", "testpass3");
+  checkForm(4, "123456789", "testpass4");
+  
+  is($_(5, "uname").value, "", "type=search should not be considered a username");
+  
+  is($_(6, "uname").value, "", "type=datetime should not be considered a username");
+  
+  is($_(7, "uname").value, "", "type=date should not be considered a username");
+  
+  is($_(8, "uname").value, "", "type=month should not be considered a username");
+  
+  is($_(9, "uname").value, "", "type=week should not be considered a username");
+  
+  is($_(10, "uname").value, "", "type=time should not be considered a username");
+  
+  is($_(11, "uname").value, "", "type=datetime-local should not be considered a username");
+  
+  is($_(12, "uname").value, "", "type=range should not be considered a username");
+  
+  is($_(13, "uname").value, "", "type=color should not be considered a username");
+
+  pwmgr.removeLogin(login1);
+  pwmgr.removeLogin(login2);
+  pwmgr.removeLogin(login3);
+  pwmgr.removeLogin(login4);
+ 
+  SimpleTest.finish();
+}
+
+window.onload = startTest;
+
+SimpleTest.waitForExplicitFinish();
+
+</script>
+</pre>
+</body>
+</html>