[tor-commits] [torbutton/master] Bug 6803: Read proxy environment variables early on

mikeperry at torproject.org mikeperry at torproject.org
Wed Sep 12 19:24:09 UTC 2012


commit 9790fdae64a4304032dce581b030974bb11c25f1
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Tue Sep 11 19:12:12 2012 -0700

    Bug 6803: Read proxy environment variables early on
    
    It turns out Firefox 15 appears to be caching proxy settings for a particular
    URL. We needed to be able to retrieve our new proxy settings before anything
    else runs. Hence, move the env checks to XPCOM.
---
 src/chrome/content/torbutton.js  |   62 ++++++++++++++------------------------
 src/components/crash-observer.js |   40 ++++++++++++++++++++++++
 src/install.rdf                  |    2 +-
 3 files changed, 64 insertions(+), 40 deletions(-)

diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 2ced2fd..1f82836 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -505,6 +505,14 @@ function torbutton_init_toolbutton()
 // called once per browser window.. This might belong in a component.
 function torbutton_init() {
     torbutton_log(3, 'called init()');
+    
+    if (m_tb_wasinited) {
+        return;
+    }
+    m_tb_wasinited = true;
+
+    m_tb_prefs =  Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefBranch);
 
     // Determine if we are firefox 3 or not.
     var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
@@ -542,16 +550,20 @@ function torbutton_init() {
         m_tb_ff36 = false;
     }
 
