Bug 1246291 - Only initialize RefreshBlocker if enabled. r?Mossop draft
authorMike Conley <mconley@mozilla.com>
Wed, 17 Feb 2016 15:27:31 -0500
changeset 331871 0c6861b50d13f449a95f03b77ff4f889cacfc6c7
parent 331237 6ea654cad929c9bedd8a4161a182b6189fbeae6a
child 331872 acc64ced47f8a18f3f545ea8284c9cefb7c194fb
push id11106
push usermconley@mozilla.com
push dateThu, 18 Feb 2016 15:13:45 +0000
reviewersMossop
bugs1246291
milestone47.0a1
Bug 1246291 - Only initialize RefreshBlocker if enabled. r?Mossop MozReview-Commit-ID: B9dn4vX9VV7
browser/base/content/tab-content.js
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -684,58 +684,82 @@ var DOMFullscreenHandler = {
         break;
       }
     }
   }
 };
 DOMFullscreenHandler.init();
 
 var RefreshBlocker = {
+  PREF: "accessibility.blockautorefresh",
+
   init() {
+    if (Services.prefs.getBoolPref(this.PREF)) {
+      this.enable();
+    }
+
+    Services.prefs.addObserver(this.PREF, this, false);
+  },
+
+  uninit() {
+    if (Services.prefs.getBoolPref(this.PREF)) {
+      this.disable();
+    }
+
+    Services.prefs.removeObserver(this.PREF, this);
+  },
+
+  observe(subject, topic, data) {
+    if (topic == "nsPref:changed" && data == this.PREF) {
+      if (Services.prefs.getBoolPref(this.PREF)) {
+        this.enable();
+      } else {
+        this.disable();
+      }
+    }
+  },
+
+  enable() {
     this._filter = Cc["@mozilla.org/appshell/component/browser-status-filter;1"]
                      .createInstance(Ci.nsIWebProgress);
     this._filter.addProgressListener(this, Ci.nsIWebProgress.NOTIFY_REFRESH);
 
     let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
                               .getInterface(Ci.nsIWebProgress);
     webProgress.addProgressListener(this._filter, Ci.nsIWebProgress.NOTIFY_REFRESH);
 
     addMessageListener("RefreshBlocker:Refresh", this);
   },
 
-  uninit() {
+  disable() {
     let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor)
                               .getInterface(Ci.nsIWebProgress);
     webProgress.removeProgressListener(this._filter);
 
     this._filter.removeProgressListener(this);
     this._filter = null;
 
     removeMessageListener("RefreshBlocker:Refresh", this);
   },
 
   onRefreshAttempted(aWebProgress, aURI, aDelay, aSameURI) {
-    if (Services.prefs.getBoolPref("accessibility.blockautorefresh")) {
-      let win = aWebProgress.DOMWindow;
-      let outerWindowID = win.QueryInterface(Ci.nsIInterfaceRequestor)
-                             .getInterface(Ci.nsIDOMWindowUtils)
-                             .outerWindowID;
+    let win = aWebProgress.DOMWindow;
+    let outerWindowID = win.QueryInterface(Ci.nsIInterfaceRequestor)
+                           .getInterface(Ci.nsIDOMWindowUtils)
+                           .outerWindowID;
 
-      sendAsyncMessage("RefreshBlocker:Blocked", {
-        URI: aURI.spec,
-        originCharset: aURI.originCharset,
-        delay: aDelay,
-        sameURI: aSameURI,
-        outerWindowID,
-      });
+    sendAsyncMessage("RefreshBlocker:Blocked", {
+      URI: aURI.spec,
+      originCharset: aURI.originCharset,
+      delay: aDelay,
+      sameURI: aSameURI,
+      outerWindowID,
+    });
 
-      return false;
-    }
-
-    return true;
+    return false;
   },
 
   receiveMessage(message) {
     let data = message.data;
 
     if (message.name == "RefreshBlocker:Refresh") {
       let win = Services.wm.getOuterWindowWithId(data.outerWindowID);
       let refreshURI = win.QueryInterface(Ci.nsIInterfaceRequestor)