[tor-commits] [tor-launcher/master] Settings wizard: show "Copy Tor Log To Clipboard" button after error.

brade at torproject.org brade at torproject.org
Wed Apr 24 17:37:27 UTC 2013


commit b452a3cddb44e9888566cfa43c47234f3cbdfc40
Author: Kathy Brade <brade at torproject.org>
Date:   Wed Apr 24 13:36:57 2013 -0400

    Settings wizard: show "Copy Tor Log To Clipboard" button after error.
---
 src/chrome/content/network-settings-wizard.xul |   14 +++--
 src/chrome/content/network-settings.js         |   59 ++++++++++++++++++++++--
 src/components/tl-process.js                   |    3 +
 3 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/src/chrome/content/network-settings-wizard.xul b/src/chrome/content/network-settings-wizard.xul
index 7f27e06..b86b885 100644
--- a/src/chrome/content/network-settings-wizard.xul
+++ b/src/chrome/content/network-settings-wizard.xul
@@ -18,6 +18,7 @@
         title="&torsettings.dialog.title;"
         windowtype="TorLauncher:NetworkSettings"
         persist="screenX screenY"
+        buttonlabelextra1="&torsettings.copyLog;"
         onwizardfinish="return applySettings();"
         onwizardcancel="return onCancel();"
         onload="initDialog();">
@@ -25,7 +26,7 @@
   <script type="application/x-javascript"
           src="chrome://torlauncher/content/network-settings.js"/>
 
-  <wizardpage label=" " pageid="proxy" next="firewall"
+  <wizardpage label=" " pageid="proxy" next="firewall" onextra1="onCopyLog();"
               onpageadvanced="return onWizardProxyNext(this);">
     <hbox class="tbb-header">
       <vbox class="tbb-logo-box" align="start">
@@ -51,7 +52,7 @@
     </hbox>
   </wizardpage>
 
-  <wizardpage pageid="proxyYES" next="firewall"
+  <wizardpage pageid="proxyYES" next="firewall" onextra1="onCopyLog();"
               onpageadvanced="return (getAndValidateProxySettings() != null)">
     <vbox class="tbb-logo-box" align="start">
       <image class="tbb-logo" />
@@ -61,7 +62,7 @@
     <groupbox id="proxySpecificSettings" />
   </wizardpage>
 
-  <wizardpage pageid="firewall" next="bridges"
+  <wizardpage pageid="firewall" next="bridges" onextra1="onCopyLog();"
               onpageadvanced="return onWizardFirewallNext(this);">
     <vbox class="tbb-logo-box" align="start">
       <image class="tbb-logo" />
@@ -80,7 +81,7 @@
     </hbox>
   </wizardpage>
 
-  <wizardpage pageid="firewallYES" next="bridges"
+  <wizardpage pageid="firewallYES" next="bridges" onextra1="onCopyLog();"
               onpageadvanced="return (getAndValidateFirewallSettings() != null)">
     <vbox class="tbb-logo-box" align="start">
       <image class="tbb-logo" />
@@ -92,7 +93,7 @@
     </vbox>
   </wizardpage>
 
-  <wizardpage label=" " pageid="bridges">
+  <wizardpage label=" " pageid="bridges" onextra1="onCopyLog();">
     <vbox class="tbb-logo-box" align="start">
       <image class="tbb-logo" />
     </vbox>
@@ -113,7 +114,8 @@
     <spring flex="1" />
   </wizardpage>
 
-  <wizardpage label=" " pageid="errorPanel" next="notUsed">
+  <wizardpage label=" " pageid="errorPanel" next="notUsed"
+              onextra1="onCopyLog();">
   </wizardpage>
 
   <wizardpage class="help"  label=" " pageid="bridgeHelp" next="notUsed"
diff --git a/src/chrome/content/network-settings.js b/src/chrome/content/network-settings.js
index 73edd8d..904e5f8 100644
--- a/src/chrome/content/network-settings.js
+++ b/src/chrome/content/network-settings.js
@@ -18,6 +18,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger",
 const kTorProcessReadyTopic = "TorProcessIsReady";
 const kTorProcessExitedTopic = "TorProcessExited";
 const kTorProcessDidNotStartTopic = "TorProcessDidNotStart";
+const kTorBootstrapErrorTopic = "TorBootstrapError";
 
 const kWizardProxyRadioGroup = "proxyRadioGroup";
 const kWizardFirewallRadioGroup = "firewallRadioGroup";
