[tbb-commits] [tor-browser/tor-browser-91.2.0esr-11.0-1] fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser

sysrqb at torproject.org sysrqb at torproject.org
Wed Oct 6 13:32:12 UTC 2021


commit c962f24a8a8c7825ec18ce513d354f4093e78363
Author: Richard Pospesel <richard at torproject.org>
Date:   Fri Sep 10 11:42:55 2021 -0500

    fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
---
 .../torconnect/content/torBootstrapUrlbar.js       |  2 +-
 .../components/torpreferences/content/torPane.js   | 51 ++++++++++++++--------
 .../torpreferences/content/torPreferences.css      |  9 ++--
 browser/modules/TorConnect.jsm                     | 13 ++++--
 4 files changed, 48 insertions(+), 27 deletions(-)

diff --git a/browser/components/torconnect/content/torBootstrapUrlbar.js b/browser/components/torconnect/content/torBootstrapUrlbar.js
index 7843b80be8b9..e6a88490f33d 100644
--- a/browser/components/torconnect/content/torBootstrapUrlbar.js
+++ b/browser/components/torconnect/content/torBootstrapUrlbar.js
@@ -76,7 +76,7 @@ var TorBootstrapUrlbar = {
         inputContainer: gURLBar._inputContainer,
       })
       this.elements.torConnectBox.addEventListener("click", () => {
-        window.openTrustedLinkIn("about:torconnect", "tab");
+        TorConnect.openTorConnect();
       });
       Services.obs.addObserver(this, TorConnectTopics.StateChange);
       this.observing = true;
diff --git a/browser/components/torpreferences/content/torPane.js b/browser/components/torpreferences/content/torPane.js
index afdb27351831..a975c93cb8ed 100644
--- a/browser/components/torpreferences/content/torPane.js
+++ b/browser/components/torpreferences/content/torPane.js
@@ -10,7 +10,7 @@ const { TorProtocolService } = ChromeUtils.import(
   "resource:///modules/TorProtocolService.jsm"
 );
 
-const { TorConnect } = ChromeUtils.import(
+const { TorConnect, TorConnectTopics, TorConnectState } = ChromeUtils.import(
   "resource:///modules/TorConnect.jsm"
 );
 
@@ -159,35 +159,42 @@ const gTorPane = (function() {
       this._messageBoxButton = prefpane.querySelector(selectors.messageBox.button);
       // wire up connect button
       this._messageBoxButton.addEventListener("click", () => {
-        TorConnect.beginBootstrap().then((result) => {
-          let win = Services.wm.getMostRecentWindow("navigator:browser");
-          // switch to existing about:torconnect tab or create a new one
-          win.switchToTabHavingURI("about:torconnect", true);
-        });
+        TorConnect.beginBootstrap();
+        TorConnect.openTorConnect();
       });
 
-      let populateMessagebox = () => {
-        if (TorConnect.shouldShowTorConnect) {
+      this._populateMessagebox = () => {
+        if (TorConnect.shouldShowTorConnect &&
+            TorConnect.state === TorConnectState.Configuring) {
           // set messagebox style and text
           if (TorProtocolService.torBootstrapErrorOccurred()) {
+            this._messageBox.parentNode.style.display = null;
             this._messageBox.className = "error";
             this._messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage;
             this._messageBoxButton.innerText = TorStrings.torConnect.tryAgain;
           } else {
+            this._messageBox.parentNode.style.display = null;
             this._messageBox.className = "warning";
             this._messageBoxMessage.innerText = TorStrings.torConnect.connectMessage;
             this._messageBoxButton.innerText = TorStrings.torConnect.torConnectButton;
           }
         } else {
+          // we need to explicitly hide the groupbox, as switching between
+          // the tor pane and other panes will 'unhide' (via the 'hidden'
+          // attribute) the groupbox, offsetting all of the content down
+          // by the groupbox's margin (even if content is 0 height)
+          this._messageBox.parentNode.style.display = "none";
           this._messageBox.className = "hidden";
           this._messageBoxMessage.innerText = "";
           this._messageBoxButton.innerText = "";
         }
       }
-      populateMessagebox();
+      this._populateMessagebox();
+      Services.obs.addObserver(this, TorConnectTopics.StateChange);
+
       // update the messagebox whenever we come back to the page
       window.addEventListener("focus", val => {
-        populateMessagebox();
+        this._populateMessagebox();
       });
 
       // Heading
@@ -571,6 +578,7 @@ const gTorPane = (function() {
     uninit() {
       // unregister our observer topics
       Services.obs.removeObserver(TorSettingsTopics.SettingChanged, this);
+      Services.obs.removeObserver(TorConnectTopics.StateChange, this);
     },
 
     // whether the page should be present in about:preferences
@@ -582,15 +590,24 @@ const gTorPane = (function() {
     // Callbacks
     //
 
-    // callback for when the quickstart pref changes
     observe(subject, topic, data) {
-      if (topic === TorSettingsTopics.SettingChanged) {
-        let obj = subject?.wrappedJSObject;
-        switch(data) {
-          case TorSettingsData.QuickStartEnabled: {
-            this._enableQuickstartCheckbox.checked = obj.value;
-            break;
+      switch (topic) {
+       // triggered when a TorSettings param has changed
+        case TorSettingsTopics.SettingChanged: {
+          let obj = subject?.wrappedJSObject;
+          switch(data) {
+            case TorSettingsData.QuickStartEnabled: {
+              this._enableQuickstartCheckbox.checked = obj.value;
+              break;
+            }
           }
+          break;
+        }
+        // triggered when tor connect state changes and we may
+        // need to update the messagebox
+        case TorConnectTopics.StateChange: {
+          this._populateMessagebox();
+          break;
         }
       }
     },
diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css
index 47b8ff18e0af..e3cc429f5982 100644
--- a/browser/components/torpreferences/content/torPreferences.css
+++ b/browser/components/torpreferences/content/torPreferences.css
@@ -87,14 +87,15 @@
 
   border-radius: 2px;
   border: 0;
-  padding-left: 8px;
-  padding-right: 8px;
+  padding: 0px 8px;
   margin-left: auto;
   margin-right: 0px;
 
   font-size: 11px;
-  font-weight: 400;
+  font-weight: 600;
   white-space: nowrap;
+
+  color: white;
 }
 
 #torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button {
@@ -115,12 +116,10 @@
 
 #torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:hover {
   background-color: var(--purple-80);
-  color: white!important;
 }
 
 #torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:active {
   background-color: var(--purple-90);
-  color: white!important;
 }
 
 /* Advanced Settings */
diff --git a/browser/modules/TorConnect.jsm b/browser/modules/TorConnect.jsm
index f2c92dcb8f21..ddc14148eb88 100644
--- a/browser/modules/TorConnect.jsm
+++ b/browser/modules/TorConnect.jsm
@@ -329,8 +329,8 @@ const TorConnect = (() => {
             return (TorProtocolService.ownsTorDaemon &&
                    // and we're not using the legacy launcher
                    !TorLauncherUtil.useLegacyLauncher &&
-                   // legacy checks, TODO: maybe this should be in terms of our own state?
-                   (TorProtocolService.isNetworkDisabled() || !TorProtocolService.isBootstrapDone()));
+                   // if we have succesfully bootstraped, then no need to show TorConnect
+                   this.state != TorConnectState.Bootstrapped);
         },
 
         get shouldQuickStart() {
@@ -420,8 +420,13 @@ const TorConnect = (() => {
         Further external commands and helper methods
         */
         openTorPreferences: function() {
-            const win = BrowserWindowTracker.getTopWindow()
-            win.openTrustedLinkIn("about:preferences#tor", "tab");
+            const win = BrowserWindowTracker.getTopWindow();
+            win.switchToTabHavingURI("about:preferences#tor", true);
+        },
+
+        openTorConnect: function() {
+            const win = BrowserWindowTracker.getTopWindow();
+            win.switchToTabHavingURI("about:torconnect", true, {ignoreQueryString: true});
         },
 
         copyTorLogs: function() {





More information about the tbb-commits mailing list