Loading toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs +6 −0 Original line number Diff line number Diff line Loading @@ -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", }); Loading Loading @@ -74,6 +76,7 @@ export class TorBootstrapError extends Error { } export const TorProviders = Object.freeze({ mock: "mock", none: "none", tor: "tor", }); Loading Loading @@ -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; Loading toolkit/components/tor-launcher/TorProviderMock.sys.mjs 0 → 100644 +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; } } toolkit/components/tor-launcher/moz.build +1 −0 Original line number Diff line number Diff line Loading @@ -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", ] Loading Loading
toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs +6 −0 Original line number Diff line number Diff line Loading @@ -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", }); Loading Loading @@ -74,6 +76,7 @@ export class TorBootstrapError extends Error { } export const TorProviders = Object.freeze({ mock: "mock", none: "none", tor: "tor", }); Loading Loading @@ -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; Loading
toolkit/components/tor-launcher/TorProviderMock.sys.mjs 0 → 100644 +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; } }
toolkit/components/tor-launcher/moz.build +1 −0 Original line number Diff line number Diff line Loading @@ -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", ] Loading