@@ -54,10 +55,10 @@ var gRestoreAfterHelpPanelID = null;
 
 function initDialog()
 {
+  var cancelBtn = document.documentElement.getButton("cancel");
   gIsInitialBootstrap = window.arguments[0];
   if (gIsInitialBootstrap)
   {
-    var cancelBtn = document.documentElement.getButton("cancel");
     if (cancelBtn)
     {
       var quitKey = (TorLauncherUtil.isWindows) ? "quit_win" : "quit";
@@ -88,14 +89,27 @@ function initDialog()
   gObsService = Cc["@mozilla.org/observer-service;1"]
                   .getService(Ci.nsIObserverService);
 
-  var haveWizard = (getWizard() != null);
+  var wizardElem = getWizard();
+  var haveWizard = (wizardElem != null);
   if (haveWizard)
   {
+    // Set "Copy Tor Log" label and move it after the Quit (cancel) button.
+    var copyLogBtn = document.documentElement.getButton("extra1");
+    if (copyLogBtn)
+    {
+      copyLogBtn.label = wizardElem.getAttribute("buttonlabelextra1");
+      if (cancelBtn && !TorLauncherUtil.isWindows)
+        cancelBtn.parentNode.insertBefore(copyLogBtn, cancelBtn.nextSibling);
+    }
+
+    // Use "Connect" as the finish button label (on the last wizard page)..
     var finishBtn = document.documentElement.getButton("finish");
     if (finishBtn)
       finishBtn.label = TorLauncherUtil.getLocalizedString("connect");
   }
 
+  gObsService.addObserver(gObserver, kTorBootstrapErrorTopic, false);
+
   if (TorLauncherUtil.shouldStartAndOwnTor &&
       !gTorProcessService.TorIsProcessReady)
   {
@@ -154,6 +168,13 @@ function onWizardFirewallNext(aWizPage)
 var gObserver = {
   observe: function(aSubject, aTopic, aData)
   {
+    if (kTorBootstrapErrorTopic == aTopic)
+    {
+      wizardShowCopyLogButton();
+      return;
+    }
+
+    // Process events that only occur once.
     gObsService.removeObserver(gObserver, kTorProcessReadyTopic);
     gObsService.removeObserver(gObserver, kTorProcessExitedTopic);
     gObsService.removeObserver(gObserver, kTorProcessDidNotStartTopic);
@@ -170,8 +191,8 @@ var gObserver = {
       readTorSettings();
     }
     else if (kTorProcessDidNotStartTopic == aTopic)
-      showPanel("errorPanel");
-    else
+      showErrorPanel();
+    else // kTorProcessExitedTopic
       close();
   }
 };
@@ -194,7 +215,7 @@ function readTorSettings()
   if (!didSucceed)
   {
     // Unable to communicate with tor.  Hide settings and display an error.
-    showPanel("errorPanel");
+    showErrorPanel();
 
     setTimeout(function()
         {
@@ -225,6 +246,27 @@ function showPanel(aPanelID)
 }
 
 
+function showErrorPanel()
+{
+    showPanel("errorPanel");
+    wizardShowCopyLogButton();
+}
+
+
+function wizardShowCopyLogButton()
+{
+  if (getWizard())
+  {
+    var copyLogBtn = document.documentElement.getButton("extra1");
+    if (copyLogBtn)
+    {
+      copyLogBtn.setAttribute("wizardCanCopyLog", true);
+      copyLogBtn.removeAttribute("hidden");
+    }
+  }
+}
+
+
 function showOrHideButton(aID, aShow, aFocus)
 {
   var btn = setButtonAttr(aID, "hidden", !aShow);
@@ -327,6 +369,7 @@ function onOpenHelp()
   {
     showOrHideButton("cancel", false, false);
     showOrHideButton("back", false, false);
+    showOrHideButton("extra1", false, false);
     overrideButtonLabel("next", "done");
   }
   else
@@ -345,6 +388,9 @@ function closeHelp()
   {
     showOrHideButton("cancel", true, false);
     showOrHideButton("back", true, false);
+    var copyLogBtn = document.documentElement.getButton("extra1");
+    if (copyLogBtn && copyLogBtn.hasAttribute("wizardCanCopyLog"))
+      copyLogBtn.removeAttribute("hidden");
     restoreButtonLabel("next");
   }
   else
@@ -775,6 +821,9 @@ function showSaveSettingsAlert(aDetails)
   var s = TorLauncherUtil.getFormattedLocalizedString(
                                   "failed_to_save_settings", [aDetails], 1);
   TorLauncherUtil.showAlert(window, s);
+
+  showOrHideButton("extra1", true, false);
+  gWizIsCopyLogBtnShowing = true;
 }
 
 
diff --git a/src/components/tl-process.js b/src/components/tl-process.js
index 2d24360..1057795 100644
--- a/src/components/tl-process.js
+++ b/src/components/tl-process.js
@@ -387,6 +387,9 @@ TorProcessService.prototype =
           var s = TorLauncherUtil.getFormattedLocalizedString(
                                "tor_bootstrap_failed", [aStatusObj.WARNING], 1);
           TorLauncherUtil.showAlert(null, s);
+        
+          this.mObsSvc.notifyObservers(null, "TorBootstrapError",
+                                       aStatusObj.WARNING);
         }
       }
     }



More information about the tor-commits mailing list