[tor-commits] [torbutton/master] Bug #9570: Private browsing changes since FF ESR 17.

mikeperry at torproject.org mikeperry at torproject.org
Thu Nov 28 03:47:43 UTC 2013


commit 3a0ab3671ad4fd730e938ed04ff4d0328ee92369
Author: Kathy Brade <brade at pearlcrescent.com>
Date:   Mon Oct 28 15:50:03 2013 -0400

    Bug #9570: Private browsing changes since FF ESR 17.
    
    Clear the private browsing image cache as well as the regular one.
---
 src/chrome/content/torbutton.js |   67 ++++++++++++++++++++++++++++++++-------
 1 file changed, 55 insertions(+), 12 deletions(-)

diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index c97a1bd..f364303 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -1518,18 +1518,7 @@ function torbutton_do_new_identity() {
   m_tb_prefs.setIntPref("browser.sessionstore.max_tabs_undo", tabs);
   
   torbutton_log(3, "New Identity: Clearing Image Cache");
-
-  try {
-    var imgCache = Components.classes["@mozilla.org/image/cache;1"].
-            getService(Components.interfaces.imgICache);
-    imgCache.clearCache(false); // evict all but chrome cache
-  } catch(e) {
-    // FIXME: This can happen in some rare cases involving XULish image data
-    // in combination with our image cache isolation patch. Sure isn't
-    // a good thing, but it's not really a super-cookie vector either.
-    // We should fix it eventually.
-    torbutton_log(4, "Exception on image cache clearing: "+e);
-  }
+  torbutton_clear_image_caches();
 
   torbutton_log(3, "New Identity: Clearing Offline Cache");
 
@@ -1634,6 +1623,60 @@ function torbutton_do_new_identity() {
   window.close();
 }
 
+function torbutton_clear_image_caches()
+{
+  try {
+    let imgCache;
+    let imgTools = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
+    if (!("getImgCacheForDocument" in imgTools)) {
+      // In Firefox 17 and older, there is one global image cache.  Clear it.
+      imgCache = Cc["@mozilla.org/image/cache;1"].getService(Ci.imgICache);
+      imgCache.clearCache(false); // evict all but chrome cache
+    } else {
+      // In Firefox 18 and newer, there are two image caches:  one that is
+      // used for regular browsing and one that is used for private browsing.
+
+      // Clear the non-private browsing image cache.
+      imgCache = imgTools.getImgCacheForDocument(null);
+      imgCache.clearCache(false); // evict all but chrome cache
+
+      // Try to clear the private browsing cache.  To do so, we must locate
+      // a content document that is contained within a private browsing window.
+      let didClearPBCache = false;
+      let wm = Cc["@mozilla.org/appshell/window-mediator;1"]
+                 .getService(Ci.nsIWindowMediator);
+      let enumerator = wm.getEnumerator("navigator:browser");
+      while (!didClearPBCache && enumerator.hasMoreElements()) {
+        let win = enumerator.getNext();
+        let browserDoc = win.document.documentElement;
+        if (!browserDoc.hasAttribute("privatebrowsingmode"))
+          continue;
+
+        let tabbrowser = win.getBrowser();
+        if (!tabbrowser)
+          continue;
+
+        var tabCount = tabbrowser.browsers.length;
+        for (var i = 0; i < tabCount; i++) {
+          let doc = tabbrowser.browsers[i].contentDocument;
+          if (doc) {
+            imgCache = imgTools.getImgCacheForDocument(doc);
+            imgCache.clearCache(false); // evict all but chrome cache
+            didClearPBCache = true;
+            break;
+          }
+        }
+      }
+    }
+  } catch(e) {
+    // FIXME: This can happen in some rare cases involving XULish image data
+    // in combination with our image cache isolation patch. Sure isn't
+    // a good thing, but it's not really a super-cookie vector either.
+    // We should fix it eventually.
+    torbutton_log(4, "Exception on image cache clearing: "+e);
+  }
+}
+
 function torbutton_do_tor_check()
 {
   let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"]





More information about the tor-commits mailing list