Pier Angelo Vendrame pushed to branch tor-browser-115.9.0esr-13.5-1 at The Tor Project / Applications / Tor Browser
Commits:
-
9e01b1a9
by Dan Ballard at 2024-03-26T11:33:26-07:00
4 changed files:
- mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorIntegrationAndroid.java
- toolkit/components/tor-launcher/TorProvider.sys.mjs
- toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs
- toolkit/modules/TorAndroidIntegration.sys.mjs
Changes:
... | ... | @@ -46,6 +46,7 @@ public class TorIntegrationAndroid implements BundleEventListener { |
46 | 46 | private static final String EVENT_BOOTSTRAP_PROGRESS = "GeckoView:Tor:BootstrapProgress";
|
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 | + private static final String EVENT_TOR_LOGS = "GeckoView:Tor:Logs";
|
|
49 | 50 | private static final String EVENT_SETTINGS_READY = "GeckoView:Tor:SettingsReady";
|
50 | 51 | private static final String EVENT_SETTINGS_CHANGED = "GeckoView:Tor:SettingsChanged";
|
51 | 52 | private static final String EVENT_SETTINGS_OPEN = "GeckoView:Tor:OpenSettings";
|
... | ... | @@ -118,6 +119,7 @@ public class TorIntegrationAndroid implements BundleEventListener { |
118 | 119 | EVENT_BOOTSTRAP_PROGRESS,
|
119 | 120 | EVENT_BOOTSTRAP_COMPLETE,
|
120 | 121 | EVENT_BOOTSTRAP_ERROR,
|
122 | + EVENT_TOR_LOGS,
|
|
121 | 123 | EVENT_SETTINGS_OPEN);
|
122 | 124 | }
|
123 | 125 | |
... | ... | @@ -168,6 +170,12 @@ public class TorIntegrationAndroid implements BundleEventListener { |
168 | 170 | for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
169 | 171 | listener.onBootstrapError(msg, details);
|
170 | 172 | }
|
173 | + } else if (EVENT_TOR_LOGS.equals(event)) {
|
|
174 | + String msg = message.getString("message");
|
|
175 | + String type = message.getString("logType");
|
|
176 | + for (TorLogListener listener: mLogListeners) {
|
|
177 | + listener.onLog(type, msg);
|
|
178 | + }
|
|
171 | 179 | } else if (EVENT_SETTINGS_OPEN.equals(event)) {
|
172 | 180 | for (BootstrapStateChangeListener listener: mBootstrapStateListeners) {
|
173 | 181 | listener.onSettingsRequested();
|
... | ... | @@ -573,6 +581,10 @@ public class TorIntegrationAndroid implements BundleEventListener { |
573 | 581 | void onSettingsRequested();
|
574 | 582 | }
|
575 | 583 | |
584 | + public interface TorLogListener {
|
|
585 | + void onLog(String logType, String message);
|
|
586 | + }
|
|
587 | + |
|
576 | 588 | private @NonNull void reloadSettings() {
|
577 | 589 | EventDispatcher.getInstance().queryBundle(EVENT_SETTINGS_GET).then( new GeckoResult.OnValueListener<GeckoBundle, Void>() {
|
578 | 590 | public GeckoResult<Void> onValue(final GeckoBundle bundle) {
|
... | ... | @@ -647,4 +659,14 @@ public class TorIntegrationAndroid implements BundleEventListener { |
647 | 659 | }
|
648 | 660 | |
649 | 661 | private final HashSet<BootstrapStateChangeListener> mBootstrapStateListeners = new HashSet<>();
|
662 | + |
|
663 | + public void registerLogListener(TorLogListener listener) {
|
|
664 | + mLogListeners.add(listener);
|
|
665 | + }
|
|
666 | + |
|
667 | + public void unregisterLogListener(TorLogListener listener) {
|
|
668 | + mLogListeners.remove(listener);
|
|
669 | + }
|
|
670 | + |
|
671 | + private final HashSet<TorLogListener> mLogListeners = new HashSet<>();
|
|
650 | 672 | } |
... | ... | @@ -1002,6 +1002,8 @@ export class TorProvider { |
1002 | 1002 | Services.obs.notifyObservers(null, TorProviderTopics.HasWarnOrErr);
|
1003 | 1003 | }
|
1004 | 1004 | |
1005 | + Services.obs.notifyObservers({ type, msg }, TorProviderTopics.TorLog);
|
|
1006 | + |
|
1005 | 1007 | const date = new Date();
|
1006 | 1008 | const maxEntries = Services.prefs.getIntPref(
|
1007 | 1009 | Preferences.MaxLogEntries,
|
... | ... | @@ -12,6 +12,7 @@ export const TorProviderTopics = Object.freeze({ |
12 | 12 | ProcessExited: "TorProcessExited",
|
13 | 13 | BootstrapStatus: "TorBootstrapStatus",
|
14 | 14 | BootstrapError: "TorBootstrapError",
|
15 | + TorLog: "TorLog",
|
|
15 | 16 | HasWarnOrErr: "TorLogHasWarnOrErr",
|
16 | 17 | BridgeChanged: "TorBridgeChanged",
|
17 | 18 | CircuitCredentialsMatched: "TorCircuitCredentialsMatched",
|
... | ... | @@ -11,6 +11,7 @@ ChromeUtils.defineESModuleGetters(lazy, { |
11 | 11 | TorConnectTopics: "resource://gre/modules/TorConnect.sys.mjs",
|
12 | 12 | TorSettingsTopics: "resource://gre/modules/TorSettings.sys.mjs",
|
13 | 13 | TorProviderBuilder: "resource://gre/modules/TorProviderBuilder.sys.mjs",
|
14 | + TorProviderTopics: "resource://gre/modules/TorProviderBuilder.sys.mjs",
|
|
14 | 15 | TorSettings: "resource://gre/modules/TorSettings.sys.mjs",
|
15 | 16 | });
|
16 | 17 | |
... | ... | @@ -32,6 +33,7 @@ const EmittedEvents = Object.freeze({ |
32 | 33 | bootstrapProgress: "GeckoView:Tor:BootstrapProgress",
|
33 | 34 | bootstrapComplete: "GeckoView:Tor:BootstrapComplete",
|
34 | 35 | bootstrapError: "GeckoView:Tor:BootstrapError",
|
36 | + torLogs: "GeckoView:Tor:Logs",
|
|
35 | 37 | });
|
36 | 38 | |
37 | 39 | const ListenedEvents = Object.freeze({
|
... | ... | @@ -59,6 +61,8 @@ class TorAndroidIntegrationImpl { |
59 | 61 | this.#bootstrapMethodReset();
|
60 | 62 | Services.prefs.addObserver(Prefs.useNewBootstrap, this);
|
61 | 63 | |
64 | + Services.obs.addObserver(this, lazy.TorProviderTopics.TorLog);
|
|
65 | + |
|
62 | 66 | for (const topic in lazy.TorConnectTopics) {
|
63 | 67 | Services.obs.addObserver(this, lazy.TorConnectTopics[topic]);
|
64 | 68 | }
|
... | ... | @@ -118,6 +122,13 @@ class TorAndroidIntegrationImpl { |
118 | 122 | details: subj.wrappedJSObject.details ?? "",
|
119 | 123 | });
|
120 | 124 | break;
|
125 | + case lazy.TorProviderTopics.TorLog:
|
|
126 | + lazy.EventDispatcher.instance.sendRequest({
|
|
127 | + type: EmittedEvents.torLogs,
|
|
128 | + logType: subj.wrappedJSObject.type ?? "",
|
|
129 | + message: subj.wrappedJSObject.msg ?? "",
|
|
130 | + });
|
|
131 | + break;
|
|
121 | 132 | case lazy.TorSettingsTopics.Ready:
|
122 | 133 | lazy.EventDispatcher.instance.sendRequest({
|
123 | 134 | type: EmittedEvents.settingsReady,
|