+    try {
+      var test = m_tb_prefs.getCharPref("torbrowser.version");
+      m_tb_tbb = true;
+      torbutton_log(3, "This is a Tor Browser");
+    } catch(e) {
+      torbutton_log(3, "This is not a Tor Browser: "+e);
+    }
+
     // Bug 1506 P4: These vars are very important for New Identity
     var environ = Components.classes["@mozilla.org/process/environment;1"]
                    .getService(Components.interfaces.nsIEnvironment);
 
     if (environ.exists("TOR_CONTROL_PASSWD")) {
         m_tb_control_pass = environ.get("TOR_CONTROL_PASSWD");
-
-        // FIXME: We might want a check to use to set this in the future,
-        // but this works fine for now.
-        m_tb_tbb = true;
     } else if (environ.exists("TOR_CONTROL_COOKIE_AUTH_FILE")) {
         var cookie_path = environ.get("TOR_CONTROL_COOKIE_AUTH_FILE");
         try {
@@ -582,19 +594,10 @@ function torbutton_init() {
     // listen for our toolbar button being added so we can initialize it
     torbutton_init_toolbutton();
 
-    if (!m_tb_wasinited) { 
-        // Runs every time a new window is opened
-        m_tb_prefs =  Components.classes["@mozilla.org/preferences-service;1"]
-                        .getService(Components.interfaces.nsIPrefBranch);
+    torbutton_init_jshooks();
 
-        torbutton_init_jshooks();
-
-        torbutton_log(1, 'registering pref observer');
-        torbutton_window_pref_observer.register(); 
-        m_tb_wasinited = true;
-    } else {
-        torbutton_log(1, 'skipping pref observer init');
-    }
+    torbutton_log(1, 'registering pref observer');
+    torbutton_window_pref_observer.register(); 
     
     //setting up context menu
     var contextMenu = document.getElementById("contentAreaContextMenu");
@@ -956,7 +959,8 @@ function torbutton_do_async_versioncheck() {
   if (!m_tb_tbb || !m_tb_prefs.getBoolPref("extensions.torbutton.versioncheck_enabled")) {
     return;
   }
-  torbutton_log(3, "Checking version");
+  torbutton_log(3, "Checking version with socks port: "
+          +m_tb_prefs.getIntPref("extensions.torbutton.socks_port"));
   try {
     var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
                             .createInstance(Components.interfaces.nsIXMLHttpRequest);
@@ -3116,6 +3120,8 @@ function torbutton_do_versioncheck() {
 function torbutton_reload_homepage() {
     var homepage = m_tb_prefs.getComplexValue("browser.startup.homepage",
                        Components.interfaces.nsIPrefLocalizedString).data;
+
+    torbutton_log(3, "Reloading homepage: "+homepage);
     gBrowser.loadURI(homepage, null, null);
 }
 
@@ -4196,28 +4202,6 @@ function torbutton_do_startup()
           torbutton_new_google_cookie();
         }
 
-        // Bug 1506: Still want to get these env vars
-        var environ = Components.classes["@mozilla.org/process/environment;1"]
-                   .getService(Components.interfaces.nsIEnvironment);
-
-        if (environ.exists("TOR_SOCKS_PORT")) {
-          m_tb_prefs.setIntPref('extensions.torbutton.socks_port', parseInt(environ.get("TOR_SOCKS_PORT")));
-          if (m_tb_tbb) {
-              m_tb_prefs.setIntPref('network.proxy.socks_port', parseInt(environ.get("TOR_SOCKS_PORT")));
-          }
-        } else if (m_tb_prefs.getCharPref('extensions.torbutton.settings_method') == 'recommended') {
-          m_tb_prefs.setIntPref('extensions.torbutton.socks_port', 9050);
-        }
-
-        if (environ.exists("TOR_SOCKS_HOST")) {
-          m_tb_prefs.setCharPref('extensions.torbutton.socks_host', environ.get("TOR_SOCKS_HOST"));
-          if (m_tb_tbb) {
-              m_tb_prefs.setCharPref('network.proxy.socks', environ.get("TOR_SOCKS_HOST"));
-          }
-        } else if (m_tb_prefs.getCharPref('extensions.torbutton.settings_method') == 'recommended') {
-          m_tb_prefs.setCharPref('extensions.torbutton.socks_host', '127.0.0.1');
-        }
-
         if (!m_tb_tbb && m_tb_prefs.getBoolPref("extensions.torbutton.prompt_torbrowser")) {
           var o_stringbundle = torbutton_get_stringbundle();
           var warning = o_stringbundle.GetStringFromName("torbutton.popup.short_torbrowser");
diff --git a/src/components/crash-observer.js b/src/components/crash-observer.js
index 776aed5..ab97fba 100644
--- a/src/components/crash-observer.js
+++ b/src/components/crash-observer.js
@@ -54,6 +54,14 @@ function CrashObserver() {
         this.is_ff4 = false;
     }
 
+    try {
+      var test = this._prefs.getCharPref("torbrowser.version");
+      this.is_tbb = true;
+      this.logger.log(3, "This is a Tor Browser's XPCOM");
+    } catch(e) {
+      this.logger.log(3, "This is not a Tor Browser's XPCOM");
+    }
+
     if (this.is_ff4) {
       // Bug 1506 P2/P3: You probably want to register this observer to clean up
       // prefs if you're going to support using normal firefox. 
@@ -102,6 +110,36 @@ CrashObserver.prototype = {
       }
     },
 
+    // Bug 6803: We need to get the env vars early due to
+    // some weird proxy caching code that showed up in FF15.
+    // Otherwise, homepage domain loads fail forever.
+    getProxySettings: function() {
+      // Bug 1506: Still want to get these env vars
+      var environ = Components.classes["@mozilla.org/process/environment;1"]
+                 .getService(Components.interfaces.nsIEnvironment);
+
+      if (environ.exists("TOR_SOCKS_PORT")) {
+        this.logger.log(3, "Resetting socks port to "+environ.get("TOR_SOCKS_PORT"));
+        this._prefs.setIntPref('extensions.torbutton.socks_port',
+                parseInt(environ.get("TOR_SOCKS_PORT")));
+        if (this.is_tbb) {
+            this._prefs.setIntPref('network.proxy.socks_port', parseInt(environ.get("TOR_SOCKS_PORT")));
+        }
+      } else if (this._prefs.getCharPref('extensions.torbutton.settings_method') == 'recommended') {
+        this._prefs.setIntPref('extensions.torbutton.socks_port', 9050);
+      }
+
+      if (environ.exists("TOR_SOCKS_HOST")) {
+        this._prefs.setCharPref('extensions.torbutton.socks_host', environ.get("TOR_SOCKS_HOST"));
+        if (this.is_tbb) {
+            this._prefs.setCharPref('network.proxy.socks', environ.get("TOR_SOCKS_HOST"));
+        }
+      } else if (this._prefs.getCharPref('extensions.torbutton.settings_method') == 'recommended') {
+        this._prefs.setCharPref('extensions.torbutton.socks_host', '127.0.0.1');
+      }
+ 
+    },
+
     observe: function(subject, topic, data) {
       if(topic == "profile-after-change") {
         // Bug 1506 P1: We listen to these prefs as signals for startup,
@@ -116,6 +154,8 @@ CrashObserver.prototype = {
           this._prefs.setBoolPref("extensions.torbutton.crashed", true);
         }
         this._prefs.setBoolPref("extensions.torbutton.normal_exit", false);
+
+        this.getProxySettings();
       } else if (topic == "em-action-requested") {
         this.logger.log(3, "Uninstall action requested..");
         // http://xulsolutions.blogspot.com/2006/07/creating-uninstall-script-for.html
diff --git a/src/install.rdf b/src/install.rdf
index 7eac84a..24d314d 100644
--- a/src/install.rdf
+++ b/src/install.rdf
@@ -10,7 +10,7 @@
                    em:name="Torbutton"
                    em:creator="Mike Perry"
                    em:id="{e0204bd5-9d31-402b-a99d-a6aa8ffebdca}"
-                   em:version="1.4.6.1"
+                   em:version="1.4.6.2"
                    em:homepageURL="https://www.torproject.org/torbutton/"
                    em:optionsURL="chrome://torbutton/content/preferences.xul"
                    em:iconURL="chrome://torbutton/skin/tor.png"





More information about the tor-commits mailing list