Pier Angelo Vendrame pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
303a1239
by Henry Wilkes at 2024-04-22T17:35:39+01:00
-
45f5e2d9
by Henry Wilkes at 2024-04-22T17:35:39+01:00
-
94374ba5
by Henry Wilkes at 2024-04-22T18:01:19+01:00
3 changed files:
- browser/components/torpreferences/content/connectionPane.js
- browser/components/torpreferences/content/provideBridgeDialog.js
- toolkit/components/lox/Lox.sys.mjs
Changes:
| ... | ... | @@ -1284,6 +1284,11 @@ const gLoxStatus = { |
| 1284 | 1284 | * Initialize the bridge pass area.
|
| 1285 | 1285 | */
|
| 1286 | 1286 | init() {
|
| 1287 | + if (!Lox.enabled) {
|
|
| 1288 | + // Area should remain inactive and hidden.
|
|
| 1289 | + return;
|
|
| 1290 | + }
|
|
| 1291 | + |
|
| 1287 | 1292 | this._area = document.getElementById("tor-bridges-lox-status");
|
| 1288 | 1293 | this._detailsArea = document.getElementById("tor-bridges-lox-details");
|
| 1289 | 1294 | this._nextUnlockCounterEl = document.getElementById(
|
| ... | ... | @@ -1333,6 +1338,10 @@ const gLoxStatus = { |
| 1333 | 1338 | * Uninitialize the built-in bridges area.
|
| 1334 | 1339 | */
|
| 1335 | 1340 | uninit() {
|
| 1341 | + if (!Lox.enabled) {
|
|
| 1342 | + return;
|
|
| 1343 | + }
|
|
| 1344 | + |
|
| 1336 | 1345 | Services.obs.removeObserver(this, TorSettingsTopics.SettingsChanged);
|
| 1337 | 1346 | Services.obs.removeObserver(this, LoxTopics.UpdateActiveLoxId);
|
| 1338 | 1347 | Services.obs.removeObserver(this, LoxTopics.UpdateEvents);
|
| ... | ... | @@ -72,8 +72,7 @@ const gProvideBridgeDialog = { |
| 72 | 72 | |
| 73 | 73 | document.l10n.setAttributes(document.documentElement, titleId);
|
| 74 | 74 | |
| 75 | - // TODO: Make conditional on Lox being enabled.
|
|
| 76 | - this._allowLoxInvite = mode !== "edit"; // && Lox.enabled
|
|
| 75 | + this._allowLoxInvite = mode !== "edit" && Lox.enabled;
|
|
| 77 | 76 | |
| 78 | 77 | document.l10n.setAttributes(
|
| 79 | 78 | document.getElementById("user-provide-bridge-textarea-label"),
|
| ... | ... | @@ -403,33 +402,39 @@ const gProvideBridgeDialog = { |
| 403 | 402 | return null;
|
| 404 | 403 | }
|
| 405 | 404 | |
| 406 | - let loxInvite = null;
|
|
| 407 | - for (let line of this._textarea.value.split(/\r?\n/)) {
|
|
| 408 | - line = line.trim();
|
|
| 409 | - if (!line) {
|
|
| 410 | - continue;
|
|
| 411 | - }
|
|
| 412 | - // TODO: Once we have a Lox invite encoding, distinguish between a valid
|
|
| 413 | - // invite and something that looks like it should be an invite.
|
|
| 414 | - const isLoxInvite = Lox.validateInvitation(line);
|
|
| 415 | - if (isLoxInvite) {
|
|
| 416 | - if (!this._allowLoxInvite) {
|
|
| 417 | - this.updateError({ type: "not-allowed-invite" });
|
|
| 418 | - return null;
|
|
| 405 | + // Only check if this looks like a Lox invite when the Lox module is
|
|
| 406 | + // enabled.
|
|
| 407 | + if (Lox.enabled) {
|
|
| 408 | + let loxInvite = null;
|
|
| 409 | + for (let line of this._textarea.value.split(/\r?\n/)) {
|
|
| 410 | + line = line.trim();
|
|
| 411 | + if (!line) {
|
|
| 412 | + continue;
|
|
| 419 | 413 | }
|
| 420 | - if (loxInvite) {
|
|
| 421 | - this.updateError({ type: "multiple-invites" });
|
|
| 414 | + // TODO: Once we have a Lox invite encoding, distinguish between a valid
|
|
| 415 | + // invite and something that looks like it should be an invite.
|
|
| 416 | + const isLoxInvite = Lox.validateInvitation(line);
|
|
| 417 | + if (isLoxInvite) {
|
|
| 418 | + if (!this._allowLoxInvite) {
|
|
| 419 | + // Lox is enabled, but not allowed invites when editing bridge
|
|
| 420 | + // addresses.
|
|
| 421 | + this.updateError({ type: "not-allowed-invite" });
|
|
| 422 | + return null;
|
|
| 423 | + }
|
|
| 424 | + if (loxInvite) {
|
|
| 425 | + this.updateError({ type: "multiple-invites" });
|
|
| 426 | + return null;
|
|
| 427 | + }
|
|
| 428 | + loxInvite = line;
|
|
| 429 | + } else if (loxInvite) {
|
|
| 430 | + this.updateError({ type: "mixed" });
|
|
| 422 | 431 | return null;
|
| 423 | 432 | }
|
| 424 | - loxInvite = line;
|
|
| 425 | - } else if (loxInvite) {
|
|
| 426 | - this.updateError({ type: "mixed" });
|
|
| 427 | - return null;
|
|
| 428 | 433 | }
|
| 429 | - }
|
|
| 430 | 434 | |
| 431 | - if (loxInvite) {
|
|
| 432 | - return { loxInvite };
|
|
| 435 | + if (loxInvite) {
|
|
| 436 | + return { loxInvite };
|
|
| 437 | + }
|
|
| 433 | 438 | }
|
| 434 | 439 | |
| 435 | 440 | const validation = validateBridgeLines(this._textarea.value);
|
| 1 | 1 | import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
| 2 | +import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
|
|
| 2 | 3 | import {
|
| 3 | 4 | clearInterval,
|
| 4 | 5 | setInterval,
|
| ... | ... | @@ -103,8 +104,24 @@ export class LoxError extends Error { |
| 103 | 104 | }
|
| 104 | 105 | |
| 105 | 106 | class LoxImpl {
|
| 107 | + /**
|
|
| 108 | + * Whether the Lox module has completed initialization.
|
|
| 109 | + *
|
|
| 110 | + * @type {boolean}
|
|
| 111 | + */
|
|
| 106 | 112 | #initialized = false;
|
| 107 | - #window = null;
|
|
| 113 | + |
|
| 114 | + /**
|
|
| 115 | + * Whether the Lox module is enabled for this Tor Browser instance.
|
|
| 116 | + *
|
|
| 117 | + * @type {boolean}
|
|
| 118 | + */
|
|
| 119 | + #enabled = AppConstants.MOZ_UPDATE_CHANNEL !== "release";
|
|
| 120 | + |
|
| 121 | + get enabled() {
|
|
| 122 | + return this.#enabled;
|
|
| 123 | + }
|
|
| 124 | + |
|
| 108 | 125 | #pubKeyPromise = null;
|
| 109 | 126 | #encTablePromise = null;
|
| 110 | 127 | #constantsPromise = null;
|
| ... | ... | @@ -218,13 +235,14 @@ class LoxImpl { |
| 218 | 235 | * Assert that the module is initialized.
|
| 219 | 236 | */
|
| 220 | 237 | #assertInitialized() {
|
| 221 | - if (!this.#initialized) {
|
|
| 238 | + if (!this.enabled || !this.#initialized) {
|
|
| 222 | 239 | throw new LoxError("Not initialized");
|
| 223 | 240 | }
|
| 224 | 241 | }
|
| 225 | 242 | |
| 226 | 243 | get #inuse() {
|
| 227 | 244 | return (
|
| 245 | + this.enabled &&
|
|
| 228 | 246 | Boolean(this.#activeLoxId) &&
|
| 229 | 247 | lazy.TorSettings.bridges.enabled === true &&
|
| 230 | 248 | lazy.TorSettings.bridges.source === lazy.TorBridgeSource.Lox
|
| ... | ... | @@ -532,16 +550,20 @@ class LoxImpl { |
| 532 | 550 | }
|
| 533 | 551 | |
| 534 | 552 | async init() {
|
| 553 | + if (!this.enabled) {
|
|
| 554 | + lazy.logger.info(
|
|
| 555 | + "Skipping initialization since Lox module is not enabled"
|
|
| 556 | + );
|
|
| 557 | + return;
|
|
| 558 | + }
|
|
| 535 | 559 | // If lox_id is set, load it
|
| 536 | 560 | Services.obs.addObserver(this, lazy.TorSettingsTopics.SettingsChanged);
|
| 537 | 561 | Services.obs.addObserver(this, lazy.TorSettingsTopics.Ready);
|
| 538 | 562 | |
| 539 | 563 | // Hack to make the generated wasm happy
|
| 540 | - this.#window = {
|
|
| 541 | - crypto,
|
|
| 542 | - };
|
|
| 543 | - this.#window.window = this.#window;
|
|
| 544 | - await lazy.init(this.#window);
|
|
| 564 | + const win = { crypto };
|
|
| 565 | + win.window = win;
|
|
| 566 | + await lazy.init(win);
|
|
| 545 | 567 | lazy.set_panic_hook();
|
| 546 | 568 | if (typeof lazy.open_invite !== "function") {
|
| 547 | 569 | throw new LoxError("Initialization failed");
|
| ... | ... | @@ -551,6 +573,9 @@ class LoxImpl { |
| 551 | 573 | }
|
| 552 | 574 | |
| 553 | 575 | async uninit() {
|
| 576 | + if (!this.enabled) {
|
|
| 577 | + return;
|
|
| 578 | + }
|
|
| 554 | 579 | Services.obs.removeObserver(this, lazy.TorSettingsTopics.SettingsChanged);
|
| 555 | 580 | Services.obs.removeObserver(this, lazy.TorSettingsTopics.Ready);
|
| 556 | 581 | if (this.#domainFrontedRequests !== null) {
|
| ... | ... | @@ -561,7 +586,6 @@ class LoxImpl { |
| 561 | 586 | this.#domainFrontedRequests = null;
|
| 562 | 587 | }
|
| 563 | 588 | this.#initialized = false;
|
| 564 | - this.#window = null;
|
|
| 565 | 589 | this.#invites = [];
|
| 566 | 590 | this.#pubKeys = null;
|
| 567 | 591 | this.#encTable = null;
|