Pier Angelo Vendrame pushed to branch tor-browser-115.7.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
f49834e2
by Dan Ballard at 2024-01-25T17:05:18+00:00
-
db59cb25
by Dan Ballard at 2024-01-25T17:05:18+00:00
4 changed files:
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorSettings.java
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/androidlegacysettings/TorLegacyAndroidSettings.java
- toolkit/modules/TorSettings.sys.mjs
Changes:
| ... | ... | @@ -82,6 +82,10 @@ public class TorIntegrationAndroid implements BundleEventListener { |
| 82 | 82 | private final HashMap<Integer, MeekTransport> mMeeks = new HashMap<>();
|
| 83 | 83 | private int mMeekCounter;
|
| 84 | 84 | |
| 85 | + // mSettings is a java side copy of the authoritative settings in the JS code.
|
|
| 86 | + // it's useful to maintain as the ui may be fetching these options often and
|
|
| 87 | + // we don't watch each fetch to be a passthrough to JS with JSON serialization and
|
|
| 88 | + // deserialization each time
|
|
| 85 | 89 | private TorSettings mSettings = null;
|
| 86 | 90 | |
| 87 | 91 | /* package */ TorIntegrationAndroid(Context context) {
|
| ... | ... | @@ -557,11 +561,38 @@ public class TorIntegrationAndroid implements BundleEventListener { |
| 557 | 561 | void onSettingsRequested();
|
| 558 | 562 | }
|
| 559 | 563 | |
| 560 | - public @NonNull GeckoResult<GeckoBundle> getSettings() {
|
|
| 561 | - return EventDispatcher.getInstance().queryBundle(EVENT_SETTINGS_GET);
|
|
| 564 | + private @NonNull void reloadSettings() {
|
|
| 565 | + EventDispatcher.getInstance().queryBundle(EVENT_SETTINGS_GET).then( new GeckoResult.OnValueListener<GeckoBundle, Void>() {
|
|
| 566 | + public GeckoResult<Void> onValue(final GeckoBundle bundle) {
|
|
| 567 | + mSettings = new TorSettings(bundle);
|
|
| 568 | + return new GeckoResult<Void>();
|
|
| 569 | + }
|
|
| 570 | + });
|
|
| 571 | + }
|
|
| 572 | + |
|
| 573 | + public TorSettings getSettings() {
|
|
| 574 | + return mSettings;
|
|
| 575 | + }
|
|
| 576 | + |
|
| 577 | + public void setSettings(final TorSettings settings, boolean save, boolean apply) {
|
|
| 578 | + mSettings = settings;
|
|
| 579 | + |
|
| 580 | + emitSetSettings(settings, save, apply).then(
|
|
| 581 | + new GeckoResult.OnValueListener<Void, Void>() {
|
|
| 582 | + public GeckoResult<Void> onValue(Void v) {
|
|
| 583 | + return new GeckoResult<Void>();
|
|
| 584 | + }
|
|
| 585 | + },
|
|
| 586 | + new GeckoResult.OnExceptionListener<Void>() {
|
|
| 587 | + public GeckoResult<Void> onException(final Throwable e) {
|
|
| 588 | + Log.e(TAG, "Failed to set settings", e);
|
|
| 589 | + reloadSettings();
|
|
| 590 | + return new GeckoResult<Void>();
|
|
| 591 | + }
|
|
| 592 | + });
|
|
| 562 | 593 | }
|
| 563 | 594 | |
| 564 | - public @NonNull GeckoResult<Void> setSettings(final TorSettings settings, boolean save, boolean apply) {
|
|
| 595 | + private @NonNull GeckoResult<Void> emitSetSettings(final TorSettings settings, boolean save, boolean apply) {
|
|
| 565 | 596 | GeckoBundle bundle = new GeckoBundle(3);
|
| 566 | 597 | bundle.putBoolean("save", save);
|
| 567 | 598 | bundle.putBoolean("apply", apply);
|
| ... | ... | @@ -2,24 +2,8 @@ package org.mozilla.geckoview; |
| 2 | 2 | |
| 3 | 3 | import android.util.Log;
|
| 4 | 4 | |
| 5 | -import org.json.JSONArray;
|
|
| 6 | -import org.json.JSONObject;
|
|
| 7 | 5 | import org.mozilla.gecko.util.GeckoBundle;
|
| 8 | 6 | |
| 9 | -import java.io.ByteArrayInputStream;
|
|
| 10 | -import java.io.File;
|
|
| 11 | -import java.io.FileOutputStream;
|
|
| 12 | -import java.io.IOException;
|
|
| 13 | -import java.io.InputStream;
|
|
| 14 | -import java.io.PrintStream;
|
|
| 15 | -import java.io.SequenceInputStream;
|
|
| 16 | -import java.io.UnsupportedEncodingException;
|
|
| 17 | -import java.util.ArrayList;
|
|
| 18 | -import java.util.Arrays;
|
|
| 19 | -import java.util.List;
|
|
| 20 | -import java.util.Locale;
|
|
| 21 | -import java.util.stream.Collectors;
|
|
| 22 | - |
|
| 23 | 7 | public class TorSettings {
|
| 24 | 8 | |
| 25 | 9 | public enum BridgeSource {
|
| ... | ... | @@ -76,6 +60,35 @@ public class TorSettings { |
| 76 | 60 | }
|
| 77 | 61 | }
|
| 78 | 62 | |
| 63 | + public enum BridgeBuiltinType {
|
|
| 64 | + /* TorSettings.sys.mjs ~ln43: string: obfs4|meek-azure|snowflake|etc */
|
|
| 65 | + Invalid("invalid"),
|
|
| 66 | + Obfs4("obfs4"),
|
|
| 67 | + MeekAzure("meek-azure"),
|
|
| 68 | + Snowflake("snowflake");
|
|
| 69 | + |
|
| 70 | + |
|
| 71 | + private String type;
|
|
| 72 | + |
|
| 73 | + BridgeBuiltinType(String type) {
|
|
| 74 | + this.type = type;
|
|
| 75 | + }
|
|
| 76 | + |
|
| 77 | + public String toString() {
|
|
| 78 | + return type;
|
|
| 79 | + }
|
|
| 80 | + |
|
| 81 | + public static BridgeBuiltinType fromString(String s) {
|
|
| 82 | + switch (s) {
|
|
| 83 | + case "obfs4": return Obfs4;
|
|
| 84 | + case "meek-azure": return MeekAzure;
|
|
| 85 | + case "snowflake": return Snowflake;
|
|
| 86 | + }
|
|
| 87 | + return Invalid;
|
|
| 88 | + }
|
|
| 89 | + |
|
| 90 | + }
|
|
| 91 | + |
|
| 79 | 92 | private boolean loaded = false;
|
| 80 | 93 | |
| 81 | 94 | public boolean enabled = true;
|
| ... | ... | @@ -85,7 +98,7 @@ public class TorSettings { |
| 85 | 98 | // bridges section
|
| 86 | 99 | public boolean bridgesEnabled = false;
|
| 87 | 100 | public BridgeSource bridgesSource = BridgeSource.Invalid;
|
| 88 | - public String bridgesBuiltinType = "";
|
|
| 101 | + public BridgeBuiltinType bridgesBuiltinType = BridgeBuiltinType.Invalid;
|
|
| 89 | 102 | public String[] bridgeBridgeStrings;
|
| 90 | 103 | |
| 91 | 104 | // proxy section
|
| ... | ... | @@ -112,7 +125,7 @@ public class TorSettings { |
| 112 | 125 | |
| 113 | 126 | bridgesEnabled = bridges.getBoolean("enabled");
|
| 114 | 127 | bridgesSource = BridgeSource.fromInt(bridges.getInt("source"));
|
| 115 | - bridgesBuiltinType = bridges.getString("builtin_type");
|
|
| 128 | + bridgesBuiltinType = BridgeBuiltinType.fromString(bridges.getString("builtin_type"));
|
|
| 116 | 129 | bridgeBridgeStrings = bridges.getStringArray("bridge_strings");
|
| 117 | 130 | |
| 118 | 131 | quickstart = qs.getBoolean("enabled");
|
| ... | ... | @@ -143,7 +156,7 @@ public class TorSettings { |
| 143 | 156 | |
| 144 | 157 | bridges.putBoolean("enabled", bridgesEnabled);
|
| 145 | 158 | bridges.putInt("source", bridgesSource.toInt());
|
| 146 | - bridges.putString("builtin_type", bridgesBuiltinType);
|
|
| 159 | + bridges.putString("builtin_type", bridgesBuiltinType.toString());
|
|
| 147 | 160 | bridges.putStringArray("bridge_strings", bridgeBridgeStrings);
|
| 148 | 161 | |
| 149 | 162 | qs.putBoolean("enabled", quickstart);
|
| 1 | 1 | package org.mozilla.geckoview.androidlegacysettings;
|
| 2 | 2 | |
| 3 | -import java.io.IOException;
|
|
| 4 | - |
|
| 5 | -import android.content.SharedPreferences;
|
|
| 6 | - |
|
| 7 | -import org.mozilla.gecko.GeckoAppShell;
|
|
| 8 | - |
|
| 9 | 3 | import org.mozilla.geckoview.TorSettings;
|
| 10 | 4 | |
| 11 | 5 | public class TorLegacyAndroidSettings {
|
| ... | ... | @@ -54,10 +48,10 @@ public class TorLegacyAndroidSettings { |
| 54 | 48 | switch (userDefinedBridgeList) {
|
| 55 | 49 | case "obfs4":
|
| 56 | 50 | case "snowflake":
|
| 57 | - settings.bridgesBuiltinType = userDefinedBridgeList;
|
|
| 51 | + settings.bridgesBuiltinType = TorSettings.BridgeBuiltinType.fromString(userDefinedBridgeList);
|
|
| 58 | 52 | break;
|
| 59 | 53 | case "meek":
|
| 60 | - settings.bridgesBuiltinType = "meek-azure";
|
|
| 54 | + settings.bridgesBuiltinType = TorSettings.BridgeBuiltinType.MeekAzure;
|
|
| 61 | 55 | break;
|
| 62 | 56 | default:
|
| 63 | 57 | settings.bridgesSource = TorSettings.BridgeSource.Invalid;
|
| ... | ... | @@ -40,7 +40,7 @@ const TorSettingsPrefs = Object.freeze({ |
| 40 | 40 | enabled: "torbrowser.settings.bridges.enabled",
|
| 41 | 41 | /* int: See TorBridgeSource */
|
| 42 | 42 | source: "torbrowser.settings.bridges.source",
|
| 43 | - /* string: obfs4|meek_azure|snowflake|etc */
|
|
| 43 | + /* string: obfs4|meek-azure|snowflake|etc */
|
|
| 44 | 44 | builtin_type: "torbrowser.settings.bridges.builtin_type",
|
| 45 | 45 | /* preference branch: each child branch should be a bridge string */
|
| 46 | 46 | bridge_strings: "torbrowser.settings.bridges.bridge_strings",
|