Pier Angelo Vendrame pushed to branch tor-browser-115.6.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
8649662e
by Pier Angelo Vendrame at 2023-12-20T19:16:35+01:00
-
7cb6472f
by Pier Angelo Vendrame at 2023-12-20T21:49:35+01:00
-
d980086a
by Pier Angelo Vendrame at 2023-12-20T21:49:46+01:00
4 changed files:
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java
- toolkit/components/tor-launcher/TorProvider.sys.mjs
- toolkit/modules/TorAndroidIntegration.sys.mjs
- toolkit/modules/TorConnect.sys.mjs
Changes:
... | ... | @@ -46,6 +46,11 @@ public class TorIntegrationAndroid implements BundleEventListener { |
46 | 46 | private static final String EVENT_TOR_STOP = "GeckoView:Tor:StopTor";
|
47 | 47 | private static final String EVENT_MEEK_START = "GeckoView:Tor:StartMeek";
|
48 | 48 | private static final String EVENT_MEEK_STOP = "GeckoView:Tor:StopMeek";
|
49 | + private static final String EVENT_BOOTSTRAP_STATE_CHANGED = "GeckoView:Tor:BootstrapStateChanged";
|
|
50 | + private static final String EVENT_BOOTSTRAP_PROGRESS = "GeckoView:Tor:BootstrapProgress";
|
|
51 | + private static final String EVENT_BOOTSTRAP_COMPLETE = "GeckoView:Tor:BootstrapComplete";
|
|
52 | + private static final String EVENT_BOOTSTRAP_ERROR = "GeckoView:Tor:BootstrapError";
|
|
53 | + private static final String EVENT_SETTINGS_OPEN = "GeckoView:Tor:OpenSettings";
|
|
49 | 54 | |
50 | 55 | // Events we emit
|
51 | 56 | private static final String EVENT_SETTINGS_GET = "GeckoView:Tor:SettingsGet";
|
... | ... | @@ -106,7 +111,12 @@ public class TorIntegrationAndroid implements BundleEventListener { |
106 | 111 | EVENT_TOR_START,
|
107 | 112 | EVENT_MEEK_START,
|
108 | 113 | EVENT_MEEK_STOP,
|
109 | - EVENT_SETTINGS_READY);
|
|
114 | + EVENT_SETTINGS_READY,
|
|
115 | + EVENT_BOOTSTRAP_STATE_CHANGED,
|
|
116 | + EVENT_BOOTSTRAP_PROGRESS,
|
|
117 | + EVENT_BOOTSTRAP_COMPLETE,
|
|
118 | + EVENT_BOOTSTRAP_ERROR,
|
|
119 | + EVENT_SETTINGS_OPEN);
|
|
110 | 120 | }
|
111 | 121 | |
112 | 122 | @Override // BundleEventListener
|
... | ... | @@ -122,6 +132,32 @@ public class TorIntegrationAndroid implements BundleEventListener { |
122 | 132 | stopMeek(message, callback);
|
123 | 133 | } else if (EVENT_SETTINGS_READY.equals(event)) {
|
124 | 134 | loadSettings(message);
|
135 | + } else if (EVENT_BOOTSTRAP_STATE_CHANGED.equals(event)) {
|
|
136 | + String state = message.getString("state");
|
|
137 | + for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
|
138 | + listener.onBootstrapStateChange(state);
|
|
139 | + }
|
|
140 | + } else if (EVENT_BOOTSTRAP_PROGRESS.equals(event)) {
|
|
141 | + double progress = message.getDouble("progress");
|
|
142 | + String status = message.getString("status");
|
|
143 | + boolean hasWarnings = message.getBoolean("hasWarnings");
|
|
144 | + for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
|
145 | + listener.onBootstrapProgress(progress, status, hasWarnings);
|
|
146 | + }
|
|
147 | + } else if (EVENT_BOOTSTRAP_COMPLETE.equals(event)) {
|
|
148 | + for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
|
149 | + listener.onBootstrapComplete();
|
|
150 | + }
|
|
151 | + } else if (EVENT_BOOTSTRAP_ERROR.equals(event)) {
|
|
152 | + String msg = message.getString("message");
|
|
153 | + String details = message.getString("details");
|
|
154 | + for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
|
155 | + listener.onBootstrapError(msg, details);
|
|
156 | + }
|
|
157 | + } else if (EVENT_SETTINGS_OPEN.equals(event)) {
|
|
158 | + for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
|
159 | + listener.onSettingsRequested();
|
|
160 | + }
|
|
125 | 161 | }
|
126 | 162 | }
|
127 | 163 | |
... | ... | @@ -467,17 +503,12 @@ public class TorIntegrationAndroid implements BundleEventListener { |
467 | 503 | }
|
468 | 504 | }
|
469 | 505 | |
470 | - public static class BootstrapState {
|
|
471 | - // FIXME: We can do better than this :)
|
|
472 | - public GeckoBundle mBundle;
|
|
473 | - |
|
474 | - BootstrapState(GeckoBundle bundle) {
|
|
475 | - mBundle = bundle;
|
|
476 | - }
|
|
477 | - }
|
|
478 | - |
|
479 | 506 | public interface BootstrapStateChangeListener {
|
480 | - void onBootstrapStateChange(BootstrapState state);
|
|
507 | + void onBootstrapStateChange(String state);
|
|
508 | + void onBootstrapProgress(double progress, String status, boolean hasWarnings);
|
|
509 | + void onBootstrapComplete();
|
|
510 | + void onBootstrapError(String message, String details);
|
|
511 | + void onSettingsRequested();
|
|
481 | 512 | }
|
482 | 513 | |
483 | 514 | public @NonNull GeckoResult<GeckoBundle> getSettings() {
|
... | ... | @@ -514,16 +545,6 @@ public class TorIntegrationAndroid implements BundleEventListener { |
514 | 545 | return EventDispatcher.getInstance().queryVoid(EVENT_BOOTSTRAP_CANCEL);
|
515 | 546 | }
|
516 | 547 | |
517 | - public @NonNull GeckoResult<BootstrapState> getBootstrapState() {
|
|
518 | - return EventDispatcher.getInstance().queryBundle(EVENT_BOOTSTRAP_GET_STATE).map(new GeckoResult.OnValueMapper<>() {
|
|
519 | - @AnyThread
|
|
520 | - @Nullable
|
|
521 | - public BootstrapState onValue(@Nullable GeckoBundle value) throws Throwable {
|
|
522 | - return new BootstrapState(value);
|
|
523 | - }
|
|
524 | - });
|
|
525 | - }
|
|
526 | - |
|
527 | 548 | public void registerBootstrapStateChangeListener(BootstrapStateChangeListener listener) {
|
528 | 549 | mBootstrapStateListeners.add(listener);
|
529 | 550 | }
|
... | ... | @@ -875,10 +875,7 @@ export class TorProvider { |
875 | 875 | */
|
876 | 876 | #processBootstrapStatus(statusObj, isNotification) {
|
877 | 877 | // Notify observers
|
878 | - Services.obs.notifyObservers(
|
|
879 | - { wrappedJSObject: statusObj },
|
|
880 | - TorProviderTopics.BootstrapStatus
|
|
881 | - );
|
|
878 | + Services.obs.notifyObservers(statusObj, TorProviderTopics.BootstrapStatus);
|
|
882 | 879 | |
883 | 880 | if (statusObj.PROGRESS === 100) {
|
884 | 881 | this.#isBootstrapDone = true;
|
... | ... | @@ -25,9 +25,13 @@ const logger = new ConsoleAPI({ |
25 | 25 | prefix: "TorAndroidIntegration",
|
26 | 26 | });
|
27 | 27 | |
28 | -const EmittedEvents = Object.freeze( {
|
|
28 | +const EmittedEvents = Object.freeze({
|
|
29 | 29 | settingsReady: "GeckoView:Tor:SettingsReady",
|
30 | 30 | settingsChanged: "GeckoView:Tor:SettingsChanged",
|
31 | + bootstrapStateChanged: "GeckoView:Tor:BootstrapStateChanged",
|
|
32 | + bootstrapProgress: "GeckoView:Tor:BootstrapProgress",
|
|
33 | + bootstrapComplete: "GeckoView:Tor:BootstrapComplete",
|
|
34 | + bootstrapError: "GeckoView:Tor:BootstrapError",
|
|
31 | 35 | });
|
32 | 36 | |
33 | 37 | const ListenedEvents = Object.freeze({
|
... | ... | @@ -89,6 +93,30 @@ class TorAndroidIntegrationImpl { |
89 | 93 | }
|
90 | 94 | break;
|
91 | 95 | case lazy.TorConnectTopics.StateChange:
|
96 | + lazy.EventDispatcher.instance.sendRequest({
|
|
97 | + type: EmittedEvents.bootstrapStateChanged,
|
|
98 | + state: subj.wrappedJSObject.state ?? "",
|
|
99 | + });
|
|
100 | + break;
|
|
101 | + case lazy.TorConnectTopics.BootstrapProgress:
|
|
102 | + lazy.EventDispatcher.instance.sendRequest({
|
|
103 | + type: EmittedEvents.bootstrapProgress,
|
|
104 | + progress: subj.wrappedJSObject.progress ?? "",
|
|
105 | + status: subj.wrappedJSObject.status ?? 0,
|
|
106 | + hasWarnings: subj.wrappedJSObject.hasWarnings ?? false,
|
|
107 | + });
|
|
108 | + break;
|
|
109 | + case lazy.TorConnectTopics.BootstrapComplete:
|
|
110 | + lazy.EventDispatcher.instance.sendRequest({
|
|
111 | + type: EmittedEvents.bootstrapComplete,
|
|
112 | + });
|
|
113 | + break;
|
|
114 | + case lazy.TorConnectTopics.BootstrapError:
|
|
115 | + lazy.EventDispatcher.instance.sendRequest({
|
|
116 | + type: EmittedEvents.bootstrapError,
|
|
117 | + message: subj.wrappedJSObject.message ?? "",
|
|
118 | + details: subj.wrappedJSObject.details ?? "",
|
|
119 | + });
|
|
92 | 120 | break;
|
93 | 121 | case lazy.TorSettingsTopics.Ready:
|
94 | 122 | lazy.EventDispatcher.instance.sendRequest({
|
... | ... | @@ -7,6 +7,7 @@ import { setTimeout, clearTimeout } from "resource://gre/modules/Timer.sys.mjs"; |
7 | 7 | const lazy = {};
|
8 | 8 | |
9 | 9 | ChromeUtils.defineESModuleGetters(lazy, {
|
10 | + EventDispatcher: "resource://gre/modules/Messaging.sys.mjs",
|
|
10 | 11 | MoatRPC: "resource://gre/modules/Moat.sys.mjs",
|
11 | 12 | TorBootstrapRequest: "resource://gre/modules/TorBootstrapRequest.sys.mjs",
|
12 | 13 | });
|
... | ... | @@ -1092,6 +1093,12 @@ export const TorConnect = (() => { |
1092 | 1093 | Further external commands and helper methods
|
1093 | 1094 | */
|
1094 | 1095 | openTorPreferences() {
|
1096 | + if (TorLauncherUtil.isAndroid) {
|
|
1097 | + lazy.EventDispatcher.instance.sendRequest({
|
|
1098 | + type: "GeckoView:Tor:OpenSettings",
|
|
1099 | + });
|
|
1100 | + return;
|
|
1101 | + }
|
|
1095 | 1102 | const win = lazy.BrowserWindowTracker.getTopWindow();
|
1096 | 1103 | win.switchToTabHavingURI("about:preferences#connection", true);
|
1097 | 1104 | },
|