henry pushed to branch tor-browser-128.8.0esr-14.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
03900c02
by Henry Wilkes at 2025-03-10T11:05:42+00:00
-
8e2dc3e0
by Henry Wilkes at 2025-03-10T11:05:44+00:00
-
48d3af20
by Henry Wilkes at 2025-03-10T11:05:45+00:00
10 changed files:
- .eslintignore
- .prettierignore
- browser/components/torpreferences/content/connectionPane.js
- toolkit/components/torconnect/TorConnectParent.sys.mjs
- toolkit/components/torconnect/content/aboutTorConnect.js
- toolkit/content/jar.mn
- + toolkit/content/moat_countries_dev_build.json
- toolkit/modules/Moat.sys.mjs
- toolkit/modules/RemotePageAccessManager.sys.mjs
- toolkit/modules/TorConnect.sys.mjs
Changes:
| ... | ... | @@ -304,4 +304,5 @@ browser/app/profile/001-base-profile.js |
| 304 | 304 | browser/app/profile/000-tor-browser.js
|
| 305 | 305 | mobile/android/app/000-tor-browser-android.js
|
| 306 | 306 | toolkit/content/pt_config.json
|
| 307 | +toolkit/content/moat_contries_dev_build.json
|
|
| 307 | 308 | toolkit/components/lox/lox_wasm.jsm |
| ... | ... | @@ -1533,4 +1533,5 @@ browser/app/profile/001-base-profile.js |
| 1533 | 1533 | browser/app/profile/000-tor-browser.js
|
| 1534 | 1534 | mobile/android/app/000-tor-browser-android.js
|
| 1535 | 1535 | toolkit/content/pt_config.json
|
| 1536 | +toolkit/content/moat_countries_dev_build.json
|
|
| 1536 | 1537 | toolkit/components/lox/lox_wasm.jsm |
| ... | ... | @@ -2529,65 +2529,48 @@ const gConnectionPane = (function () { |
| 2529 | 2529 | regionCode: location.value,
|
| 2530 | 2530 | });
|
| 2531 | 2531 | });
|
| 2532 | - this._populateLocations = () => {
|
|
| 2533 | - const currentValue = location.value;
|
|
| 2534 | - locationEntries.textContent = "";
|
|
| 2535 | - const createItem = (value, label, disabled) => {
|
|
| 2536 | - const item = document.createXULElement("menuitem");
|
|
| 2537 | - item.setAttribute("value", value);
|
|
| 2538 | - item.setAttribute("label", label);
|
|
| 2539 | - if (disabled) {
|
|
| 2540 | - item.setAttribute("disabled", "true");
|
|
| 2541 | - }
|
|
| 2542 | - return item;
|
|
| 2543 | - };
|
|
| 2544 | - const addLocations = codes => {
|
|
| 2545 | - const items = [];
|
|
| 2546 | - for (const code of codes) {
|
|
| 2547 | - items.push(
|
|
| 2548 | - createItem(
|
|
| 2549 | - code,
|
|
| 2550 | - TorConnect.countryNames[code]
|
|
| 2551 | - ? TorConnect.countryNames[code]
|
|
| 2552 | - : code
|
|
| 2553 | - )
|
|
| 2554 | - );
|
|
| 2555 | - }
|
|
| 2556 | - items.sort((left, right) => left.label.localeCompare(right.label));
|
|
| 2557 | - locationEntries.append(...items);
|
|
| 2558 | - };
|
|
| 2559 | - locationEntries.append(
|
|
| 2560 | - createItem("automatic", TorStrings.settings.bridgeLocationAutomatic)
|
|
| 2561 | - );
|
|
| 2562 | - if (TorConnect.countryCodes.length) {
|
|
| 2563 | - locationEntries.append(
|
|
| 2564 | - createItem("", TorStrings.settings.bridgeLocationFrequent, true)
|
|
| 2565 | - );
|
|
| 2566 | - addLocations(TorConnect.countryCodes);
|
|
| 2567 | - locationEntries.append(
|
|
| 2568 | - createItem("", TorStrings.settings.bridgeLocationOther, true)
|
|
| 2532 | + const createItem = (value, label, disabled) => {
|
|
| 2533 | + const item = document.createXULElement("menuitem");
|
|
| 2534 | + item.setAttribute("value", value);
|
|
| 2535 | + item.setAttribute("label", label);
|
|
| 2536 | + if (disabled) {
|
|
| 2537 | + item.setAttribute("disabled", "true");
|
|
| 2538 | + }
|
|
| 2539 | + return item;
|
|
| 2540 | + };
|
|
| 2541 | + const addLocations = codes => {
|
|
| 2542 | + const items = [];
|
|
| 2543 | + for (const code of codes) {
|
|
| 2544 | + items.push(
|
|
| 2545 | + createItem(
|
|
| 2546 | + code,
|
|
| 2547 | + TorConnect.countryNames[code]
|
|
| 2548 | + ? TorConnect.countryNames[code]
|
|
| 2549 | + : code
|
|
| 2550 | + )
|
|
| 2569 | 2551 | );
|
| 2570 | 2552 | }
|
| 2571 | - addLocations(Object.keys(TorConnect.countryNames));
|
|
| 2572 | - location.value = currentValue;
|
|
| 2553 | + items.sort((left, right) => left.label.localeCompare(right.label));
|
|
| 2554 | + locationEntries.append(...items);
|
|
| 2573 | 2555 | };
|
| 2556 | + // Add automatic before waiting for getFrequentRegions.
|
|
| 2557 | + locationEntries.append(
|
|
| 2558 | + createItem("automatic", TorStrings.settings.bridgeLocationAutomatic)
|
|
| 2559 | + );
|
|
| 2560 | + location.value = "automatic";
|
|
| 2561 | + TorConnect.getFrequentRegions().then(frequentCodes => {
|
|
| 2562 | + locationEntries.append(
|
|
| 2563 | + createItem("", TorStrings.settings.bridgeLocationFrequent, true)
|
|
| 2564 | + );
|
|
| 2565 | + addLocations(frequentCodes);
|
|
| 2566 | + locationEntries.append(
|
|
| 2567 | + createItem("", TorStrings.settings.bridgeLocationOther, true)
|
|
| 2568 | + );
|
|
| 2569 | + addLocations(Object.keys(TorConnect.countryNames));
|
|
| 2570 | + });
|
|
| 2574 | 2571 | this._showAutoconfiguration = () => {
|
| 2575 | - if (
|
|
| 2576 | - !TorConnect.canBeginAutoBootstrap ||
|
|
| 2577 | - !TorConnect.potentiallyBlocked
|
|
| 2578 | - ) {
|
|
| 2579 | - locationGroup.setAttribute("hidden", "true");
|
|
| 2580 | - return;
|
|
| 2581 | - }
|
|
| 2582 | - // Populate locations, even though we will show only the automatic
|
|
| 2583 | - // item for a moment. In my opinion showing the button immediately is
|
|
| 2584 | - // better then waiting for the Moat query to finish (after a while)
|
|
| 2585 | - // and showing the controls only after that.
|
|
| 2586 | - this._populateLocations();
|
|
| 2587 | - locationGroup.removeAttribute("hidden");
|
|
| 2588 | - if (!TorConnect.countryCodes.length) {
|
|
| 2589 | - TorConnect.getCountryCodes().then(() => this._populateLocations());
|
|
| 2590 | - }
|
|
| 2572 | + locationGroup.hidden =
|
|
| 2573 | + !TorConnect.canBeginAutoBootstrap || !TorConnect.potentiallyBlocked;
|
|
| 2591 | 2574 | };
|
| 2592 | 2575 | this._showAutoconfiguration();
|
| 2593 | 2576 | }
|
| ... | ... | @@ -132,8 +132,8 @@ export class TorConnectParent extends JSWindowActorParent { |
| 132 | 132 | stage: TorConnect.stage,
|
| 133 | 133 | quickstartEnabled: TorConnect.quickstart,
|
| 134 | 134 | };
|
| 135 | - case "torconnect:get-country-codes":
|
|
| 136 | - return TorConnect.getCountryCodes();
|
|
| 135 | + case "torconnect:get-frequent-regions":
|
|
| 136 | + return TorConnect.getFrequentRegions();
|
|
| 137 | 137 | }
|
| 138 | 138 | return undefined;
|
| 139 | 139 | }
|
| ... | ... | @@ -610,7 +610,7 @@ class AboutTorConnect { |
| 610 | 610 | |
| 611 | 611 | showLocationForm(isChoose, buttonLabel) {
|
| 612 | 612 | this.hideButtons();
|
| 613 | - RPMSendQuery("torconnect:get-country-codes").then(codes => {
|
|
| 613 | + RPMSendQuery("torconnect:get-frequent-regions").then(codes => {
|
|
| 614 | 614 | if (codes && codes.length) {
|
| 615 | 615 | this.populateFrequentLocations(codes);
|
| 616 | 616 | this.setLocation();
|
| ... | ... | @@ -158,4 +158,9 @@ toolkit.jar: |
| 158 | 158 | content/global/third_party/d3/d3.js (/third_party/js/d3/d3.js)
|
| 159 | 159 | content/global/third_party/cfworker/json-schema.js (/third_party/js/cfworker/json-schema.js)
|
| 160 | 160 | |
| 161 | + # The pt_config.json content should be replaced in the omni.ja in
|
|
| 162 | + # tor-browser-build. See tor-browser#42343.
|
|
| 161 | 163 | content/global/pt_config.json (pt_config.json)
|
| 164 | + # The moat_countries.json content should be replaced in the omni.ja in
|
|
| 165 | + # tor-browser-build. See tor-browser#43463.
|
|
| 166 | + content/global/moat_countries.json (moat_countries_dev_build.json) |
| 1 | +[
|
|
| 2 | + {
|
|
| 3 | + "_comment1": "Used for dev build, replaced for release builds in tor-browser-build.",
|
|
| 4 | + "_comment2": "List is taken from tpo/anti-censorship/rdsys-admin 810fb24b:conf/circumvention.json and filtered with `jq -c keys`."
|
|
| 5 | + },
|
|
| 6 | + "by","cn","eg","hk","ir","mm","ru","tm"
|
|
| 7 | +] |
| ... | ... | @@ -335,20 +335,6 @@ export class MoatRPC { |
| 335 | 335 | return settings;
|
| 336 | 336 | }
|
| 337 | 337 | |
| 338 | - // Request a list of country codes with available censorship circumvention
|
|
| 339 | - // settings.
|
|
| 340 | - //
|
|
| 341 | - // returns an array of ISO 3166-1 alpha-2 country codes which we can query
|
|
| 342 | - // settings for.
|
|
| 343 | - async circumvention_countries() {
|
|
| 344 | - const args = {};
|
|
| 345 | - const { response } = await this.#makeRequest(
|
|
| 346 | - "circumvention/countries",
|
|
| 347 | - args
|
|
| 348 | - );
|
|
| 349 | - return response;
|
|
| 350 | - }
|
|
| 351 | - |
|
| 352 | 338 | // Request a copy of the builtin bridges, takes the following parameters:
|
| 353 | 339 | // - transports: optional, an array of transports we would like the latest
|
| 354 | 340 | // bridge strings for; if empty (or not given) returns all of them
|
| ... | ... | @@ -255,7 +255,7 @@ export let RemotePageAccessManager = { |
| 255 | 255 | ],
|
| 256 | 256 | RPMSendQuery: [
|
| 257 | 257 | "torconnect:get-init-args",
|
| 258 | - "torconnect:get-country-codes",
|
|
| 258 | + "torconnect:get-frequent-regions",
|
|
| 259 | 259 | ],
|
| 260 | 260 | },
|
| 261 | 261 | "about:welcome": {
|
| ... | ... | @@ -817,8 +817,14 @@ export const TorConnect = { |
| 817 | 817 | };
|
| 818 | 818 | },
|
| 819 | 819 | |
| 820 | - // list of country codes Moat has settings for
|
|
| 821 | - _countryCodes: [],
|
|
| 820 | + /**
|
|
| 821 | + * Promise that resolves to a list of region codes that Moat has special
|
|
| 822 | + * bridge settings for.
|
|
| 823 | + *
|
|
| 824 | + * @type {Promise<string[]>}
|
|
| 825 | + */
|
|
| 826 | + _moatRegionsPromise: null,
|
|
| 827 | + |
|
| 822 | 828 | _countryNames: Object.freeze(
|
| 823 | 829 | (() => {
|
| 824 | 830 | const codes = Services.intl.getAvailableLocaleDisplayNames("region");
|
| ... | ... | @@ -892,6 +898,18 @@ export const TorConnect = { |
| 892 | 898 | return;
|
| 893 | 899 | }
|
| 894 | 900 | |
| 901 | + this._moatRegionsPromise = fetch(
|
|
| 902 | + "chrome://global/content/moat_countries.json"
|
|
| 903 | + )
|
|
| 904 | + .then(req => req.json())
|
|
| 905 | + // Filter out the "_comment" object in the moat_countries_dev_build.json
|
|
| 906 | + // file.
|
|
| 907 | + .then(regionList => regionList.filter(r => typeof r === "string"))
|
|
| 908 | + .catch(e => {
|
|
| 909 | + lazy.logger.error("Failed to fetch Moat region codes", e);
|
|
| 910 | + return [];
|
|
| 911 | + });
|
|
| 912 | + |
|
| 895 | 913 | let observeTopic = addTopic => {
|
| 896 | 914 | Services.obs.addObserver(this, addTopic);
|
| 897 | 915 | lazy.logger.debug(`Observing topic '${addTopic}'`);
|
| ... | ... | @@ -1113,10 +1131,6 @@ export const TorConnect = { |
| 1113 | 1131 | return null;
|
| 1114 | 1132 | },
|
| 1115 | 1133 | |
| 1116 | - get countryCodes() {
|
|
| 1117 | - return this._countryCodes;
|
|
| 1118 | - },
|
|
| 1119 | - |
|
| 1120 | 1134 | get countryNames() {
|
| 1121 | 1135 | return this._countryNames;
|
| 1122 | 1136 | },
|
| ... | ... | @@ -1526,25 +1540,12 @@ export const TorConnect = { |
| 1526 | 1540 | this._makeStageRequest(TorConnectStage.ChooseRegion);
|
| 1527 | 1541 | },
|
| 1528 | 1542 | |
| 1529 | - /*
|
|
| 1530 | - Further external commands and helper methods
|
|
| 1543 | + /**
|
|
| 1544 | + * Get the list of regions that Moat has settings for.
|
|
| 1545 | + *
|
|
| 1546 | + * @returns {string[]} - The list of region codes.
|
|
| 1531 | 1547 | */
|
| 1532 | - |
|
| 1533 | - async getCountryCodes() {
|
|
| 1534 | - // Difference with the getter: this is to be called by TorConnectParent, and
|
|
| 1535 | - // downloads the country codes if they are not already in cache.
|
|
| 1536 | - if (this._countryCodes.length) {
|
|
| 1537 | - return this._countryCodes;
|
|
| 1538 | - }
|
|
| 1539 | - const mrpc = new lazy.MoatRPC();
|
|
| 1540 | - try {
|
|
| 1541 | - await mrpc.init();
|
|
| 1542 | - this._countryCodes = await mrpc.circumvention_countries();
|
|
| 1543 | - } catch (err) {
|
|
| 1544 | - lazy.logger.error("An error occurred while fetching country codes", err);
|
|
| 1545 | - } finally {
|
|
| 1546 | - mrpc.uninit();
|
|
| 1547 | - }
|
|
| 1548 | - return this._countryCodes;
|
|
| 1548 | + async getFrequentRegions() {
|
|
| 1549 | + return this._moatRegionsPromise ?? [];
|
|
| 1549 | 1550 | },
|
| 1550 | 1551 | }; |