Bug 1370474 - (Part 1) Make editProfile more like manageProfiles for consistency. r=lchang draft
authorScott Wu <scottcwwu@gmail.com>
Thu, 22 Jun 2017 18:26:24 +0800
changeset 598924 c84c5723d3e715e52c3feb7b9a40c5cad7e3c082
parent 598703 dc33e00dad90346466fefaa158bc0d79a53668a9
child 598925 95ab8954faab403efbda1e235d2047f5741136dc
push id65355
push userbmo:scwwu@mozilla.com
push dateThu, 22 Jun 2017 10:59:31 +0000
reviewerslchang
bugs1370474
milestone56.0a1
Bug 1370474 - (Part 1) Make editProfile more like manageProfiles for consistency. r=lchang MozReview-Commit-ID: Jt3f24BeM6L
browser/extensions/formautofill/content/editProfile.js
--- a/browser/extensions/formautofill/content/editProfile.js
+++ b/browser/extensions/formautofill/content/editProfile.js
@@ -11,24 +11,29 @@ Cu.import("resource://formautofill/FormA
 
 function EditDialog() {
   this._address = window.arguments && window.arguments[0];
   window.addEventListener("DOMContentLoaded", this, {once: true});
 }
 
 EditDialog.prototype = {
   init() {
-    this.refs = {
+    this._elements = {
       controlsContainer: document.getElementById("controls-container"),
       cancel: document.getElementById("cancel"),
       save: document.getElementById("save"),
     };
     this.attachEventListeners();
   },
 
+  uninit() {
+    this.detachEventListeners();
+    this._elements = null;
+  },
+
   /**
    * Asks FormAutofillParent to save or update an address.
    * @param  {object} data
    *         {
    *           {string} guid [optional]
    *           {object} address
    *         }
    */
@@ -79,62 +84,63 @@ EditDialog.prototype = {
       case "click": {
         this.handleClick(event);
         break;
       }
       case "input": {
         // Toggle disabled attribute on the save button based on
         // whether the form is filled or empty.
         if (Object.keys(this.buildAddressObject()).length == 0) {
-          this.refs.save.setAttribute("disabled", true);
+          this._elements.save.setAttribute("disabled", true);
         } else {
-          this.refs.save.removeAttribute("disabled");
+          this._elements.save.removeAttribute("disabled");
         }
         break;
       }
+      case "unload": {
+        this.uninit();
+        break;
+      }
     }
   },
 
   /**
    * Handle click events
    *
    * @param  {DOMEvent} event
    */
   handleClick(event) {
-    if (event.target == this.refs.cancel) {
-      this.detachEventListeners();
+    if (event.target == this._elements.cancel) {
       window.close();
     }
-    if (event.target == this.refs.save) {
+    if (event.target == this._elements.save) {
       if (this._address) {
         this.saveAddress({
           guid: this._address.guid,
           address: this.buildAddressObject(),
         });
       } else {
         this.saveAddress({
           address: this.buildAddressObject(),
         });
       }
-      this.detachEventListeners();
       window.close();
     }
   },
 
   /**
    * Attach event listener
    */
   attachEventListeners() {
-    this.refs.controlsContainer.addEventListener("click", this);
+    this._elements.controlsContainer.addEventListener("click", this);
     document.addEventListener("input", this);
   },
 
   /**
    * Remove event listener
    */
   detachEventListeners() {
-    this.refs.controlsContainer.removeEventListener("click", this);
+    this._elements.controlsContainer.removeEventListener("click", this);
     document.removeEventListener("input", this);
   },
 };
 
-// Pass in argument from openDialog
 new EditDialog();