[tor-commits] [torbutton/master] Bug #3820: Fix a warning w/ session store filter

mikeperry at torproject.org mikeperry at torproject.org
Fri Aug 26 20:30:18 UTC 2011


commit b3f99dd2724eb4e18d9ba0b27b6ac5cc839a8be7
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Fri Aug 26 13:27:31 2011 -0700

    Bug #3820: Fix a warning w/ session store filter
    
    The warning "No tab found for session store tag" can appear during "New
    Identity" in TBB. This is due to a lack of proper context for the browser
    object. It may also indicate a leak of sessionstore data to disk.
---
 src/chrome/content/torbutton.js |   38 ++++++++++++++++++++++----------------
 1 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 3974ab9..8316511 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -1302,7 +1302,7 @@ function torbutton_new_identity() {
       torbutton_log(3, "Length: "+browser.browsers.length);
 
       for(var i = 0; i < tabs; i++) {
-        torbutton_apply_tab_tag(browser.browsers[i], false);
+        torbutton_apply_tab_tag(browser, browser.browsers[i], false);
       }
   }
 
@@ -2483,7 +2483,7 @@ function torbutton_jar_certs(mode) {
 
 // -------------- JS/PLUGIN HANDLING CODE ---------------------
 
-function torbutton_check_js_tag(browser, tor_enabled, js_enabled) {
+function torbutton_check_js_tag(tabbrowser, browser, tor_enabled, js_enabled) {
     var eventSuppressor = null;
     if (typeof(browser.__tb_tor_fetched) == 'undefined') {
         try {
@@ -2494,7 +2494,7 @@ function torbutton_check_js_tag(browser, tor_enabled, js_enabled) {
         // Defensive programming to tag this window here to 
         // an alternate tor state. It wil lmake this window totally
         // useless, but that is better than some undefined state
-        torbutton_apply_tab_tag(browser, !tor_enabled);
+        torbutton_apply_tab_tag(tabbrowser, browser, !tor_enabled);
     }
 
     /* Solution from: https://bugzilla.mozilla.org/show_bug.cgi?id=409737 */
@@ -2575,7 +2575,7 @@ function torbutton_toggle_win_jsplugins(win, tor_enabled, js_enabled, isolate_dy
             }
 
             if(isolate_dyn) {
-                torbutton_check_js_tag(b, tor_enabled, js_enabled);
+                torbutton_check_js_tag(browser, b, tor_enabled, js_enabled);
                 // kill meta-refresh and existing page loading 
                 b.webNavigation.stop(b.webNavigation.STOP_ALL);
             }
@@ -2637,26 +2637,32 @@ tbHistoryListener.prototype = {
     OnHistoryReload: function(uri,flags) { return this.f1(); }
 };
 
-function torbutton_apply_tab_tag(browser, tag) {
+function torbutton_apply_tab_tag(tabbrowser, browser, tag) {
    if (typeof(browser["__tb_tor_fetched"]) == "undefined" ||
            browser.__tb_tor_fetched != tag) {
      // Only update the browser's session store tag if the tag has changed.
      // This is an expensive operation.
      var ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
                              .getService(Components.interfaces.nsISessionStore);
-
-     // http://stackoverflow.com/questions/3374056/firefox-gbrowser-getbrowserfortab-but-no-gbrowser-gettabforbrowser
-     var mTabs = gBrowser.mTabContainer.childNodes;
+     
      var tab = null;
-     for (var i=0; i<mTabs.length; i++) {
-         if (mTabs[i].linkedBrowser == browser) {
-             tab = mTabs[i];
-         }
+
+     // XXX: if tabbrowser is null, we may either write or omit session store data..
+     // This should only happen in toggle mode, though.
+     if (tabbrowser) {
+       // http://stackoverflow.com/questions/3374056/firefox-gbrowser-getbrowserfortab-but-no-gbrowser-gettabforbrowser
+       var mTabs = tabbrowser.mTabContainer.childNodes;
+       for (var i=0; i<mTabs.length; i++) {
+           if (mTabs[i].linkedBrowser == browser) {
+               tab = mTabs[i];
+           }
+       }
      }
      if (tab)
        ss.setTabValue(tab, "__tb_tor_fetched", tag.toString());
      else
        torbutton_log(5, "No tab found for session store tag.");
+
    }
    var oldtag = browser.__tb_tor_fetched;
    browser.__tb_tor_fetched = tag;
@@ -2677,7 +2683,7 @@ function torbutton_tag_new_browser(browser, tor_tag, no_plugins) {
     // Only tag new windows
     if (typeof(browser.__tb_tor_fetched) == 'undefined') {
         torbutton_log(3, "Tagging new window: "+tor_tag);
-        torbutton_apply_tab_tag(browser, !tor_tag);
+        torbutton_apply_tab_tag(gBrowser, browser, !tor_tag);
 
         // XXX: Do we need to remove this listener on tab close?
         // No, but we probably do need to remove it on window close!
@@ -2750,7 +2756,7 @@ function torbutton_set_launch_state(state, session_restore) {
                     }
                 }
             }
-            torbutton_apply_tab_tag(b, state);
+            torbutton_apply_tab_tag(browser, b, state);
         }
     }
 
@@ -4114,7 +4120,7 @@ function torbutton_update_tags(win, new_loc) {
             // Defensive programming to tag this window here to 
             // an alternate tor state. It wil lmake this window totally
             // useless, but that is better than some undefined state
-            torbutton_apply_tab_tag(browser, tor_tag);
+            torbutton_apply_tab_tag(null, browser, tor_tag);
         }
         if(browser.__tb_tor_fetched != !tor_tag) {
             tag_change = true;
@@ -4146,7 +4152,7 @@ function torbutton_update_tags(win, new_loc) {
             }
         }
 
-        torbutton_apply_tab_tag(browser, !tor_tag);
+        torbutton_apply_tab_tag(null, browser, !tor_tag);
 
         if (!m_tb_tbb) {
           browser.docShell.allowPlugins = tor_tag || !kill_plugins;



More information about the tor-commits mailing list