Bug 1371131 - Part 2. Refactor ProfileAutoCompleteResult to using class syntax. r=lchang,steveck
authorRay Lin <ralin@mozilla.com>
Mon, 24 Jul 2017 11:41:33 +0800
changeset 419429 6efa0b5aaabe5bd6b5e7c657897c520347e72968
parent 419428 05dde481973c4fd927c2992195adaa5a3eb2f2f9
child 419430 1f85c1bfd4bdb1dc53633096b1ef6062869aeda8
push id7566
push usermtabara@mozilla.com
push dateWed, 02 Aug 2017 08:25:16 +0000
treeherdermozilla-beta@86913f512c3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerslchang, steveck
bugs1371131
milestone56.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1371131 - Part 2. Refactor ProfileAutoCompleteResult to using class syntax. r=lchang,steveck MozReview-Commit-ID: GDsLZrhcSBx
browser/extensions/formautofill/ProfileAutoCompleteResult.jsm
--- a/browser/extensions/formautofill/ProfileAutoCompleteResult.jsm
+++ b/browser/extensions/formautofill/ProfileAutoCompleteResult.jsm
@@ -9,87 +9,71 @@ this.EXPORTED_SYMBOLS = ["ProfileAutoCom
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://formautofill/FormAutofillUtils.jsm");
 
 this.log = null;
 FormAutofillUtils.defineLazyLogGetter(this, this.EXPORTED_SYMBOLS[0]);
 
+class ProfileAutoCompleteResult {
+  constructor(searchString, focusedFieldName, allFieldNames, matchingProfiles, {resultCode = null}) {
+    log.debug("Constructing new ProfileAutoCompleteResult:", [...arguments]);
 
-this.ProfileAutoCompleteResult = function(searchString,
-                                          focusedFieldName,
-                                          allFieldNames,
-                                          matchingProfiles,
-                                          {resultCode = null}) {
-  log.debug("Constructing new ProfileAutoCompleteResult:", [...arguments]);
-  this.searchString = searchString;
-  this._focusedFieldName = focusedFieldName;
-  this._allFieldNames = allFieldNames;
-  this._matchingProfiles = matchingProfiles;
+    // nsISupports
+    this.QueryInterface = XPCOMUtils.generateQI([Ci.nsIAutoCompleteResult]);
 
-  if (resultCode) {
-    this.searchResult = resultCode;
-  } else if (matchingProfiles.length > 0) {
-    this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
-  } else {
-    this.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
-  }
+    // The user's query string
+    this.searchString = searchString;
+    // The field name of the focused input.
+    this._focusedFieldName = focusedFieldName;
+    // All field names in the form which contains the focused input.
+    this._allFieldNames = allFieldNames;
+    // The matching profiles contains the information for filling forms.
+    this._matchingProfiles = matchingProfiles;
+    // The default item that should be entered if none is selected
+    this.defaultIndex = 0;
+    // The reason the search failed
+    this.errorDescription = "";
 
-  this._popupLabels = this._generateLabels(this._focusedFieldName,
-                                           this._allFieldNames,
-                                           this._matchingProfiles);
-  // Add an empty result entry for footer. Its content will come from
-  // the footer binding, so don't assign any value to it.
-  this._popupLabels.push({
-    primary: "",
-    secondary: "",
-    categories: FormAutofillUtils.getCategoriesFromFieldNames(allFieldNames),
-    focusedCategory: FormAutofillUtils.getCategoryFromFieldName(focusedFieldName),
-  });
-};
-
-ProfileAutoCompleteResult.prototype = {
-
-  // The user's query string
-  searchString: "",
+    // The result code of this result object.
+    if (resultCode) {
+      this.searchResult = resultCode;
+    } else if (matchingProfiles.length > 0) {
+      this.searchResult = Ci.nsIAutoCompleteResult.RESULT_SUCCESS;
+    } else {
+      this.searchResult = Ci.nsIAutoCompleteResult.RESULT_NOMATCH;
+    }
 
-  // The default item that should be entered if none is selected
-  defaultIndex: 0,
-
-  // The reason the search failed
-  errorDescription: "",
-
-  // The result code of this result object.
-  searchResult: null,
-
-  // The field name of the focused input.
-  _focusedFieldName: "",
-
-  // All field names in the form which contains the focused input.
-  _allFieldNames: null,
-
-  // The matching profiles contains the information for filling forms.
-  _matchingProfiles: null,
-
-  // An array of primary and secondary labels for each profiles.
-  _popupLabels: null,
+    // An array of primary and secondary labels for each profile.
+    this._popupLabels = this._generateLabels(this._focusedFieldName,
+                                             this._allFieldNames,
+                                             this._matchingProfiles);
+    // Add an empty result entry for footer. Its content will come from
+    // the footer binding, so don't assign any value to it.
+    this._popupLabels.push({
+      primary: "",
+      secondary: "",
+      categories: FormAutofillUtils.getCategoriesFromFieldNames(allFieldNames),
+      focusedCategory: FormAutofillUtils.getCategoryFromFieldName(focusedFieldName),
+    });
+  }
 
   /**
    * @returns {number} The number of results
    */
   get matchCount() {
     return this._popupLabels.length;
-  },
+  }
 
   _checkIndexBounds(index) {
     if (index < 0 || index >= this._popupLabels.length) {
       throw Components.Exception("Index out of range.", Cr.NS_ERROR_ILLEGAL_VALUE);
     }
-  },
+  }
 
   /**
    * Get the secondary label based on the focused field name and related field names
    * in the same form.
    * @param   {string} focusedFieldName The field name of the focused input
    * @param   {Array<Object>} allFieldNames The field names in the same section
    * @param   {object} profile The profile providing the labels to show.
    * @returns {string} The secondary label
@@ -149,17 +133,17 @@ ProfileAutoCompleteResult.prototype = {
             profile["-moz-street-address-one-line"]) {
           return profile["-moz-street-address-one-line"];
         }
         return profile[currentFieldName];
       }
     }
 
     return ""; // Nothing matched.
-  },
+  }
 
   _generateLabels(focusedFieldName, allFieldNames, profiles) {
     // Skip results without a primary label.
     return profiles.filter(profile => {
       return !!profile[focusedFieldName];
     }).map(profile => {
       let primaryLabel = profile[focusedFieldName];
       if (focusedFieldName == "street-address" &&
@@ -168,80 +152,78 @@ ProfileAutoCompleteResult.prototype = {
       }
       return {
         primary: primaryLabel,
         secondary: this._getSecondaryLabel(focusedFieldName,
                                            allFieldNames,
                                            profile),
       };
     });
-  },
+  }
+
 
   /**
    * Retrieves a result
    * @param   {number} index The index of the result requested
    * @returns {string} The result at the specified index
    */
   getValueAt(index) {
     this._checkIndexBounds(index);
     return this._popupLabels[index].primary;
-  },
+  }
 
   getLabelAt(index) {
     this._checkIndexBounds(index);
     return JSON.stringify(this._popupLabels[index]);
-  },
+  }
 
   /**
    * Retrieves a comment (metadata instance)
    * @param   {number} index The index of the comment requested
    * @returns {string} The comment at the specified index
    */
   getCommentAt(index) {
     this._checkIndexBounds(index);
     return JSON.stringify(this._matchingProfiles[index]);
-  },
+  }
 
   /**
    * Retrieves a style hint specific to a particular index.
    * @param   {number} index The index of the style hint requested
    * @returns {string} The style hint at the specified index
    */
   getStyleAt(index) {
     this._checkIndexBounds(index);
     if (index == this.matchCount - 1) {
       return "autofill-footer";
     }
     return "autofill-profile";
-  },
+  }
 
   /**
    * Retrieves an image url.
    * @param   {number} index The index of the image url requested
    * @returns {string} The image url at the specified index
    */
   getImageAt(index) {
     this._checkIndexBounds(index);
     return "";
-  },
+  }
 
   /**
    * Retrieves a result
    * @param   {number} index The index of the result requested
    * @returns {string} The result at the specified index
    */
   getFinalCompleteValueAt(index) {
     return this.getValueAt(index);
-  },
+  }
 
   /**
    * Removes a result from the resultset
    * @param {number} index The index of the result to remove
    * @param {boolean} removeFromDatabase TRUE for removing data from DataBase
    *                                     as well.
    */
   removeValueAt(index, removeFromDatabase) {
     // There is no plan to support removing profiles via autocomplete.
-  },
-
-  // nsISupports
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIAutoCompleteResult]),
-};
+  }
+}