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

Commits:

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) {