Pier Angelo Vendrame pushed to branch tor-browser-115.10.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
a9c02248
by Henry Wilkes at 2024-04-22T07:22:05+00:00
-
4006866f
by Henry Wilkes at 2024-04-22T07:22:05+00:00
3 changed files:
- browser/components/torpreferences/content/connectionPane.js
- browser/components/torpreferences/content/loxInviteDialog.js
- toolkit/components/lox/Lox.sys.mjs
Changes:
| ... | ... | @@ -1317,6 +1317,7 @@ const gLoxStatus = { |
| 1317 | 1317 | });
|
| 1318 | 1318 | |
| 1319 | 1319 | Services.obs.addObserver(this, TorSettingsTopics.SettingsChanged);
|
| 1320 | + Services.obs.addObserver(this, LoxTopics.UpdateActiveLoxId);
|
|
| 1320 | 1321 | Services.obs.addObserver(this, LoxTopics.UpdateEvents);
|
| 1321 | 1322 | Services.obs.addObserver(this, LoxTopics.UpdateNextUnlock);
|
| 1322 | 1323 | Services.obs.addObserver(this, LoxTopics.UpdateRemainingInvites);
|
| ... | ... | @@ -1333,6 +1334,7 @@ const gLoxStatus = { |
| 1333 | 1334 | */
|
| 1334 | 1335 | uninit() {
|
| 1335 | 1336 | Services.obs.removeObserver(this, TorSettingsTopics.SettingsChanged);
|
| 1337 | + Services.obs.removeObserver(this, LoxTopics.UpdateActiveLoxId);
|
|
| 1336 | 1338 | Services.obs.removeObserver(this, LoxTopics.UpdateEvents);
|
| 1337 | 1339 | Services.obs.removeObserver(this, LoxTopics.UpdateNextUnlock);
|
| 1338 | 1340 | Services.obs.removeObserver(this, LoxTopics.UpdateRemainingInvites);
|
| ... | ... | @@ -1343,12 +1345,17 @@ const gLoxStatus = { |
| 1343 | 1345 | switch (topic) {
|
| 1344 | 1346 | case TorSettingsTopics.SettingsChanged:
|
| 1345 | 1347 | const { changes } = subject.wrappedJSObject;
|
| 1346 | - if (
|
|
| 1347 | - changes.includes("bridges.source") ||
|
|
| 1348 | - changes.includes("bridges.lox_id")
|
|
| 1349 | - ) {
|
|
| 1348 | + if (changes.includes("bridges.source")) {
|
|
| 1350 | 1349 | this._updateLoxId();
|
| 1351 | 1350 | }
|
| 1351 | + // NOTE: We do not call _updateLoxId when "bridges.lox_id" is in the
|
|
| 1352 | + // changes. Instead we wait until LoxTopics.UpdateActiveLoxId to ensure
|
|
| 1353 | + // that the Lox module has responded to the change in ID strictly
|
|
| 1354 | + // *before* we do. In particular, we want to make sure the invites and
|
|
| 1355 | + // event data has been cleared.
|
|
| 1356 | + break;
|
|
| 1357 | + case LoxTopics.UpdateActiveLoxId:
|
|
| 1358 | + this._updateLoxId();
|
|
| 1352 | 1359 | break;
|
| 1353 | 1360 | case LoxTopics.UpdateNextUnlock:
|
| 1354 | 1361 | this._updateNextUnlock();
|
| ... | ... | @@ -1378,9 +1385,7 @@ const gLoxStatus = { |
| 1378 | 1385 | */
|
| 1379 | 1386 | async _updateLoxId() {
|
| 1380 | 1387 | let loxId =
|
| 1381 | - TorSettings.bridges.source === TorBridgeSource.Lox
|
|
| 1382 | - ? TorSettings.bridges.lox_id
|
|
| 1383 | - : "";
|
|
| 1388 | + TorSettings.bridges.source === TorBridgeSource.Lox ? Lox.activeLoxId : "";
|
|
| 1384 | 1389 | if (loxId === this._loxId) {
|
| 1385 | 1390 | return;
|
| 1386 | 1391 | }
|
| ... | ... | @@ -104,6 +104,7 @@ const gLoxInvites = { |
| 104 | 104 | // NOTE: TorSettings should already be initialized when this dialog is
|
| 105 | 105 | // opened.
|
| 106 | 106 | Services.obs.addObserver(this, TorSettingsTopics.SettingsChanged);
|
| 107 | + Services.obs.addObserver(this, LoxTopics.UpdateActiveLoxId);
|
|
| 107 | 108 | Services.obs.addObserver(this, LoxTopics.UpdateRemainingInvites);
|
| 108 | 109 | Services.obs.addObserver(this, LoxTopics.NewInvite);
|
| 109 | 110 | |
| ... | ... | @@ -119,6 +120,7 @@ const gLoxInvites = { |
| 119 | 120 | */
|
| 120 | 121 | uninit() {
|
| 121 | 122 | Services.obs.removeObserver(this, TorSettingsTopics.SettingsChanged);
|
| 123 | + Services.obs.removeObserver(this, LoxTopics.UpdateActiveLoxId);
|
|
| 122 | 124 | Services.obs.removeObserver(this, LoxTopics.UpdateRemainingInvites);
|
| 123 | 125 | Services.obs.removeObserver(this, LoxTopics.NewInvite);
|
| 124 | 126 | },
|
| ... | ... | @@ -127,13 +129,13 @@ const gLoxInvites = { |
| 127 | 129 | switch (topic) {
|
| 128 | 130 | case TorSettingsTopics.SettingsChanged:
|
| 129 | 131 | const { changes } = subject.wrappedJSObject;
|
| 130 | - if (
|
|
| 131 | - changes.includes("bridges.source") ||
|
|
| 132 | - changes.includes("bridges.lox_id")
|
|
| 133 | - ) {
|
|
| 132 | + if (changes.includes("bridges.source")) {
|
|
| 134 | 133 | this._updateLoxId();
|
| 135 | 134 | }
|
| 136 | 135 | break;
|
| 136 | + case LoxTopics.UpdateActiveLoxId:
|
|
| 137 | + this._updateLoxId();
|
|
| 138 | + break;
|
|
| 137 | 139 | case LoxTopics.UpdateRemainingInvites:
|
| 138 | 140 | this._updateRemainingInvites();
|
| 139 | 141 | break;
|
| ... | ... | @@ -155,9 +157,7 @@ const gLoxInvites = { |
| 155 | 157 | */
|
| 156 | 158 | _updateLoxId() {
|
| 157 | 159 | const loxId =
|
| 158 | - TorSettings.bridges.source === TorBridgeSource.Lox
|
|
| 159 | - ? TorSettings.bridges.lox_id
|
|
| 160 | - : "";
|
|
| 160 | + TorSettings.bridges.source === TorBridgeSource.Lox ? Lox.activeLoxId : "";
|
|
| 161 | 161 | if (!loxId || (this._loxId !== null && loxId !== this._loxId)) {
|
| 162 | 162 | // No lox id, or it changed. Close this dialog.
|
| 163 | 163 | this._dialog.cancelDialog();
|
| ... | ... | @@ -55,6 +55,8 @@ XPCOMUtils.defineLazyModuleGetters(lazy, { |
| 55 | 55 | });
|
| 56 | 56 | |
| 57 | 57 | export const LoxTopics = Object.freeze({
|
| 58 | + // Whenever the activeLoxId value changes.
|
|
| 59 | + UpdateActiveLoxId: "lox:update-active-lox-id",
|
|
| 58 | 60 | // Whenever the bridges *might* have changed.
|
| 59 | 61 | // getBridges only uses #credentials, so this will only fire when it changes.
|
| 60 | 62 | UpdateBridges: "lox:update-bridges",
|
| ... | ... | @@ -141,6 +143,10 @@ class LoxImpl { |
| 141 | 143 | */
|
| 142 | 144 | #activeLoxId = null;
|
| 143 | 145 | |
| 146 | + get activeLoxId() {
|
|
| 147 | + return this.#activeLoxId;
|
|
| 148 | + }
|
|
| 149 | + |
|
| 144 | 150 | /**
|
| 145 | 151 | * Update the active lox id.
|
| 146 | 152 | */
|
| ... | ... | @@ -164,6 +170,8 @@ class LoxImpl { |
| 164 | 170 | this.#store();
|
| 165 | 171 | }
|
| 166 | 172 | this.#activeLoxId = loxId;
|
| 173 | + |
|
| 174 | + Services.obs.notifyObservers(null, LoxTopics.UpdateActiveLoxId);
|
|
| 167 | 175 | }
|
| 168 | 176 | |
| 169 | 177 | observe(subject, topic, data) {
|