[tbb-commits] [Git][tpo/applications/tor-browser][tor-browser-115.3.1esr-13.0-1] fixup! Bug 40933: Add tor-launcher functionality
Pier Angelo Vendrame (@pierov)
git at gitlab.torproject.org
Wed Oct 11 19:40:24 UTC 2023
Pier Angelo Vendrame pushed to branch tor-browser-115.3.1esr-13.0-1 at The Tor Project / Applications / Tor Browser
Commits:
53eec1f2 by Pier Angelo Vendrame at 2023-10-11T18:25:34+00:00
fixup! Bug 40933: Add tor-launcher functionality
Bug 42160: Allow specifying a TOR_PROVIDER=none to configure only the
proxy settings during the TorProviderBuilder initialization.
- - - - -
2 changed files:
- toolkit/components/tor-launcher/TorLauncherUtil.sys.mjs
- toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs
Changes:
=====================================
toolkit/components/tor-launcher/TorLauncherUtil.sys.mjs
=====================================
@@ -644,6 +644,7 @@ export const TorLauncherUtil = Object.freeze({
try {
const kBrowserToolboxPort = "MOZ_BROWSER_TOOLBOX_PORT";
const kEnvSkipLaunch = "TOR_SKIP_LAUNCH";
+ const kEnvProvider = "TOR_PROVIDER";
if (Services.env.exists(kBrowserToolboxPort)) {
return false;
}
@@ -651,6 +652,12 @@ export const TorLauncherUtil = Object.freeze({
const value = parseInt(Services.env.get(kEnvSkipLaunch));
return isNaN(value) || !value;
}
+ if (
+ Services.env.exists(kEnvProvider) &&
+ Services.env.get(kEnvProvider) === "none"
+ ) {
+ return false;
+ }
} catch (e) {}
return Services.prefs.getBoolPref(kPrefStartTor, true);
},
=====================================
toolkit/components/tor-launcher/TorProviderBuilder.sys.mjs
=====================================
@@ -18,6 +18,11 @@ export const TorProviderTopics = Object.freeze({
StreamSucceeded: "TorStreamSucceeded",
});
+export const TorProviders = Object.freeze({
+ none: 0,
+ tor: 1,
+});
+
/**
* The factory to get a Tor provider.
* Currently we support only TorProvider, i.e., the one that interacts with
@@ -35,9 +40,9 @@ export class TorProviderBuilder {
* The observer that checks when the tor process exits, and reinitializes the
* provider.
*
- * @type {nsIObserver?}
+ * @type {Function}
*/
- static #observer = null;
+ static #exitObserver = null;
/**
* Tell whether the browser UI is ready.
@@ -54,25 +59,30 @@ export class TorProviderBuilder {
* initialization anyway (and re-throw any initialization error).
*/
static async init() {
- this.#observer = {
- observe(subject, topic, data) {
- if (topic !== TorProviderTopics.ProcessExited) {
- return;
- }
- if (!TorProviderBuilder.#uiReady) {
- console.warn(
- `Seen ${TorProviderTopics.ProcessExited}, but not doing anything because the UI is not ready yet.`
- );
- return;
- }
- TorProviderBuilder.#torExited();
- },
- };
- Services.obs.addObserver(this.#observer, TorProviderTopics.ProcessExited);
- await this.#initProvider();
+ switch (this.providerType) {
+ case TorProviders.tor:
+ await this.#initTorProvider();
+ break;
+ case TorProviders.none:
+ lazy.TorLauncherUtil.setProxyConfiguration(
+ lazy.TorLauncherUtil.getPreferredSocksConfiguration()
+ );
+ break;
+ default:
+ console.error(`Unknown tor provider ${this.providerType}.`);
+ break;
+ }
}
- static async #initProvider() {
+ static async #initTorProvider() {
+ if (!this.#exitObserver) {
+ this.#exitObserver = this.#torExited.bind(this);
+ Services.obs.addObserver(
+ this.#exitObserver,
+ TorProviderTopics.ProcessExited
+ );
+ }
+
try {
const old = await this.#provider;
old?.uninit();
@@ -92,12 +102,12 @@ export class TorProviderBuilder {
provider.uninit();
this.#provider = null;
});
- if (this.#observer) {
+ if (this.#exitObserver) {
Services.obs.removeObserver(
- this.#observer,
+ this.#exitObserver,
TorProviderTopics.ProcessExited
);
- this.#observer = null;
+ this.#exitObserver = null;
}
}
@@ -107,7 +117,11 @@ export class TorProviderBuilder {
* catch also any initialization errors.
*/
static async build() {
- if (!this.#provider) {
+ if (!this.#provider && this.providerType === TorProviders.none) {
+ throw new Error(
+ "Tor Browser has been configured to use only the proxy functionalities."
+ );
+ } else if (!this.#provider) {
throw new Error(
"The provider has not been initialized or already uninitialized."
);
@@ -125,7 +139,10 @@ export class TorProviderBuilder {
*/
static async firstWindowLoaded() {
// FIXME: Just integrate this with the about:torconnect or about:tor UI.
- if (!lazy.TorLauncherUtil.shouldStartAndOwnTor) {
+ if (
+ !lazy.TorLauncherUtil.shouldStartAndOwnTor ||
+ this.providerType !== TorProviders.tor
+ ) {
// If we are not managing the Tor daemon we cannot restart it, so just
// early return.
return;
@@ -143,7 +160,7 @@ export class TorProviderBuilder {
}
while (!running && lazy.TorLauncherUtil.showRestartPrompt(true)) {
try {
- await this.#initProvider();
+ await this.#initTorProvider();
running = true;
} catch {}
}
@@ -153,11 +170,40 @@ export class TorProviderBuilder {
}
static async #torExited() {
+ if (!this.#uiReady) {
+ console.warn(
+ `Seen ${TorProviderTopics.ProcessExited}, but not doing anything because the UI is not ready yet.`
+ );
+ return;
+ }
while (lazy.TorLauncherUtil.showRestartPrompt(false)) {
try {
- await this.#initProvider();
+ await this.#initTorProvider();
break;
} catch {}
}
}
+
+ /**
+ * Return the provider chosen by the user.
+ * This function checks the TOR_PROVIDER environment variable and if it is a
+ * known provider, it returns its associated value.
+ * Otherwise, if it is not valid, the C tor implementation is chosen as the
+ * default one.
+ *
+ * @returns {number} An entry from TorProviders
+ */
+ static get providerType() {
+ // TODO: Add a preference to permanently save this without and avoid always
+ // using an environment variable.
+ let provider = TorProviders.tor;
+ const kEnvName = "TOR_PROVIDER";
+ if (
+ Services.env.exists(kEnvName) &&
+ Services.env.get(kEnvName) in TorProviders
+ ) {
+ provider = TorProviders[Services.env.get(kEnvName)];
+ }
+ return provider;
+ }
}
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/53eec1f258c5624b9ae0fa1264aed427dc4dbd10
--
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/53eec1f258c5624b9ae0fa1264aed427dc4dbd10
You're receiving this email because of your account on gitlab.torproject.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tbb-commits/attachments/20231011/7d47d618/attachment-0001.htm>
More information about the tbb-commits
mailing list