Bug 1374724 - Use the .labels API to improve FormAutofillUtils.findLabelElements. r=MattN
MozReview-Commit-ID: 16OgHw9Bjts
--- a/browser/extensions/formautofill/FormAutofillUtils.jsm
+++ b/browser/extensions/formautofill/FormAutofillUtils.jsm
@@ -126,47 +126,17 @@ this.FormAutofillUtils = {
_extractLabelStrings(node);
}
};
_extractLabelStrings(element);
return strings;
},
findLabelElements(element) {
- let document = element.ownerDocument;
- let labels = [];
- // TODO: querySelectorAll is inefficient here. However, bug 1339726 is for
- // a more efficient implementation from DOM API perspective. This function
- // should be refined after input.labels API landed.
- for (let label of document.querySelectorAll("label[for]")) {
- if (element.id == label.htmlFor) {
- labels.push(label);
- }
- }
-
- if (labels.length > 0) {
- log.debug("Label found by ID", element.id);
- return labels;
- }
-
- let parent = element.parentNode;
- if (!parent) {
- return [];
- }
- do {
- if (parent.tagName == "LABEL" &&
- parent.control == element &&
- !parent.hasAttribute("for")) {
- log.debug("Label found in input's parent or ancestor.");
- return [parent];
- }
- parent = parent.parentNode;
- } while (parent);
-
- return [];
+ return Array.prototype.slice.call(element.labels);
},
loadDataFromScript(url, sandbox = {}) {
let scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Ci.mozIJSSubScriptLoader);
scriptLoader.loadSubScript(url, sandbox, "utf-8");
return sandbox;
},