diff --git a/toolkit/components/passwordmgr/LoginHelper.jsm b/toolkit/components/passwordmgr/LoginHelper.jsm index ef2c822ccfb..b983783f026 100644 --- a/toolkit/components/passwordmgr/LoginHelper.jsm +++ b/toolkit/components/passwordmgr/LoginHelper.jsm @@ -316,4 +316,30 @@ this.LoginHelper = { {filterString : filterString}); } }, + + /** + * Checks if a field type is username compatible. + * + * @param {Element} element + * the field we want to check. + * + * @returns {Boolean} true if the field type is one + * of the username types. + */ + isUsernameFieldType(element) { + if (!(element instanceof Ci.nsIDOMHTMLInputElement)) + return false; + + let fieldType = (element.hasAttribute("type") ? + element.getAttribute("type").toLowerCase() : + element.type); + if (fieldType == "text" || + fieldType == "email" || + fieldType == "url" || + fieldType == "tel" || + fieldType == "number") { + return true; + } + return false; + }, }; diff --git a/toolkit/components/passwordmgr/LoginManagerContent.jsm b/toolkit/components/passwordmgr/LoginManagerContent.jsm index f70de5778ac..d4798b1838e 100644 --- a/toolkit/components/passwordmgr/LoginManagerContent.jsm +++ b/toolkit/components/passwordmgr/LoginManagerContent.jsm @@ -294,7 +294,7 @@ var LoginManagerContent = { return; } - let formLike = FormLikeFactory.createFromPasswordField(pwField); + let formLike = FormLikeFactory.createFromField(pwField); log("onDOMInputPasswordAdded:", pwField, formLike); let deferredTask = this._deferredPasswordAddedTasksByRootElement.get(formLike.rootElement); @@ -475,7 +475,7 @@ var LoginManagerContent = { // If we have a target input, fills it's form. if (inputElement) { - form = FormLikeFactory.createFromPasswordField(inputElement); + form = FormLikeFactory.createFromField(inputElement); clobberUsername = false; } this._fillForm(form, true, clobberUsername, true, true, loginsFound, recipes, options); @@ -506,7 +506,7 @@ var LoginManagerContent = { if (!(acInputField.ownerDocument instanceof Ci.nsIDOMHTMLDocument)) return; - if (!this._isUsernameFieldType(acInputField)) + if (!LoginHelper.isUsernameFieldType(acInputField)) return; var acForm = acInputField.form; // XXX: Bug 1173583 - This doesn't work outside of
`, + returnedFieldIDs: [null, "pw1", null], + skipEmptyFields: undefined, + }, + { + description: "1 text field in a form, 1 password field outside (not processed)", + document: ``, + returnedFieldIDs: [null, null, null], + skipEmptyFields: undefined, + }, { description: "2 password fields outside of a