commit 81fd61c79e77e8dcbcfa42559a727ac384583f03 Author: Kathy Brade brade@pearlcrescent.com Date: Thu Apr 16 11:49:00 2015 -0400
Bug 11879: Stop bootstrap if Cancel or Open Settings is clicked.
Fix a related problem where the progress dialog immediately closed itself if an error had previously been reported. Send SETCONF DisableNetwork=0 instead of SETCONF DisableNetwork (this makes it easier to interpret debug logs). --- src/chrome/content/progress.js | 29 ++++++++++++++++++++++++++++- src/components/tl-process.js | 1 + src/components/tl-protocol.js | 4 +++- 3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/chrome/content/progress.js b/src/chrome/content/progress.js index 8208398..b44dca5 100644 --- a/src/chrome/content/progress.js +++ b/src/chrome/content/progress.js @@ -15,6 +15,9 @@ const kTorLogHasWarnOrErrTopic = "TorLogHasWarnOrErr"; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherUtil", "resource://torlauncher/modules/tl-util.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger", + "resource://torlauncher/modules/tl-logger.jsm"); +
var gObsSvc; var gOpenerCallbackFunc; // Set when opened from network settings. @@ -110,7 +113,7 @@ function onCancel()
if (gOpenerCallbackFunc) { - // TODO: stop the bootstrapping process? + stopTorBootstrap(); gOpenerCallbackFunc(false); } else try @@ -126,11 +129,35 @@ function onCancel()
function onOpenSettings() { + stopTorBootstrap(); cleanup(); window.close(); }
+function stopTorBootstrap() +{ + // Tell tor to disable use of the network; this should stop the bootstrap + // process. + const kErrorPrefix = "Setting DisableNetwork=1 failed: "; + try + { + var svc = Cc["@torproject.org/torlauncher-protocol-service;1"] + .getService(Ci.nsISupports); + svc = svc.wrappedJSObject; + var settings = {}; + settings["DisableNetwork"] = true; + var errObj = {}; + if (!svc.TorSetConfWithReply(settings, errObj)) + TorLauncherLogger.log(5, kErrorPrefix + errObj.details); + } + catch(e) + { + TorLauncherLogger.log(5, kErrorPrefix + e); + } +} + + var gObserver = { // nsIObserver implementation. observe: function(aSubject, aTopic, aParam) diff --git a/src/components/tl-process.js b/src/components/tl-process.js index ef2b12c..80cd7ea 100644 --- a/src/components/tl-process.js +++ b/src/components/tl-process.js @@ -275,6 +275,7 @@ TorProcessService.prototype =
TorClearBootstrapError: function() { + this.mBootstrapErrorOccurred = false; this.mLastTorWarningPhase = null; this.mLastTorWarningReason = null; }, diff --git a/src/components/tl-protocol.js b/src/components/tl-protocol.js index 559bb37..fdc2394 100644 --- a/src/components/tl-protocol.js +++ b/src/components/tl-protocol.js @@ -206,6 +206,8 @@ TorProtocolService.prototype = // aSettingsObj should be a JavaScript object with keys (property values) // that correspond to tor config. keys. The value associated with each // key should be a simple string, a string array, or a Boolean value. + // If an associated value is undefined or null, a key with no value is + // passed in the SETCONF command. // If a fatal error occurs, null is returned. Otherwise, a reply object is // returned. TorSetConf: function(aSettingsObj) @@ -221,7 +223,7 @@ TorProtocolService.prototype = else cmdArgs += ' ' + key; var val = aSettingsObj[key]; - if (val) + if ((val !== undefined) && (val !== null)) { var valType = (typeof val); if ("boolean" == valType)