diff --git a/browser/extensions/formautofill/FormAutofillHandler.jsm b/browser/extensions/formautofill/FormAutofillHandler.jsm index 4d78584799d9..cb36eeb4c3e8 100644 --- a/browser/extensions/formautofill/FormAutofillHandler.jsm +++ b/browser/extensions/formautofill/FormAutofillHandler.jsm @@ -61,36 +61,8 @@ FormAutofillHandler.prototype = { * Set fieldDetails from the form about fields that can be autofilled. */ collectFormFields() { - this.fieldDetails = []; - - for (let element of this.form.elements) { - // Exclude elements to which no autocomplete field has been assigned. - let info = FormAutofillHeuristics.getInfo(element); - if (!info) { - continue; - } - - // Store the association between the field metadata and the element. - if (this.fieldDetails.some(f => f.section == info.section && - f.addressType == info.addressType && - f.contactType == info.contactType && - f.fieldName == info.fieldName)) { - // A field with the same identifier already exists. - log.debug("Not collecting a field matching another with the same info:", info); - continue; - } - - let formatWithElement = { - section: info.section, - addressType: info.addressType, - contactType: info.contactType, - fieldName: info.fieldName, - elementWeakRef: Cu.getWeakReference(element), - }; - - this.fieldDetails.push(formatWithElement); - } - + let fieldDetails = FormAutofillHeuristics.getFormInfo(this.form); + this.fieldDetails = fieldDetails ? fieldDetails : []; log.debug("Collected details on", this.fieldDetails.length, "fields"); }, diff --git a/browser/extensions/formautofill/FormAutofillHeuristics.jsm b/browser/extensions/formautofill/FormAutofillHeuristics.jsm index b188f44119c8..bfa9272b71e8 100644 --- a/browser/extensions/formautofill/FormAutofillHeuristics.jsm +++ b/browser/extensions/formautofill/FormAutofillHeuristics.jsm @@ -34,6 +34,39 @@ this.FormAutofillHeuristics = { "email", ], + getFormInfo(form) { + let fieldDetails = []; + for (let element of form.elements) { + // Exclude elements to which no autocomplete field has been assigned. + let info = this.getInfo(element); + if (!info) { + continue; + } + + // Store the association between the field metadata and the element. + if (fieldDetails.some(f => f.section == info.section && + f.addressType == info.addressType && + f.contactType == info.contactType && + f.fieldName == info.fieldName)) { + // A field with the same identifier already exists. + log.debug("Not collecting a field matching another with the same info:", info); + continue; + } + + let formatWithElement = { + section: info.section, + addressType: info.addressType, + contactType: info.contactType, + fieldName: info.fieldName, + elementWeakRef: Cu.getWeakReference(element), + }; + + fieldDetails.push(formatWithElement); + } + + return fieldDetails; + }, + getInfo(element) { if (!(element instanceof Ci.nsIDOMHTMLInputElement)) { return null;