Verified Commit 147a87b1 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 f07cf27e
Loading
Loading
Loading
Loading
+11 −2
Changes for mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java: 11 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -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);

+14 −0
Changes for mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorBootstrappingStatus.java: 14 added lines, 0 removed lines.
Original line number Diff line number Diff line
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");
    }
}
+48 −0
Changes for mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStage.java: 48 added lines, 0 removed lines.
Original line number Diff line number Diff line
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();
    }
}
+43 −0
Changes for mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorConnectStageName.java: 43 added lines, 0 removed lines.
Original line number Diff line number Diff line
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;
    }
}
+8 −1
Changes for toolkit/modules/TorAndroidIntegration.sys.mjs: 8 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -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,