Skip to content
Snippets Groups Projects
Commit ec26bc8b authored by Dan Ballard's avatar Dan Ballard Committed by Pier Angelo Vendrame
Browse files

fixup! TB 42247: Android helpers for the TorProvider

Bug 41188: Add staging event wiring
parent f809bdd6
Branches
Tags
1 merge request!1500TB 43415: Rebased onto 134.0a1
......@@ -37,7 +37,8 @@ public class TorAndroidIntegration implements BundleEventListener {
private static final String EVENT_TOR_STOP = "GeckoView:Tor:StopTor";
private static final String EVENT_MEEK_START = "GeckoView:Tor:StartMeek";
private static final String EVENT_MEEK_STOP = "GeckoView:Tor:StopMeek";
private static final String EVENT_CONNECT_STATE_CHANGED = "GeckoView:Tor:ConnectStateChanged";
private static final String EVENT_CONNECT_STATE_CHANGED = "GeckoView:Tor:ConnectStateChanged"; // deprecation path
private static final String EVENT_CONNECT_STAGE_CHANGED = "GeckoView:Tor:ConnectStageChanged"; // replacement path
private static final String EVENT_CONNECT_ERROR = "GeckoView:Tor:ConnectError";
private static final String EVENT_BOOTSTRAP_PROGRESS = "GeckoView:Tor:BootstrapProgress";
private static final String EVENT_BOOTSTRAP_COMPLETE = "GeckoView:Tor:BootstrapComplete";
......@@ -114,6 +115,7 @@ public class TorAndroidIntegration implements BundleEventListener {
EVENT_SETTINGS_READY,
EVENT_SETTINGS_CHANGED,
EVENT_CONNECT_STATE_CHANGED,
EVENT_CONNECT_STAGE_CHANGED,
EVENT_CONNECT_ERROR,
EVENT_BOOTSTRAP_PROGRESS,
EVENT_BOOTSTRAP_COMPLETE,
......@@ -150,6 +152,11 @@ public class TorAndroidIntegration implements BundleEventListener {
for (BootstrapStateChangeListener listener : mBootstrapStateListeners) {
listener.onBootstrapStateChange(state);
}
} else if (EVENT_CONNECT_STAGE_CHANGED.equals(event)) {
TorConnectStage stage = new TorConnectStage(message.getBundle("stage"));
for (BootstrapStateChangeListener listener : mBootstrapStateListeners) {
listener.onBootstrapStageChange(stage);
}
} else if (EVENT_CONNECT_ERROR.equals(event)) {
String code = message.getString("code");
String msg = message.getString("message");
......@@ -629,7 +636,9 @@ public class TorAndroidIntegration implements BundleEventListener {
}
public interface BootstrapStateChangeListener {
void onBootstrapStateChange(String state);
void onBootstrapStateChange(String state); // depreaction path
void onBootstrapStageChange(TorConnectStage stage); // new upgrade
void onBootstrapProgress(double progress, boolean hasWarnings);
......
package org.mozilla.geckoview;
import org.mozilla.gecko.util.GeckoBundle;
// Class to receive BootstrappingStatus object from TorConnect.sys.mjs ~ln698
public class TorBootstrappingStatus {
public int progress; // percent of bootstrap progress
public boolean hasWarning; // Whether this bootstrap has a warning in the tor log
public TorBootstrappingStatus(GeckoBundle bundle) {
progress = bundle.getInt("progress");
hasWarning = bundle.getBoolean("hasWarning");
}
}
package org.mozilla.geckoview;
import org.mozilla.gecko.util.GeckoBundle;
// Class to receive ConnectStage object from TorConnect.sys.mjs ~ln677
public class TorConnectStage {
public class Error {
public String code;
public String message;
public String phase;
public String reason;
public Error(GeckoBundle bundle) {
code = bundle.getString("code");
message = bundle.getString("message");
phase = bundle.getString("phase");
reason = bundle.getString("reason");
}
}
public TorConnectStageName name;
// The TorConnectStage prior to this bootstrap attempt. Only set during the "Bootstrapping" stage.
public TorConnectStageName bootstrapTrigger;
public Error error;
public String defaultRegion;
public Boolean potentiallyBlocked;
public Boolean tryAgain;
public TorBootstrappingStatus bootstrappingStatus;
public TorConnectStage(GeckoBundle bundle) {
name = TorConnectStageName.fromString(bundle.getString("name"));
if (bundle.getString("bootstrapTrigger") != null) {
bootstrapTrigger = TorConnectStageName.fromString(bundle.getString("bootstrapTrigger"));
}
defaultRegion = bundle.getString("defaultRegion");
potentiallyBlocked = bundle.getBoolean("potentiallyBlocked");
tryAgain = bundle.getBoolean("tryAgain");
if (bundle.getBundle("error") != null) {
error = new Error(bundle.getBundle("error"));
}
bootstrappingStatus = new TorBootstrappingStatus(bundle.getBundle("bootstrappingStatus"));
}
public Boolean isBootstrapped() {
return name.isBootstrapped();
}
}
package org.mozilla.geckoview;
import java.security.InvalidParameterException;
public enum TorConnectStageName {
// These names should match entries from TorConnectStage in TorConnect.sys.mjs at ~ln163.
Disabled("Disabled"),
Loading("Loading"),
Start("Start"),
Bootstrapping("Bootstrapping"),
Offline("Offline"),
ChooseRegion("ChooseRegion"),
RegionNotFound("RegionNotFound"),
ConfirmRegion("ConfirmRegion"),
FinalError("FinalError"),
Bootstrapped("Bootstrapped");
private String valueText;
TorConnectStageName(String valueText) {
this.valueText = valueText;
}
public Boolean isBootstrapped() {
return this == Bootstrapped;
}
public String getString() {
return this.valueText;
}
public static TorConnectStageName fromString(String text) {
for (TorConnectStageName tcs : TorConnectStageName.values()) {
if (tcs.valueText.equalsIgnoreCase(text)) {
return tcs;
}
}
if (BuildConfig.BUILD_TYPE == "debug") {
throw new InvalidParameterException("Unknown TorConnectStageName " + text);
}
return null;
}
}
......@@ -25,7 +25,8 @@ const logger = console.createInstance({
const EmittedEvents = Object.freeze({
settingsReady: "GeckoView:Tor:SettingsReady",
settingsChanged: "GeckoView:Tor:SettingsChanged",
connectStateChanged: "GeckoView:Tor:ConnectStateChanged",
connectStateChanged: "GeckoView:Tor:ConnectStateChanged", // deprecation path
connectStageChanged: "GeckoView:Tor:ConnectStageChanged", // new replacement path
connectError: "GeckoView:Tor:ConnectError",
bootstrapProgress: "GeckoView:Tor:BootstrapProgress",
bootstrapComplete: "GeckoView:Tor:BootstrapComplete",
......@@ -106,6 +107,12 @@ class TorAndroidIntegrationImpl {
state: subj.wrappedJSObject.state ?? "",
});
break;
case lazy.TorConnectTopics.StageChange:
lazy.EventDispatcher.instance.sendRequest({
type: EmittedEvents.connectStageChanged,
stage: subj.wrappedJSObject ?? "",
});
break;
case lazy.TorConnectTopics.BootstrapProgress:
lazy.EventDispatcher.instance.sendRequest({
type: EmittedEvents.bootstrapProgress,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment