[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [Git][tpo/applications/tor-browser][tor-browser-102.10.0esr-12.5-1] 8 commits: fixup! Bug 40597: Implement TorSettings module



Title: GitLab

Richard Pospesel pushed to branch tor-browser-102.10.0esr-12.5-1 at The Tor Project / Applications / Tor Browser

Commits:

  • 1222e90d
    by Henry Wilkes at 2023-04-13T19:07:38+00:00
    fixup! Bug 40597: Implement TorSettings module
    
    Bug 41608 - Tidy up the TorConnect API for broad error states that the
    different UI components can share.
    
    Rename the `hasBootstrapEverFailed` to `potentiallyBlocked` as a
    specific failure state.
    
    Add the `hasEverFailed` boolean property as a catch-all failure state.
    
    Add an `enabled` boolean property, which just maps to whether we own the
    tor process.
    
  • b652316e
    by Henry Wilkes at 2023-04-13T19:07:39+00:00
    fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
    
    Bug 41608 - Tidy up the TorConnect API for broad error states that the
    different UI components can share.
    
    Just use the HasEverFailed state to determine whether to show "Try
    Again" or to show breadcrumbs.
    
  • 60d18fa7
    by Henry Wilkes at 2023-04-13T19:07:39+00:00
    fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
    
    Bug 41608 - Tidy up the TorConnect API for broad error states that the
    different UI components can share.
    
    No longer import TorMonitorService, and just use TorConnect instead.
    
    + Use TorConnect.enabled to determine whether to show the settings.
    + Use TorConnect.hasEverFailed state rather than
      TorMonitorService.bootstrapErrorOccurred to determine whether to show
      "Try Again".
    + Use TorConnect.potentiallyBlocked to determine whether to show the
      location selector. E.g. we don't want to show this if we just failed
      an internet connection test.
    
  • 9fe1259d
    by Henry Wilkes at 2023-04-13T19:07:40+00:00
    fixup! Bug 40933: Add tor-launcher functionality
    
    Bug 41608 - Remove unused TorMonitorService.bootstrapErrorOccurred
    
  • d6c9dd4f
    by Henry Wilkes at 2023-04-13T19:07:40+00:00
    fixup! Bug 40597: Implement TorSettings module
    
    Bug 41608 - Remove unused TorMonitorService.bootstrapErrorOccurred
    
  • 2a8e78df
    by Henry Wilkes at 2023-04-13T19:07:41+00:00
    fixup! Bug 40597: Implement TorSettings module
    
    Bug 41608 - Add the canBeginBootstrap and canBeginAutoBootstrap
    properties  to determine whether it is possible to enter the
    corresponding TorConnectState from the current state.
    
    Add options to openTorConnect to begin bootstrapping or
    auto-bootstrapping once opened.
    
  • 203f9488
    by Henry Wilkes at 2023-04-13T19:07:41+00:00
    fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
    
    Bug 41608 - Use TorConnect.canBeginBootstrap and
    TorConnect.canBeginAutoBootstrap and use bootstrapping options in
    openAboutTor.
    
    Selecting a location in the preferences now also opens
    "about:torconnect".
    
  • e109bbd2
    by Henry Wilkes at 2023-04-13T19:07:42+00:00
    fixup! Bug 27476: Implement about:torconnect captive portal within Tor Browser
    
    Bug 41608 - Remove the FatalError state since it is not defined in
    TorConnect.
    

5 changed files:

Changes:

  • browser/components/torconnect/TorConnectParent.jsm
    ... ... @@ -38,7 +38,7 @@ class TorConnectParent extends JSWindowActorParent {
    38 38
           InternetStatus: TorConnect.internetStatus,
    
    39 39
           DetectedLocation: TorConnect.detectedLocation,
    
    40 40
           ShowViewLog: TorConnect.logHasWarningOrError,
    
    41
    -      HasBootsrapEverFailed: TorConnect.hasBootstrapEverFailed,
    
    41
    +      HasEverFailed: TorConnect.hasEverFailed,
    
    42 42
           QuickStartEnabled: TorSettings.quickstart.enabled,
    
    43 43
           UIState: TorConnect.uiState,
    
    44 44
         };
    
    ... ... @@ -67,8 +67,7 @@ class TorConnectParent extends JSWindowActorParent {
    67 67
                   self.state.ErrorMessage = null;
    
    68 68
                   self.state.ErrorDetails = null;
    
    69 69
                 }
    
    70
    -            self.state.HasBootsrapEverFailed =
    
    71
    -              TorConnect.hasBootstrapEverFailed;
    
    70
    +            self.state.HasEverFailed = TorConnect.hasEverFailed;
    
    72 71
                 break;
    
    73 72
               }
    
    74 73
               case TorConnectTopics.BootstrapProgress: {
    
    ... ... @@ -89,10 +88,6 @@ class TorConnectParent extends JSWindowActorParent {
    89 88
                 self.state.ShowViewLog = true;
    
    90 89
                 break;
    
    91 90
               }
    
    92
    -          case TorConnectTopics.FatalError: {
    
    93
    -            // TODO: handle
    
    94
    -            break;
    
    95
    -          }
    
    96 91
               case TorSettingsTopics.SettingChanged: {
    
    97 92
                 if (aData === TorSettingsData.QuickStartEnabled) {
    
    98 93
                   self.state.QuickStartEnabled = obj.value;
    

  • browser/components/torconnect/content/aboutTorConnect.js
    ... ... @@ -142,7 +142,6 @@ class AboutTorConnect {
    142 142
     
    
    143 143
       uiState = {
    
    144 144
         currentState: UIStates.ConnectToTor,
    
    145
    -    connectIsTryAgain: false,
    
    146 145
         allowAutomaticLocation: true,
    
    147 146
         selectedLocation: "automatic",
    
    148 147
         bootstrapCause: UIStates.ConnectToTor,
    
    ... ... @@ -389,12 +388,6 @@ class AboutTorConnect {
    389 388
       }
    
    390 389
     
    
    391 390
       update_Error(state) {
    
    392
    -    if (!this.uiState.connectIsTryAgain) {
    
    393
    -      // TorConnect.hasBootstrapEverFailed remains false in case of Internet
    
    394
    -      // offline
    
    395
    -      this.uiState.connectIsTryAgain = true;
    
    396
    -      this.saveUIState();
    
    397
    -    }
    
    398 391
         if (!state.StateChanged) {
    
    399 392
           return;
    
    400 393
         }
    
    ... ... @@ -457,7 +450,7 @@ class AboutTorConnect {
    457 450
         if (state?.StateChanged) {
    
    458 451
           this.elements.connectButton.focus();
    
    459 452
         }
    
    460
    -    if (this.uiState.connectIsTryAgain) {
    
    453
    +    if (state.HasEverFailed) {
    
    461 454
           this.setBreadcrumbsStatus(
    
    462 455
             BreadcrumbStatus.Active,
    
    463 456
             BreadcrumbStatus.Default,
    
    ... ... @@ -481,7 +474,7 @@ class AboutTorConnect {
    481 474
         switch (this.uiState.bootstrapCause) {
    
    482 475
           case UIStates.ConnectToTor:
    
    483 476
             breadcrumbs[0] = BreadcrumbStatus.Active;
    
    484
    -        title = this.uiState.connectIsTryAgain
    
    477
    +        title = state.HasEverFailed
    
    485 478
               ? TorStrings.torConnect.tryAgain
    
    486 479
               : TorStrings.torConnect.torConnecting;
    
    487 480
             description = TorStrings.settings.torPreferencesDescription;
    
    ... ... @@ -505,7 +498,7 @@ class AboutTorConnect {
    505 498
         this.setTitle(title, "");
    
    506 499
         this.showConfigureConnectionLink(description);
    
    507 500
         this.setProgress("", showProgressbar, state.BootstrapProgress);
    
    508
    -    if (state.HasBootsrapEverFailed) {
    
    501
    +    if (state.HasEverFailed) {
    
    509 502
           this.setBreadcrumbsStatus(...breadcrumbs);
    
    510 503
         } else {
    
    511 504
           this.hideBreadcrumbs();
    

  • browser/components/torpreferences/content/connectionPane.js
    ... ... @@ -18,9 +18,6 @@ const {
    18 18
       TorBridgeSource,
    
    19 19
     } = ChromeUtils.import("resource:///modules/TorSettings.jsm");
    
    20 20
     
    
    21
    -const { TorMonitorService } = ChromeUtils.import(
    
    22
    -  "resource://gre/modules/TorMonitorService.jsm"
    
    23
    -);
    
    24 21
     const { TorProtocolService } = ChromeUtils.import(
    
    25 22
       "resource://gre/modules/TorProtocolService.jsm"
    
    26 23
     );
    
    ... ... @@ -197,17 +194,13 @@ const gConnectionPane = (function() {
    197 194
           );
    
    198 195
           // wire up connect button
    
    199 196
           messageBoxButton.addEventListener("click", () => {
    
    200
    -        TorConnect.beginBootstrap();
    
    201
    -        TorConnect.openTorConnect();
    
    197
    +        TorConnect.openTorConnect({ beginBootstrap: true });
    
    202 198
           });
    
    203 199
     
    
    204 200
           this._populateMessagebox = () => {
    
    205
    -        if (
    
    206
    -          TorConnect.shouldShowTorConnect &&
    
    207
    -          TorConnect.state === TorConnectState.Configuring
    
    208
    -        ) {
    
    201
    +        if (TorConnect.canBeginBootstrap) {
    
    209 202
               // set messagebox style and text
    
    210
    -          if (TorMonitorService.bootstrapErrorOccurred) {
    
    203
    +          if (TorConnect.hasEverFailed) {
    
    211 204
                 messageBox.parentNode.style.display = null;
    
    212 205
                 messageBox.className = "error";
    
    213 206
                 messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage;
    
    ... ... @@ -291,10 +284,11 @@ const gConnectionPane = (function() {
    291 284
                   TorStrings.settings.statusInternetOffline;
    
    292 285
                 break;
    
    293 286
             }
    
    287
    +        // FIXME: What about the TorConnectState.Disabled state?
    
    294 288
             if (TorConnect.state === TorConnectState.Bootstrapped) {
    
    295 289
               torIcon.className = "connected";
    
    296 290
               torStatus.textContent = TorStrings.settings.statusTorConnected;
    
    297
    -        } else if (TorConnect.hasBootstrapEverFailed) {
    
    291
    +        } else if (TorConnect.potentiallyBlocked) {
    
    298 292
               torIcon.className = "blocked";
    
    299 293
               torStatus.textContent = TorStrings.settings.statusTorBlocked;
    
    300 294
             } else {
    
    ... ... @@ -358,7 +352,9 @@ const gConnectionPane = (function() {
    358 352
               TorStrings.settings.bridgeChooseForMe
    
    359 353
             );
    
    360 354
             chooseForMe.addEventListener("command", e => {
    
    361
    -          TorConnect.beginAutoBootstrap(location.value);
    
    355
    +          TorConnect.openTorConnect({
    
    356
    +            beginAutoBootstrap: location.value,
    
    357
    +          });
    
    362 358
             });
    
    363 359
             this._populateLocations = () => {
    
    364 360
               const currentValue = location.value;
    
    ... ... @@ -404,8 +400,8 @@ const gConnectionPane = (function() {
    404 400
             };
    
    405 401
             this._showAutoconfiguration = () => {
    
    406 402
               if (
    
    407
    -            !TorConnect.shouldShowTorConnect ||
    
    408
    -            !TorMonitorService.bootstrapErrorOccurred
    
    403
    +            !TorConnect.canBeginAutoBootstrap ||
    
    404
    +            !TorConnect.potentiallyBlocked
    
    409 405
               ) {
    
    410 406
                 locationGroup.setAttribute("hidden", "true");
    
    411 407
                 return;
    
    ... ... @@ -969,7 +965,7 @@ const gConnectionPane = (function() {
    969 965
     
    
    970 966
         // whether the page should be present in about:preferences
    
    971 967
         get enabled() {
    
    972
    -      return TorMonitorService.ownsTorDaemon;
    
    968
    +      return TorConnect.enabled;
    
    973 969
         },
    
    974 970
     
    
    975 971
         //
    

  • browser/modules/TorConnect.jsm
    ... ... @@ -366,6 +366,7 @@ const TorConnect = (() => {
    366 366
         _errorMessage: null,
    
    367 367
         _errorDetails: null,
    
    368 368
         _logHasWarningOrError: false,
    
    369
    +    _hasEverFailed: false,
    
    369 370
         _hasBootstrapEverFailed: false,
    
    370 371
         _transitionPromise: null,
    
    371 372
     
    
    ... ... @@ -458,7 +459,6 @@ const TorConnect = (() => {
    458 459
                       "Error: Censorship simulation",
    
    459 460
                       true
    
    460 461
                     );
    
    461
    -                TorMonitorService.setBootstrapError();
    
    462 462
                     return;
    
    463 463
                   }
    
    464 464
     
    
    ... ... @@ -581,7 +581,6 @@ const TorConnect = (() => {
    581 581
                         );
    
    582 582
                         return;
    
    583 583
                       }
    
    584
    -                  TorMonitorService.setBootstrapError();
    
    585 584
                     }
    
    586 585
                   }
    
    587 586
     
    
    ... ... @@ -793,6 +792,9 @@ const TorConnect = (() => {
    793 792
         },
    
    794 793
     
    
    795 794
         _changeState(newState, ...args) {
    
    795
    +      if (newState === TorConnectState.Error) {
    
    796
    +        this._hasEverFailed = true;
    
    797
    +      }
    
    796 798
           const prevState = this._state;
    
    797 799
     
    
    798 800
           // ensure this is a valid state transition
    
    ... ... @@ -836,7 +838,7 @@ const TorConnect = (() => {
    836 838
           console.log("TorConnect: init()");
    
    837 839
           this._callback(TorConnectState.Initial).begin();
    
    838 840
     
    
    839
    -      if (!TorMonitorService.ownsTorDaemon) {
    
    841
    +      if (!this.enabled) {
    
    840 842
             // Disabled
    
    841 843
             this._changeState(TorConnectState.Disabled);
    
    842 844
           } else {
    
    ... ... @@ -881,15 +883,50 @@ const TorConnect = (() => {
    881 883
             Various getters
    
    882 884
             */
    
    883 885
     
    
    886
    +    /**
    
    887
    +     * Whether TorConnect is enabled.
    
    888
    +     *
    
    889
    +     * @type {boolean}
    
    890
    +     */
    
    891
    +    get enabled() {
    
    892
    +      return TorMonitorService.ownsTorDaemon;
    
    893
    +    },
    
    894
    +
    
    884 895
         get shouldShowTorConnect() {
    
    885 896
           // TorBrowser must control the daemon
    
    886 897
           return (
    
    887
    -        TorMonitorService.ownsTorDaemon &&
    
    898
    +        this.enabled &&
    
    888 899
             // if we have succesfully bootstraped, then no need to show TorConnect
    
    889 900
             this.state !== TorConnectState.Bootstrapped
    
    890 901
           );
    
    891 902
         },
    
    892 903
     
    
    904
    +    /**
    
    905
    +     * Whether bootstrapping can currently begin.
    
    906
    +     *
    
    907
    +     * The value may change with TorConnectTopics.StateChanged.
    
    908
    +     *
    
    909
    +     * @param {boolean}
    
    910
    +     */
    
    911
    +    get canBeginBootstrap() {
    
    912
    +      return TorConnectStateTransitions.get(this.state).includes(
    
    913
    +        TorConnectState.Bootstrapping
    
    914
    +      );
    
    915
    +    },
    
    916
    +
    
    917
    +    /**
    
    918
    +     * Whether auto-bootstrapping can currently begin.
    
    919
    +     *
    
    920
    +     * The value may change with TorConnectTopics.StateChanged.
    
    921
    +     *
    
    922
    +     * @param {boolean}
    
    923
    +     */
    
    924
    +    get canBeginAutoBootstrap() {
    
    925
    +      return TorConnectStateTransitions.get(this.state).includes(
    
    926
    +        TorConnectState.AutoBootstrapping
    
    927
    +      );
    
    928
    +    },
    
    929
    +
    
    893 930
         get shouldQuickStart() {
    
    894 931
           // quickstart must be enabled
    
    895 932
           return (
    
    ... ... @@ -939,7 +976,24 @@ const TorConnect = (() => {
    939 976
           return this._logHasWarningOrError;
    
    940 977
         },
    
    941 978
     
    
    942
    -    get hasBootstrapEverFailed() {
    
    979
    +    /**
    
    980
    +     * Whether we have ever entered the Error state.
    
    981
    +     *
    
    982
    +     * @type {boolean}
    
    983
    +     */
    
    984
    +    get hasEverFailed() {
    
    985
    +      return this._hasEverFailed;
    
    986
    +    },
    
    987
    +
    
    988
    +    /**
    
    989
    +     * Whether the Bootstrapping process has ever failed, not including when it
    
    990
    +     * failed due to not being connected to the internet.
    
    991
    +     *
    
    992
    +     * This does not include a failure in AutoBootstrapping.
    
    993
    +     *
    
    994
    +     * @type {boolean}
    
    995
    +     */
    
    996
    +    get potentiallyBlocked() {
    
    943 997
           return this._hasBootstrapEverFailed;
    
    944 998
         },
    
    945 999
     
    
    ... ... @@ -982,11 +1036,40 @@ const TorConnect = (() => {
    982 1036
           win.switchToTabHavingURI("about:preferences#connection", true);
    
    983 1037
         },
    
    984 1038
     
    
    985
    -    openTorConnect() {
    
    1039
    +    /**
    
    1040
    +     * Open the "about:torconnect" tab.
    
    1041
    +     *
    
    1042
    +     * Bootstrapping or AutoBootstrapping can also be automatically triggered at
    
    1043
    +     * the same time, if the current state allows for it.
    
    1044
    +     *
    
    1045
    +     * Bootstrapping will not be triggered if the connection is
    
    1046
    +     * potentially blocked.
    
    1047
    +     *
    
    1048
    +     * @param {object} [options] - extra options.
    
    1049
    +     * @property {boolean} [options.beginBootstrap=false] - Whether to try and
    
    1050
    +     *   begin Bootstrapping.
    
    1051
    +     * @property {string} [options.beginAutoBootstrap] - The location to use to
    
    1052
    +     *   begin AutoBootstrapping, if possible.
    
    1053
    +     */
    
    1054
    +    openTorConnect(options) {
    
    986 1055
           const win = BrowserWindowTracker.getTopWindow();
    
    987 1056
           win.switchToTabHavingURI("about:torconnect", true, {
    
    988 1057
             ignoreQueryString: true,
    
    989 1058
           });
    
    1059
    +      if (
    
    1060
    +        options?.beginBootstrap &&
    
    1061
    +        this.canBeginBootstrap &&
    
    1062
    +        !this.potentiallyBlocked
    
    1063
    +      ) {
    
    1064
    +        this.beginBootstrap();
    
    1065
    +      }
    
    1066
    +      // options.beginAutoBootstrap can be an empty string.
    
    1067
    +      if (
    
    1068
    +        options?.beginAutoBootstrap !== undefined &&
    
    1069
    +        this.canBeginAutoBootstrap
    
    1070
    +      ) {
    
    1071
    +        this.beginAutoBootstrap(options.beginAutoBootstrap);
    
    1072
    +      }
    
    990 1073
         },
    
    991 1074
     
    
    992 1075
         viewTorLogs() {
    

  • toolkit/components/tor-launcher/TorMonitorService.jsm
    ... ... @@ -74,7 +74,6 @@ const TorMonitorService = {
    74 74
       _startTimeout: null,
    
    75 75
     
    
    76 76
       _isBootstrapDone: false,
    
    77
    -  _bootstrapErrorOccurred: false,
    
    78 77
       _lastWarningPhase: null,
    
    79 78
       _lastWarningReason: null,
    
    80 79
     
    
    ... ... @@ -162,21 +161,11 @@ const TorMonitorService = {
    162 161
         return this._isBootstrapDone;
    
    163 162
       },
    
    164 163
     
    
    165
    -  get bootstrapErrorOccurred() {
    
    166
    -    return this._bootstrapErrorOccurred;
    
    167
    -  },
    
    168
    -
    
    169 164
       clearBootstrapError() {
    
    170
    -    this._bootstrapErrorOccurred = false;
    
    171 165
         this._lastWarningPhase = null;
    
    172 166
         this._lastWarningReason = null;
    
    173 167
       },
    
    174 168
     
    
    175
    -  // This should be used for debug only
    
    176
    -  setBootstrapError() {
    
    177
    -    this._bootstrapErrorOccurred = true;
    
    178
    -  },
    
    179
    -
    
    180 169
       get isRunning() {
    
    181 170
         return !!this._connection;
    
    182 171
       },
    
    ... ... @@ -211,7 +200,6 @@ const TorMonitorService = {
    211 200
           }
    
    212 201
         } catch (e) {
    
    213 202
           // TorProcess already logs the error.
    
    214
    -      this._bootstrapErrorOccurred = true;
    
    215 203
           this._lastWarningPhase = "startup";
    
    216 204
           this._lastWarningReason = e.toString();
    
    217 205
         }
    
    ... ... @@ -248,7 +236,6 @@ const TorMonitorService = {
    248 236
             ControlConnTimings.timeoutMS
    
    249 237
           ) {
    
    250 238
             let s = TorLauncherUtil.getLocalizedString("tor_controlconn_failed");
    
    251
    -        this._bootstrapErrorOccurred = true;
    
    252 239
             this._lastWarningPhase = "startup";
    
    253 240
             this._lastWarningReason = s;
    
    254 241
             logger.info(s);
    
    ... ... @@ -435,7 +422,6 @@ const TorMonitorService = {
    435 422
     
    
    436 423
         if (statusObj.PROGRESS === 100) {
    
    437 424
           this._isBootstrapDone = true;
    
    438
    -      this._bootstrapErrorOccurred = false;
    
    439 425
           try {
    
    440 426
             Services.prefs.setBoolPref(Preferences.PromptAtStartup, false);
    
    441 427
           } catch (e) {
    
    ... ... @@ -456,7 +442,6 @@ const TorMonitorService = {
    456 442
       },
    
    457 443
     
    
    458 444
       _notifyBootstrapError(statusObj) {
    
    459
    -    this._bootstrapErrorOccurred = true;
    
    460 445
         try {
    
    461 446
           Services.prefs.setBoolPref(Preferences.PromptAtStartup, true);
    
    462 447
         } catch (e) {
    

  • _______________________________________________
    tor-commits mailing list
    tor-commits@xxxxxxxxxxxxxxxxxxxx
    https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits