Richard Pospesel pushed to branch tor-browser-102.10.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits:
- 
84b47639
by Dan Ballard at 2023-04-14T20:35:41+00:00
- 
f0df6486
by Dan Ballard at 2023-04-14T21:02:03+00:00
5 changed files:
- browser/components/torpreferences/content/builtinBridgeDialog.jsm
- browser/components/torpreferences/content/builtinBridgeDialog.xhtml
- browser/components/torpreferences/content/connectionPane.js
- browser/modules/TorStrings.jsm
- toolkit/torbutton/chrome/locale/en-US/settings.properties
Changes:
| 1 | 1 |  "use strict";
 | 
| 2 | 2 | |
| 3 | +const obs = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
 | |
| 4 | + | |
| 3 | 5 |  var EXPORTED_SYMBOLS = ["BuiltinBridgeDialog"];
 | 
| 4 | 6 | |
| 5 | 7 |  const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
 | 
| 6 | 8 | |
| 7 | 9 |  const {
 | 
| 8 | 10 |    TorSettings,
 | 
| 11 | +  TorSettingsTopics,
 | |
| 9 | 12 |    TorBridgeSource,
 | 
| 10 | 13 |    TorBuiltinBridgeTypes,
 | 
| 11 | 14 |  } = ChromeUtils.import("resource:///modules/TorSettings.jsm");
 | 
| 12 | 15 | |
| 16 | +const {
 | |
| 17 | +  TorConnect,
 | |
| 18 | +  TorConnectTopics,
 | |
| 19 | +  TorConnectState,
 | |
| 20 | +} = ChromeUtils.import("resource:///modules/TorConnect.jsm");
 | |
