Bug 1455737 - Remove the result object from DownloadHistory when removing the view draft
authorUrsula Sarracini <usarracini@mozilla.com>
Fri, 20 Apr 2018 16:57:07 -0400
changeset 785948 8ce04fa0b5f81bd702bef9db6f1d912e419c7bc1
parent 785144 3cc613bf13443acc2fea4804872fb3ca56757181
push id107364
push userusarracini@mozilla.com
push dateFri, 20 Apr 2018 20:57:30 +0000
bugs1455737
milestone61.0a1
Bug 1455737 - Remove the result object from DownloadHistory when removing the view MozReview-Commit-ID: 5Qb5j30eqFO
toolkit/components/downloads/DownloadHistory.jsm
--- a/toolkit/components/downloads/DownloadHistory.jsm
+++ b/toolkit/components/downloads/DownloadHistory.jsm
@@ -450,16 +450,27 @@ this.DownloadHistoryList.prototype = {
     if (this._result) {
       this._result.root.containerOpen = true;
       PlacesUtils.annotations.addObserver(this);
     }
   },
   _result: null,
 
   /**
+   * Remove the view that belongs to this list via DownloadList's removeView. In
+   * addition, delete the result object to ensure there are no memory leaks.
+   */
+  removeView(aView) {
+    DownloadList.prototype.removeView.call(this, aView);
+
+    // Clean up any active results that might still be observing. See bug 1455737
+    this.result = null;
+  },
+
+  /**
    * Index of the first slot that contains a session download. This is equal to
    * the length of the list when there are no session downloads.
    */
   _firstSessionSlotIndex: 0,
 
   _insertSlot({ slot, index, slotsForUrl }) {
     // Add the slot to the ordered array.
     this._slots.splice(index, 0, slot);