richard pushed to branch tor-browser-115.7.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
bb028644
by Pier Angelo Vendrame at 2024-01-26T11:31:15+01:00
-
a48e4389
by Pier Angelo Vendrame at 2024-01-26T11:35:10+01:00
4 changed files:
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java
- toolkit/modules/TorAndroidIntegration.sys.mjs
- toolkit/modules/TorConnect.sys.mjs
- toolkit/modules/TorSettings.sys.mjs
Changes:
... | ... | @@ -47,6 +47,8 @@ public class TorIntegrationAndroid implements BundleEventListener { |
47 | 47 | private static final String EVENT_BOOTSTRAP_COMPLETE = "GeckoView:Tor:BootstrapComplete";
|
48 | 48 | private static final String EVENT_BOOTSTRAP_ERROR = "GeckoView:Tor:BootstrapError";
|
49 | 49 | private static final String EVENT_SETTINGS_OPEN = "GeckoView:Tor:OpenSettings";
|
50 | + private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady";
|
|
51 | + private static final String EVENT_SETTINGS_CHANGED = "GeckoView:Tor:SettingsChanged";
|
|
50 | 52 | |
51 | 53 | // Events we emit
|
52 | 54 | private static final String EVENT_SETTINGS_GET = "GeckoView:Tor:SettingsGet";
|
... | ... | @@ -57,7 +59,6 @@ public class TorIntegrationAndroid implements BundleEventListener { |
57 | 59 | private static final String EVENT_BOOTSTRAP_BEGIN_AUTO = "GeckoView:Tor:BootstrapBeginAuto";
|
58 | 60 | private static final String EVENT_BOOTSTRAP_CANCEL = "GeckoView:Tor:BootstrapCancel";
|
59 | 61 | private static final String EVENT_BOOTSTRAP_GET_STATE = "GeckoView:Tor:BootstrapGetState";
|
60 | - private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady";
|
|
61 | 62 | |
62 | 63 | private static final String CONTROL_PORT_FILE = "/control-ipc";
|
63 | 64 | private static final String SOCKS_FILE = "/socks-ipc";
|
... | ... | @@ -112,6 +113,7 @@ public class TorIntegrationAndroid implements BundleEventListener { |
112 | 113 | EVENT_MEEK_START,
|
113 | 114 | EVENT_MEEK_STOP,
|
114 | 115 | EVENT_SETTINGS_READY,
|
116 | + EVENT_SETTINGS_CHANGED,
|
|
115 | 117 | EVENT_BOOTSTRAP_STATE_CHANGED,
|
116 | 118 | EVENT_BOOTSTRAP_PROGRESS,
|
117 | 119 | EVENT_BOOTSTRAP_COMPLETE,
|
... | ... | @@ -136,6 +138,14 @@ public class TorIntegrationAndroid implements BundleEventListener { |
136 | 138 | } catch(Exception e) {
|
137 | 139 | Log.e(TAG, "SettingsLoader error: "+ e.toString());
|
138 | 140 | }
|
141 | + } else if (EVENT_SETTINGS_CHANGED.equals(event)) {
|
|
142 | + GeckoBundle newSettings = message.getBundle("settings");
|
|
143 | + if (newSettings != null) {
|
|
144 | + // TODO: Should we notify listeners?
|
|
145 | + mSettings = new TorSettings(newSettings);
|
|
146 | + } else {
|
|
147 | + Log.w(TAG, "Ignoring a settings changed event that did not have the new settings.");
|
|
148 | + }
|
|
139 | 149 | } else if (EVENT_BOOTSTRAP_STATE_CHANGED.equals(event)) {
|
140 | 150 | String state = message.getString("state");
|
141 | 151 | for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
... | ... | @@ -124,6 +124,15 @@ class TorAndroidIntegrationImpl { |
124 | 124 | settings: lazy.TorSettings.getSettings(),
|
125 | 125 | });
|
126 | 126 | break;
|
127 | + case lazy.TorSettingsTopics.SettingsChanged:
|
|
128 | + // For Android we push also the settings object to avoid a round trip on
|
|
129 | + // the event dispatcher.
|
|
130 | + lazy.EventDispatcher.instance.sendRequest({
|
|
131 | + type: EmittedEvents.settingsChanged,
|
|
132 | + changes: subj.wrappedJSObject.changes ?? [],
|
|
133 | + settings: lazy.TorSettings.getSettings(),
|
|
134 | + });
|
|
135 | + break;
|
|
127 | 136 | }
|
128 | 137 | }
|
129 | 138 |
... | ... | @@ -878,10 +878,11 @@ export const TorConnect = (() => { |
878 | 878 | console.log(`TorConnect: Observing topic '${addTopic}'`);
|
879 | 879 | };
|
880 | 880 | |
881 | + TorSettings.initializedPromise.then(() => this._settingsInitialized());
|
|
882 | + |
|
881 | 883 | // register the Tor topics we always care about
|
882 | 884 | observeTopic(TorTopics.ProcessExited);
|
883 | 885 | observeTopic(TorTopics.LogHasWarnOrErr);
|
884 | - observeTopic(TorSettingsTopics.Ready);
|
|
885 | 886 | }
|
886 | 887 | },
|
887 | 888 | |
... | ... | @@ -889,29 +890,6 @@ export const TorConnect = (() => { |
889 | 890 | console.log(`TorConnect: Observed ${topic}`);
|
890 | 891 | |
891 | 892 | switch (topic) {
|
892 | - /* We need to wait until TorSettings have been loaded and applied before we can Quickstart */
|
|
893 | - case TorSettingsTopics.Ready: {
|
|
894 | - // tor-browser#41907: This is only a workaround to avoid users being
|
|
895 | - // bounced back to the initial panel without any explanation.
|
|
896 | - // Longer term we should disable the clickable elements, or find a UX
|
|
897 | - // to prevent this from happening (e.g., allow buttons to be clicked,
|
|
898 | - // but show an intermediate starting state, or a message that tor is
|
|
899 | - // starting while the butons are disabled, etc...).
|
|
900 | - if (this.state !== TorConnectState.Initial) {
|
|
901 | - console.warn(
|
|
902 | - "TorConnect: Seen the torsettings:ready after the state has already changed, ignoring the notification."
|
|
903 | - );
|
|
904 | - break;
|
|
905 | - }
|
|
906 | - if (this.shouldQuickStart) {
|
|
907 | - // Quickstart
|
|
908 | - this._changeState(TorConnectState.Bootstrapping);
|
|
909 | - } else {
|
|
910 | - // Configuring
|
|
911 | - this._changeState(TorConnectState.Configuring);
|
|
912 | - }
|
|
913 | - break;
|
|
914 | - }
|
|
915 | 893 | case TorTopics.LogHasWarnOrErr: {
|
916 | 894 | this._logHasWarningOrError = true;
|
917 | 895 | break;
|
... | ... | @@ -941,6 +919,28 @@ export const TorConnect = (() => { |
941 | 919 | }
|
942 | 920 | },
|
943 | 921 | |
922 | + _settingsInitialized() {
|
|
923 | + // tor-browser#41907: This is only a workaround to avoid users being
|
|
924 | + // bounced back to the initial panel without any explanation.
|
|
925 | + // Longer term we should disable the clickable elements, or find a UX
|
|
926 | + // to prevent this from happening (e.g., allow buttons to be clicked,
|
|
927 | + // but show an intermediate starting state, or a message that tor is
|
|
928 | + // starting while the butons are disabled, etc...).
|
|
929 | + if (this.state !== TorConnectState.Initial) {
|
|
930 | + console.warn(
|
|
931 | + "TorConnect: Seen the torsettings:ready after the state has already changed, ignoring the notification."
|
|
932 | + );
|
|
933 | + return;
|
|
934 | + }
|
|
935 | + if (this.shouldQuickStart) {
|
|
936 | + // Quickstart
|
|
937 | + this._changeState(TorConnectState.Bootstrapping);
|
|
938 | + } else {
|
|
939 | + // Configuring
|
|
940 | + this._changeState(TorConnectState.Configuring);
|
|
941 | + }
|
|
942 | + },
|
|
943 | + |
|
944 | 944 | /*
|
945 | 945 | Various getters
|
946 | 946 | */
|
... | ... | @@ -992,6 +992,10 @@ class TorSettingsImpl { |
992 | 992 | // Hold off on lots of notifications until all settings are changed.
|
993 | 993 | this.freezeNotifications();
|
994 | 994 | try {
|
995 | + if ("quickstart" in settings) {
|
|
996 | + this.quickstart.enabled = !!settings.quickstart.enabled;
|
|
997 | + }
|
|
998 | + |
|
995 | 999 | if ("bridges" in settings) {
|
996 | 1000 | this.bridges.enabled = !!settings.bridges.enabled;
|
997 | 1001 | // Currently, disabling bridges in the UI does not remove the lines,
|