[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