--- a/toolkit/components/reader/AboutReader.jsm
+++ b/toolkit/components/reader/AboutReader.jsm
@@ -36,16 +36,18 @@ var AboutReader = function(mm, win, arti
this._mm = mm;
this._mm.addMessageListener("Reader:CloseDropdown", this);
this._mm.addMessageListener("Reader:AddButton", this);
this._mm.addMessageListener("Reader:RemoveButton", this);
this._mm.addMessageListener("Reader:GetStoredArticleData", this);
this._docRef = Cu.getWeakReference(doc);
this._winRef = Cu.getWeakReference(win);
+ this._innerWindowId = win.QueryInterface(Ci.nsIInterfaceRequestor)
+ .getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
this._article = null;
if (articlePromise) {
this._articlePromise = articlePromise;
}
this._headerElementRef = Cu.getWeakReference(doc.getElementById("reader-header"));
@@ -55,20 +57,22 @@ var AboutReader = function(mm, win, arti
this._contentElementRef = Cu.getWeakReference(doc.getElementById("moz-reader-content"));
this._toolbarElementRef = Cu.getWeakReference(doc.getElementById("reader-toolbar"));
this._messageElementRef = Cu.getWeakReference(doc.getElementById("reader-message"));
this._scrollOffset = win.pageYOffset;
doc.addEventListener("click", this, false);
- win.addEventListener("unload", this, false);
+ win.addEventListener("pagehide", this, false);
win.addEventListener("scroll", this, false);
win.addEventListener("resize", this, false);
+ Services.obs.addObserver(this, "inner-window-destroyed", false);
+
doc.addEventListener("visibilitychange", this, false);
this._setupStyleDropdown();
this._setupButton("close-button", this._onReaderClose.bind(this), "aboutReader.toolbar.close");
const gIsFirefoxDesktop = Services.appinfo.ID == "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
if (gIsFirefoxDesktop) {
// we're ready for any external setup, send a signal for that.
@@ -245,29 +249,42 @@ AboutReader.prototype = {
case "devicelight":
this._handleDeviceLight(aEvent.value);
break;
case "visibilitychange":
this._handleVisibilityChange();
break;
- case "unload":
+ case "pagehide":
// Close the Banners Font-dropdown, cleanup Android BackPressListener.
this._closeDropdowns();
this._mm.removeMessageListener("Reader:CloseDropdown", this);
this._mm.removeMessageListener("Reader:AddButton", this);
this._mm.removeMessageListener("Reader:RemoveButton", this);
this._mm.removeMessageListener("Reader:GetStoredArticleData", this);
this._windowUnloaded = true;
break;
}
},
+ observe: function(subject, topic, data) {
+ if (subject.QueryInterface(Ci.nsISupportsPRUint64).data != this._innerWindowId) {
+ return;
+ }
+
+ Services.obs.removeObserver(this, "inner-window-destroyed", false);
+
+ this._mm.removeMessageListener("Reader:CloseDropdown", this);
+ this._mm.removeMessageListener("Reader:AddButton", this);
+ this._mm.removeMessageListener("Reader:RemoveButton", this);
+ this._windowUnloaded = true;
+ },
+
_onReaderClose: function() {
ReaderMode.leaveReaderMode(this._mm.docShell, this._win);
},
_setFontSize: function(newFontSize) {
let containerClasses = this._doc.getElementById("container").classList;
if (this._fontSize > 0)