Bug 600551 - Password manager not working with input type=email. r=dolske, a=blocking

This commit is contained in:
Bobby Johnson 2010-11-19 18:45:55 -05:00
parent 86a74972b4
commit c855497a35
3 changed files with 187 additions and 2 deletions

View File

@ -711,8 +711,16 @@ LoginManager.prototype = {
// 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;
}
}

View File

@ -55,6 +55,7 @@ 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 \

View File

@ -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>