Bug 1374724 - Use the .labels API to improve FormAutofillUtils.findLabelElements. r=MattN draft
authorSean Lee <selee@mozilla.com>
Tue, 27 Jun 2017 06:30:28 -0700
changeset 600602 ced71eac5c74d1b86c7f744d576414f88c5e993e
parent 600491 a584b41ad399e648c99a43e41fa5138b2ccfd491
child 635030 7d3c4f40410b84dc7b9c032b606e67cae5707d3d
push id65799
push userbmo:selee@mozilla.com
push dateTue, 27 Jun 2017 13:39:22 +0000
reviewersMattN
bugs1374724
milestone56.0a1
Bug 1374724 - Use the .labels API to improve FormAutofillUtils.findLabelElements. r=MattN MozReview-Commit-ID: 16OgHw9Bjts
browser/extensions/formautofill/FormAutofillUtils.jsm
--- 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;
   },