[tor-commits] [tor-launcher/master] Bug 11879: Stop bootstrap if Cancel or Open Settings is clicked.

mikeperry at torproject.org mikeperry at torproject.org
Fri Apr 17 02:00:56 UTC 2015


commit 81fd61c79e77e8dcbcfa42559a727ac384583f03
Author: Kathy Brade <brade at 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)





More information about the tor-commits mailing list