Commit 5c7beb9d authored by brizental's avatar brizental Committed by Pier Angelo Vendrame
Browse files

fixup! TB 40933: Add tor-launcher functionality

Bug 44212: Implement a mock tor provider, for tests
parent 97658395
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
  TorLauncherUtil:
    "moz-src:///toolkit/components/tor-launcher/TorLauncherUtil.sys.mjs",
  TorProvider: "moz-src:///toolkit/components/tor-launcher/TorProvider.sys.mjs",
  TorProviderMock:
    "moz-src:///toolkit/components/tor-launcher/TorProviderMock.sys.mjs",
  TorProviderNone:
    "moz-src:///toolkit/components/tor-launcher/TorProviderNone.sys.mjs",
});
@@ -74,6 +76,7 @@ export class TorBootstrapError extends Error {
}

export const TorProviders = Object.freeze({
  mock: "mock",
  none: "none",
  tor: "tor",
});
@@ -218,6 +221,9 @@ export class TorProviderBuilder {

    let providerClass;
    switch (this.providerType) {
      case TorProviders.mock:
        providerClass = lazy.TorProviderMock;
        break;
      case TorProviders.tor:
        providerClass = lazy.TorProvider;
        break;
+93 −0
Original line number Diff line number Diff line
import { setTimeout, clearTimeout } from "resource://gre/modules/Timer.sys.mjs";
import { TorProviderBase } from "moz-src:///toolkit/components/tor-launcher/TorProviderBase.sys.mjs";
import { TorProviderTopics } from "moz-src:///toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs";

const kBootstrapSteps = [
  { PROGRESS: 5, TAG: "starting", SUMMARY: "Starting" },
  { PROGRESS: 14, TAG: "handshake", SUMMARY: "Handshaking with a relay" },
  {
    PROGRESS: 45,
    TAG: "requesting_descriptors",
    SUMMARY: "Asking for relay descriptors",
  },
  {
    PROGRESS: 75,
    TAG: "loading_descriptors",
    SUMMARY: "Loading relay descriptors",
  },
  { PROGRESS: 100, TAG: "done", SUMMARY: "Done" },
];

const kBootstrapStepDelayMs = 500;

/**
 * A mock tor provider for testing purposes. Fakes all provider operations
 * without starting a real Tor daemon. This implementation is intentionally
 * minimal and will be extended as test requirements become clearer.
 */
export class TorProviderMock extends TorProviderBase {
  #bootstrapTimeoutIds = [];

  async _initInternal() {}

  async _uninitInternal() {
    this.#cancelBootstrap();
  }

  async writeBridgeSettings(_bridges) {}

  async writeProxySettings(_proxy) {}

  async writeFirewallSettings(_firewall) {}

  async flushSettings() {}

  async connect() {
    this.#cancelBootstrap();
    for (const [i, step] of kBootstrapSteps.entries()) {
      const id = setTimeout(
        () => {
          Services.obs.notifyObservers(
            { ...step, TYPE: "NOTICE" },
            TorProviderTopics.BootstrapStatus
          );
        },
        (i + 1) * kBootstrapStepDelayMs
      );
      this.#bootstrapTimeoutIds.push(id);
    }
  }

  async stopBootstrap() {
    this.#cancelBootstrap();
  }

  #cancelBootstrap() {
    for (const id of this.#bootstrapTimeoutIds) {
      clearTimeout(id);
    }
    this.#bootstrapTimeoutIds = [];
  }

  async newnym() {}

  async getBridges() {
    return [];
  }

  async getPluggableTransports() {
    return [];
  }

  async onionAuthAdd(_address, _b64PrivateKey, _isPermanent) {}

  async onionAuthRemove(_address) {}

  async onionAuthViewKeys() {
    return [];
  }

  get currentBridge() {
    return null;
  }
}
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ MOZ_SRC_FILES += [
    "TorProvider.sys.mjs",
    "TorProviderBase.sys.mjs",
    "TorProviderBuilder.sys.mjs",
    "TorProviderMock.sys.mjs",
    "TorProviderNone.sys.mjs",
    "TorStartupService.sys.mjs",
]