| 21 | + | |
| 13 | 22 |  class BuiltinBridgeDialog {
 | 
| 14 | 23 |    constructor(onSubmit) {
 | 
| 15 | 24 |      this.onSubmit = onSubmit;
 | 
| 16 | 25 |      this._dialog = null;
 | 
| 26 | +    this._window = null;
 | |
| 27 | +    this._acceptButton = null;
 | |
| 17 | 28 |    }
 | 
| 18 | 29 | |
| 19 | 30 |    static get selectors() {
 | 
| ... | ... | @@ -27,27 +38,31 @@ class BuiltinBridgeDialog { | 
| 27 | 38 |        snowflakeDescr: "#torPreferences-builtinBridges-descrSnowflake",
 | 
| 28 | 39 |        meekAzureRadio: "#torPreferences-builtinBridges-radioMeekAzure",
 | 
| 29 | 40 |        meekAzureDescr: "#torPreferences-builtinBridges-descrMeekAzure",
 | 
| 41 | +      acceptButton: "accept" /* not really a selector but a key for dialog's getButton */,
 | |
| 30 | 42 |      };
 | 
| 31 | 43 |    }
 | 
| 32 | 44 | |
| 33 | 45 |    _populateXUL(window, aDialog) {
 | 
| 34 | 46 |      const selectors = BuiltinBridgeDialog.selectors;
 | 
| 35 | 47 | |
| 48 | +    this._window = window;
 | |
| 36 | 49 |      this._dialog = aDialog;
 | 
| 37 | 50 |      const dialogWin = this._dialog.parentElement;
 | 
| 38 | -    dialogWin.setAttribute("title", TorStrings.settings.builtinBridgeTitle);
 | |
| 51 | +    dialogWin.setAttribute("title", TorStrings.settings.builtinBridgeHeader);
 | |
| 39 | 52 | |
| 40 | -    this._dialog.querySelector(selectors.header).textContent =
 | |
| 41 | -      TorStrings.settings.builtinBridgeHeader;
 | |
| 42 | 53 |      this._dialog.querySelector(selectors.description).textContent =
 | 
| 43 | 54 |        TorStrings.settings.builtinBridgeDescription;
 | 
| 55 | + | |
| 56 | +    this._acceptButton = this._dialog.getButton(selectors.acceptButton);
 | |
| 57 | +    this.onTorStateChange();
 | |
| 58 | + | |
| 44 | 59 |      let radioGroup = this._dialog.querySelector(selectors.radiogroup);
 | 
| 45 | 60 | |
| 46 | 61 |      let types = {
 | 
| 47 | 62 |        obfs4: {
 | 
| 48 | 63 |          elemRadio: this._dialog.querySelector(selectors.obfsRadio),
 | 
| 49 | 64 |          elemDescr: this._dialog.querySelector(selectors.obfsDescr),
 | 
| 50 | -        label: TorStrings.settings.builtinBridgeObfs4,
 | |
| 65 | +        label: TorStrings.settings.builtinBridgeObfs4Title,
 | |
| 51 | 66 |          descr: TorStrings.settings.builtinBridgeObfs4Description,
 | 
| 52 | 67 |        },
 | 
| 53 | 68 |        snowflake: {
 | 
| ... | ... | @@ -94,6 +109,16 @@ class BuiltinBridgeDialog { | 
| 94 | 109 |      // Hack: see the CSS
 | 
| 95 | 110 |      this._dialog.style.minWidth = "0";
 | 
| 96 | 111 |      this._dialog.style.minHeight = "0";
 | 
| 112 | + | |
| 113 | +    obs.addObserver(this, TorConnectTopics.StateChange);
 | |
| 114 | +  }
 | |
| 115 | + | |
| 116 | +  onTorStateChange() {
 | |
| 117 | +    if (TorConnect.state === TorConnectState.Configuring) {
 | |
| 118 | +      this._acceptButton.setAttribute("label", TorStrings.settings.bridgeButtonConnect);
 | |
| 119 | +    } else {
 | |
| 120 | +      this._acceptButton.setAttribute("label", TorStrings.settings.bridgeButtonAccept);
 | |
| 121 | +    }
 | |
| 97 | 122 |    }
 | 
| 98 | 123 | |
| 99 | 124 |    init(window, aDialog) {
 | 
| ... | ... | @@ -103,10 +128,27 @@ class BuiltinBridgeDialog { | 
| 103 | 128 |      }, 0);
 | 
| 104 | 129 |    }
 | 
| 105 | 130 | |
| 131 | +  observe(subject, topic, data) {
 | |
| 132 | +    switch (topic) {
 | |
| 133 | +      case TorConnectTopics.StateChange: {
 | |
| 134 | +        this.onTorStateChange();
 | |
| 135 | +        break;
 | |
| 136 | +      }
 | |
| 137 | +    }
 | |
| 138 | +  }
 | |
| 139 | + | |
| 140 | +  close() {
 | |
| 141 | +    // unregister our observer topics
 | |
| 142 | +    obs.removeObserver(this, TorConnectTopics.StateChange);
 | |
| 143 | +  }
 | |
| 144 | + | |
| 106 | 145 |    openDialog(gSubDialog) {
 | 
| 107 | 146 |      gSubDialog.open(
 | 
| 108 | 147 |        "chrome://browser/content/torpreferences/builtinBridgeDialog.xhtml",
 | 
| 109 | -      { features: "resizable=yes" },
 | |
| 148 | +      { features: "resizable=yes",
 | |
| 149 | +        closingCallback: () => {
 | |
| 150 | +          this.close();
 | |
| 151 | +        },},
 | |
| 110 | 152 |        this
 | 
| 111 | 153 |      );
 | 
| 112 | 154 |    }
 | 
| ... | ... | @@ -8,7 +8,6 @@ | 
| 8 | 8 |          xmlns:html="http://www.w3.org/1999/xhtml">
 | 
| 9 | 9 |  <dialog id="torPreferences-builtinBridge-dialog"
 | 
| 10 | 10 |          buttons="help,accept,cancel">
 | 
| 11 | -  <html:h3 id="torPreferences-builtinBridge-header">​</html:h3>
 | |
| 12 | 11 |    <description>
 | 
| 13 | 12 |      <html:div id="torPreferences-builtinBridge-description">​<br/>​</html:div>
 | 
| 14 | 13 |    </description>
 | 
| ... | ... | @@ -1071,6 +1071,11 @@ const gConnectionPane = (function() { | 
| 1071 | 1071 |          TorSettings.applySettings().then(result => {
 | 
| 1072 | 1072 |            this._populateBridgeCards();
 | 
| 1073 | 1073 |          });
 | 
| 1074 | +        // The bridge dialog button is "connect" when Tor is not bootstrapped,
 | |
| 1075 | +        // so do the connect
 | |
| 1076 | +        if (TorConnect.state == TorConnectState.Configuring) {
 | |
| 1077 | +          TorConnect.openTorConnect({ beginBootstrap: true })
 | |
| 1078 | +        }
 | |
| 1074 | 1079 |        });
 | 
| 1075 | 1080 |        builtinBridgeDialog.openDialog(gSubDialog);
 | 
| 1076 | 1081 |      },
 | 
| ... | ... | @@ -95,7 +95,7 @@ const Loader = { | 
| 95 | 95 |        // Bridge settings
 | 
| 96 | 96 |        bridgesHeading: "Bridges",
 | 
| 97 | 97 |        bridgesDescription:
 | 
| 98 | -        "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.",
 | |
| 98 | +        "Bridges help you securely access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.",
 | |
| 99 | 99 |        bridgeLocation: "Your location",
 | 
| 100 | 100 |        bridgeLocationAutomatic: "Automatic",
 | 
| 101 | 101 |        bridgeLocationFrequent: "Frequently selected locations",
 | 
| ... | ... | @@ -141,16 +141,19 @@ const Loader = { | 
| 141 | 141 |        builtinBridgeTitle: "Built-In Bridges",
 | 
| 142 | 142 |        builtinBridgeHeader: "Select a Built-In Bridge",
 | 
| 143 | 143 |        builtinBridgeDescription:
 | 
| 144 | -        "Tor Browser includes some specific types of bridges known as “pluggable transports”.",
 | |
| 144 | +        "Tor Browser includes some specific types of bridges known as “pluggable transports”, which can help conceal the fact you’re using Tor.",
 | |
| 145 | 145 |        builtinBridgeObfs4: "obfs4",
 | 
| 146 | +      builtinBridgeObfs4Title: "obfs4 (Built-in)",
 | |
| 146 | 147 |        builtinBridgeObfs4Description:
 | 
| 147 | -        "obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges.",
 | |
| 148 | +        "Makes your Tor traffic look like random data. May not work in heavily censored regions.",
 | |
| 148 | 149 |        builtinBridgeSnowflake: "Snowflake",
 | 
| 149 | 150 |        builtinBridgeSnowflakeDescription:
 | 
| 150 | -        "Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers.",
 | |
| 151 | +        "Routes your connection through Snowflake proxies to make it look like you’re placing a video call, for example.",
 | |
| 151 | 152 |        builtinBridgeMeekAzure: "meek-azure",
 | 
| 152 | 153 |        builtinBridgeMeekAzureDescription:
 | 
| 153 | -        "meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor.",
 | |
| 154 | +        "Makes it look like you’re connected to a Microsoft web site, instead of using Tor. May work in heavily censored regions, but is usually very slow.",
 | |
| 155 | +      bridgeButtonConnect: "Connect",
 | |
| 156 | +      bridgeButtonAccept: "OK",
 | |
| 154 | 157 |        // Request bridges dialog
 | 
| 155 | 158 |        requestBridgeDialogTitle: "Request Bridge",
 | 
| 156 | 159 |        submitCaptcha: "Submit",
 | 
| ... | ... | @@ -26,7 +26,7 @@ settings.quickstartCheckbox=Always connect automatically | 
| 26 | 26 | |
| 27 | 27 |  # Bridge settings
 | 
| 28 | 28 |  settings.bridgesHeading=Bridges
 | 
| 29 | -settings.bridgesDescription=Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.
 | |
| 29 | +settings.bridgesDescription=Bridges help you securely access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.
 | |
| 30 | 30 |  settings.bridgeLocation=Your location
 | 
| 31 | 31 |  settings.bridgeLocationAutomatic=Automatic
 | 
| 32 | 32 |  settings.bridgeLocationFrequent=Frequently selected locations
 | 
| ... | ... | @@ -73,14 +73,18 @@ settings.scanQrTitle=Scan the QR code | 
| 73 | 73 | |
| 74 | 74 |  # Builtin bridges dialog
 | 
| 75 | 75 |  settings.builtinBridgeTitle=Built-In Bridges
 | 
| 76 | +# Bug 41617: Todo - delete builtinBridgeHeader, no longer user
 | |
| 76 | 77 |  settings.builtinBridgeHeader=Select a Built-In Bridge
 | 
| 77 | -settings.builtinBridgeDescription=Tor Browser includes some specific types of bridges known as “pluggable transports”.
 | |
| 78 | +settings.builtinBridgeDescription=Tor Browser includes some specific types of bridges known as “pluggable transports”, which can help conceal the fact you’re using Tor.
 | |
| 78 | 79 |  settings.builtinBridgeObfs4=obfs4
 | 
| 79 | -settings.builtinBridgeObfs4Description=obfs4 is a type of built-in bridge that makes your Tor traffic look random. They are also less likely to be blocked than their predecessors, obfs3 bridges.
 | |
| 80 | +settings.builtinBridgeObfs4Title=obfs4 (Built-in)
 | |
| 81 | +settings.builtinBridgeObfs4Description=Makes your Tor traffic look like random data. May not work in heavily censored regions.
 | |
| 80 | 82 |  settings.builtinBridgeSnowflake=Snowflake
 | 
| 81 | -settings.builtinBridgeSnowflakeDescription=Snowflake is a built-in bridge that defeats censorship by routing your connection through Snowflake proxies, ran by volunteers.
 | |
| 83 | +settings.builtinBridgeSnowflakeDescription=Routes your connection through Snowflake proxies to make it look like you’re placing a video call, for example.
 | |
| 82 | 84 |  settings.builtinBridgeMeekAzure=meek-azure
 | 
| 83 | -settings.builtinBridgeMeekAzureDescription=meek-azure is a built-in bridge that makes it look like you are using a Microsoft web site instead of using Tor.
 | |
| 85 | +settings.builtinBridgeMeekAzureDescription=Makes it look like you’re connected to a Microsoft web site, instead of using Tor. May work in heavily censored regions, but is usually very slow.
 | |
| 86 | +settings.bridgeButtonConnect=Connect
 | |
| 87 | +settings.bridgeButtonAccept=OK
 | |
| 84 | 88 | |
| 85 | 89 |  # Request bridges dialog
 | 
| 86 | 90 |  settings.requestBridgeDialogTitle=Request Bridge
 |