[tbb-commits] [Git][tpo/applications/tor-browser][tor-browser-102.12.0esr-12.5-1] fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in...
ma1 (@ma1)
git at gitlab.torproject.org
Wed Jun 7 20:27:34 UTC 2023
ma1 pushed to branch tor-browser-102.12.0esr-12.5-1 at The Tor Project / Applications / Tor Browser
Commits:
338b3317 by Henry Wilkes at 2023-06-07T19:58:06+00:00
fixup! Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
Bug 41810 - Add "Connect" button instead of the "Submit" and "OK" button in the bridge request dialog and the manual bridge dialog, respectively.
- - - - -
4 changed files:
- browser/components/torpreferences/content/builtinBridgeDialog.jsm
- browser/components/torpreferences/content/connectionPane.js
- browser/components/torpreferences/content/provideBridgeDialog.jsm
- browser/components/torpreferences/content/requestBridgeDialog.jsm
Changes:
=====================================
browser/components/torpreferences/content/builtinBridgeDialog.jsm
=====================================
@@ -36,9 +36,6 @@ class BuiltinBridgeDialog {
"#torPreferences-builtinBridge-description"
).textContent = TorStrings.settings.builtinBridgeDescription2;
- this._acceptButton = dialog.getButton("accept");
- this.onTorStateChange();
-
const radioGroup = dialog.querySelector(
"#torPreferences-builtinBridge-typeSelection"
);
@@ -102,20 +99,26 @@ class BuiltinBridgeDialog {
dialog.style.minWidth = "0";
dialog.style.minHeight = "0";
+ this._acceptButton = dialog.getButton("accept");
+
Services.obs.addObserver(this, TorConnectTopics.StateChange);
+ this.onAcceptStateChange();
}
- onTorStateChange() {
- if (TorConnect.canBeginBootstrap) {
- this._acceptButton.setAttribute(
- "label",
- TorStrings.settings.bridgeButtonConnect
- );
- } else {
- this._acceptButton.setAttribute(
- "label",
- TorStrings.settings.bridgeButtonAccept
- );
+ onAcceptStateChange() {
+ this._acceptButton.setAttribute(
+ "label",
+ TorConnect.canBeginBootstrap
+ ? TorStrings.settings.bridgeButtonConnect
+ : TorStrings.settings.bridgeButtonAccept
+ );
+ }
+
+ observe(subject, topic, data) {
+ switch (topic) {
+ case TorConnectTopics.StateChange:
+ this.onAcceptStateChange();
+ break;
}
}
@@ -126,16 +129,8 @@ class BuiltinBridgeDialog {
}, 0);
}
- observe(subject, topic, data) {
- switch (topic) {
- case TorConnectTopics.StateChange:
- this.onTorStateChange();
- break;
- }
- }
-
close() {
- // unregister our observer topics
+ // Unregister our observer topics.
Services.obs.removeObserver(this, TorConnectTopics.StateChange);
}
=====================================
browser/components/torpreferences/content/connectionPane.js
=====================================
@@ -1047,9 +1047,47 @@ const gConnectionPane = (function() {
});
},
+ /**
+ * Save and apply settings, then optionally open about:torconnect and start
+ * bootstrapping.
+ *
+ * @param {boolean} connect - Whether to open about:torconnect and start
+ * bootstrapping if possible.
+ */
+ async saveBridgeSettings(connect) {
+ TorSettings.saveToPrefs();
+ // FIXME: This can throw if the user adds a bridge manually with invalid
+ // content. Should be addressed by tor-browser#40552.
+ await TorSettings.applySettings();
+
+ this._populateBridgeCards();
+
+ if (!connect) {
+ return;
+ }
+
+ // The bridge dialog button is "connect" when Tor is not bootstrapped,
+ // so do the connect.
+
+ // Start Bootstrapping, which should use the configured bridges.
+ // NOTE: We do this regardless of any previous TorConnect Error.
+ if (TorConnect.canBeginBootstrap) {
+ TorConnect.beginBootstrap();
+ }
+ // Open "about:torconnect".
+ // FIXME: If there has been a previous bootstrapping error then
+ // "about:torconnect" will be trying to get the user to use
+ // AutoBootstrapping. It is not set up to handle a forced direct
+ // entry to plain Bootstrapping from this dialog so the UI will not
+ // be aligned. In particular the
+ // AboutTorConnect.uiState.bootstrapCause will be aligned to
+ // whatever was shown previously in "about:torconnect" instead.
+ TorConnect.openTorConnect();
+ },
+
onAddBuiltinBridge() {
const builtinBridgeDialog = new BuiltinBridgeDialog(
- async (bridgeType, connect) => {
+ (bridgeType, connect) => {
if (!bridgeType) {
TorSettings.bridges.enabled = false;
TorSettings.bridges.builtin_type = "";
@@ -1058,29 +1096,8 @@ const gConnectionPane = (function() {
TorSettings.bridges.source = TorBridgeSource.BuiltIn;
TorSettings.bridges.builtin_type = bridgeType;
}
- TorSettings.saveToPrefs();
- await TorSettings.applySettings();
-
- this._populateBridgeCards();
- // The bridge dialog button is "connect" when Tor is not bootstrapped,
- // so do the connect.
- if (connect) {
- // Start Bootstrapping, which should use the configured bridges.
- // NOTE: We do this regardless of any previous TorConnect Error.
- if (TorConnect.canBeginBootstrap) {
- TorConnect.beginBootstrap();
- }
- // Open "about:torconnect".
- // FIXME: If there has been a previous bootstrapping error then
- // "about:torconnect" will be trying to get the user to use
- // AutoBootstrapping. It is not set up to handle a forced direct
- // entry to plain Bootstrapping from this dialog so the UI will not
- // be aligned. In particular the
- // AboutTorConnect.uiState.bootstrapCause will be aligned to
- // whatever was shown previously in "about:torconnect" instead.
- TorConnect.openTorConnect();
- }
+ this.saveBridgeSettings(connect);
}
);
builtinBridgeDialog.openDialog(gSubDialog);
@@ -1088,37 +1105,38 @@ const gConnectionPane = (function() {
// called when the request bridge button is activated
onRequestBridge() {
- const requestBridgeDialog = new RequestBridgeDialog(aBridges => {
- if (aBridges.length) {
+ const requestBridgeDialog = new RequestBridgeDialog(
+ (aBridges, connect) => {
+ if (!aBridges.length) {
+ return;
+ }
const bridgeStrings = aBridges.join("\n");
TorSettings.bridges.enabled = true;
TorSettings.bridges.source = TorBridgeSource.BridgeDB;
TorSettings.bridges.bridge_strings = bridgeStrings;
- TorSettings.saveToPrefs();
- TorSettings.applySettings().then(result => {
- this._populateBridgeCards();
- });
+
+ this.saveBridgeSettings(connect);
}
- });
+ );
requestBridgeDialog.openDialog(gSubDialog);
},
onAddBridgeManually() {
- const provideBridgeDialog = new ProvideBridgeDialog(aBridgeString => {
- if (aBridgeString.length) {
- TorSettings.bridges.enabled = true;
- TorSettings.bridges.source = TorBridgeSource.UserProvided;
- TorSettings.bridges.bridge_strings = aBridgeString;
- } else {
- TorSettings.bridges.enabled = false;
- TorSettings.bridges.source = TorBridgeSource.Invalid;
- TorSettings.bridges.bridge_strings = "";
+ const provideBridgeDialog = new ProvideBridgeDialog(
+ (aBridgeString, connect) => {
+ if (aBridgeString) {
+ TorSettings.bridges.enabled = true;
+ TorSettings.bridges.source = TorBridgeSource.UserProvided;
+ TorSettings.bridges.bridge_strings = aBridgeString;
+ } else {
+ TorSettings.bridges.enabled = false;
+ TorSettings.bridges.source = TorBridgeSource.Invalid;
+ TorSettings.bridges.bridge_strings = "";
+ }
+
+ this.saveBridgeSettings(connect);
}
- TorSettings.saveToPrefs();
- TorSettings.applySettings().then(result => {
- this._populateBridgeCards();
- });
- });
+ );
provideBridgeDialog.openDialog(gSubDialog);
},
=====================================
browser/components/torpreferences/content/provideBridgeDialog.jsm
=====================================
@@ -2,17 +2,24 @@
var EXPORTED_SYMBOLS = ["ProvideBridgeDialog"];
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
const { TorSettings, TorBridgeSource } = ChromeUtils.import(
"resource:///modules/TorSettings.jsm"
);
+const { TorConnect, TorConnectTopics } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
+);
+
class ProvideBridgeDialog {
constructor(onSubmit) {
this.onSubmit = onSubmit;
this._dialog = null;
this._textarea = null;
+ this._acceptButton = null;
}
static get selectors() {
@@ -49,14 +56,43 @@ class ProvideBridgeDialog {
"placeholder",
TorStrings.settings.provideBridgePlaceholder
);
+ this._textarea.addEventListener("input", () => {
+ this.onAcceptStateChange();
+ });
if (TorSettings.bridges.source == TorBridgeSource.UserProvided) {
this._textarea.value = TorSettings.bridges.bridge_strings.join("\n");
}
this._dialog.addEventListener("dialogaccept", e => {
- this.onSubmit(this._textarea.value);
+ let value = this._textarea.value;
+ if (!value.trim()) {
+ value = null;
+ }
+ this.onSubmit(value, value && TorConnect.canBeginBootstrap);
});
this._dialog.addEventListener("dialoghelp", openHelp);
+
+ this._acceptButton = this._dialog.getButton("accept");
+
+ Services.obs.addObserver(this, TorConnectTopics.StateChange);
+ this.onAcceptStateChange();
+ }
+
+ onAcceptStateChange() {
+ this._acceptButton.setAttribute(
+ "label",
+ this._textarea.value.trim() && TorConnect.canBeginBootstrap
+ ? TorStrings.settings.bridgeButtonConnect
+ : TorStrings.settings.bridgeButtonAccept
+ );
+ }
+
+ observe(subject, topic, data) {
+ switch (topic) {
+ case TorConnectTopics.StateChange:
+ this.onAcceptStateChange();
+ break;
+ }
}
init(window, aDialog) {
@@ -66,10 +102,20 @@ class ProvideBridgeDialog {
}, 0);
}
+ close() {
+ // Unregister our observer topics.
+ Services.obs.removeObserver(this, TorConnectTopics.StateChange);
+ }
+
openDialog(gSubDialog) {
gSubDialog.open(
"chrome://browser/content/torpreferences/provideBridgeDialog.xhtml",
- { features: "resizable=yes" },
+ {
+ features: "resizable=yes",
+ closingCallback: () => {
+ this.close();
+ },
+ },
this
);
}
=====================================
browser/components/torpreferences/content/requestBridgeDialog.jsm
=====================================
@@ -2,9 +2,15 @@
var EXPORTED_SYMBOLS = ["RequestBridgeDialog"];
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
+
const { BridgeDB } = ChromeUtils.import("resource:///modules/BridgeDB.jsm");
const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+const { TorConnect, TorConnectTopics } = ChromeUtils.import(
+ "resource:///modules/TorConnect.jsm"
+);
+
class RequestBridgeDialog {
constructor(onSubmit) {
this.onSubmit = onSubmit;
@@ -20,8 +26,6 @@ class RequestBridgeDialog {
static get selectors() {
return {
- submitButton:
- "accept" /* not really a selector but a key for dialog's getButton */,
dialogHeader: "h3#torPreferences-requestBridge-header",
captchaImage: "image#torPreferences-requestBridge-captchaImage",
captchaEntryTextbox: "input#torPreferences-requestBridge-captchaTextbox",
@@ -57,8 +61,7 @@ class RequestBridgeDialog {
}
});
- this._submitButton = this._dialog.getButton(selectors.submitButton);
- this._submitButton.setAttribute("label", TorStrings.settings.submitCaptcha);
+ this._submitButton = this._dialog.getButton("accept");
this._submitButton.disabled = true;
this._dialog.addEventListener("dialogaccept", e => {
e.preventDefault();
@@ -110,7 +113,25 @@ class RequestBridgeDialog {
TorStrings.settings.incorrectCaptcha
);
- return true;
+ Services.obs.addObserver(this, TorConnectTopics.StateChange);
+ this.onAcceptStateChange();
+ }
+
+ onAcceptStateChange() {
+ this._submitButton.setAttribute(
+ "label",
+ TorConnect.canBeginBootstrap
+ ? TorStrings.settings.bridgeButtonConnect
+ : TorStrings.settings.submitCaptcha
+ );
+ }
+
+ observe(subject, topic, data) {
+ switch (topic) {
+ case TorConnectTopics.StateChange:
+ this.onAcceptStateChange();
+ break;
+ }
}
_setcaptchaImage(uri) {
@@ -142,6 +163,8 @@ class RequestBridgeDialog {
close() {
BridgeDB.close();
+ // Unregister our observer topics.
+ Services.obs.removeObserver(this, TorConnectTopics.StateChange);
}
/*
@@ -161,7 +184,7 @@ class RequestBridgeDialog {
BridgeDB.submitCaptchaGuess(captchaText)
.then(aBridges => {
if (aBridges) {
- this.onSubmit(aBridges);
+ this.onSubmit(aBridges, TorConnect.canBeginBootstrap);
this._submitButton.disabled = false;
// This was successful, but use cancelDialog() to close, since
// we intercept the `dialogaccept` event.
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/338b3317a0894e0d51b7e5639585bb93e47edf03
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/338b3317a0894e0d51b7e5639585bb93e47edf03
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20230607/33460b8e/attachment-0001.htm>
More information about the tbb-commits
mailing list