This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-102.4.0esr-12.0-1 in repository tor-browser.
The following commit(s) were added to refs/heads/tor-browser-102.4.0esr-12.0-1 by this push: new 8f318354ad30 fixup! Bug 40933: Add tor-launcher functionality 8f318354ad30 is described below
commit 8f318354ad30d4e56eee5aea4dc0e568dd59916b Author: Pier Angelo Vendrame pierov@torproject.org AuthorDate: Mon Oct 24 11:09:57 2022 +0200
fixup! Bug 40933: Add tor-launcher functionality
Bug 41385: BootstrapError is never notified
Also, cleaned TorProcessDidNotStart, that is never actually used and some other possible improvements on error reporting. --- .../tor-launcher/TorBootstrapRequest.jsm | 56 +++++++++++----------- .../components/tor-launcher/TorMonitorService.jsm | 31 ++++++++---- toolkit/components/tor-launcher/TorProcess.jsm | 23 ++------- 3 files changed, 51 insertions(+), 59 deletions(-)
diff --git a/toolkit/components/tor-launcher/TorBootstrapRequest.jsm b/toolkit/components/tor-launcher/TorBootstrapRequest.jsm index 4f0ae240b31d..e999d5c3f62c 100644 --- a/toolkit/components/tor-launcher/TorBootstrapRequest.jsm +++ b/toolkit/components/tor-launcher/TorBootstrapRequest.jsm @@ -39,7 +39,7 @@ class TorBootstrapRequest { this._timeoutID = null; }
- async observe(subject, topic, data) { + observe(subject, topic, data) { const obj = subject?.wrappedJSObject; switch (topic) { case TorTopics.BootstrapStatus: { @@ -59,17 +59,8 @@ class TorBootstrapRequest { break; } case TorTopics.BootstrapError: { - // first stop our bootstrap timeout before handling the error - clearTimeout(this._timeoutID); - - await TorProtocolService.stopBootstrap(); - - const message = obj.message; - const details = obj.details; - if (this.onbootstraperror) { - this.onbootstraperror(message, details); - } - this._bootstrapPromiseResolve(false); + console.info("TorBootstrapRequest: observerd TorBootstrapError", obj); + this._stop(obj?.message, obj?.details); break; } } @@ -91,41 +82,48 @@ class TorBootstrapRequest { // optionally cancel bootstrap after a given timeout if (this.timeout > 0) { this._timeoutID = setTimeout(async () => { - await TorProtocolService.stopBootstrap(); - if (this.onbootstraperror) { - this.onbootstraperror( - "Tor Bootstrap process timed out", - `Bootstrap attempt abandoned after waiting ${this.timeout} ms` - ); - } - this._bootstrapPromiseResolve(false); + this._timeoutID = null; + // TODO: Translate, if really used + await this._stop( + "Tor Bootstrap process timed out", + `Bootstrap attempt abandoned after waiting ${this.timeout} ms` + ); }, this.timeout); }
// wait for bootstrapping to begin and maybe handle error - TorProtocolService.connect().catch(async err => { - clearTimeout(this._timeoutID); - // stopBootstrap never throws, at the moment - await TorProtocolService.stopBootstrap(); - if (this.onbootstraperror) { - this.onbootstraperror(err.message, ""); - } - this._bootstrapPromiseResolve(false); + TorProtocolService.connect().catch(err => { + this._stop(err.message, ""); }); }).finally(() => { // and remove ourselves once bootstrap is resolved Services.obs.removeObserver(this, TorTopics.BootstrapStatus); Services.obs.removeObserver(this, TorTopics.BootstrapError); + this._bootstrapPromise = null; });
return this._bootstrapPromise; }
async cancel() { - clearTimeout(this._timeoutID); + await this._stop(); + } + + // Internal implementation. Do not use directly, but call cancel, instead. + async _stop(message, details) { + // first stop our bootstrap timeout before handling the error + if (this._timeoutID !== null) { + clearTimeout(this._timeoutID); + this._timeoutID = null; + }
+ // stopBootstrap never throws await TorProtocolService.stopBootstrap();
+ if (this.onbootstraperror && message) { + this.onbootstraperror(message, details); + } + this._bootstrapPromiseResolve(false); } } diff --git a/toolkit/components/tor-launcher/TorMonitorService.jsm b/toolkit/components/tor-launcher/TorMonitorService.jsm index 201ac6275c56..881f4a5a7355 100644 --- a/toolkit/components/tor-launcher/TorMonitorService.jsm +++ b/toolkit/components/tor-launcher/TorMonitorService.jsm @@ -47,7 +47,6 @@ const Preferences = Object.freeze({ const TorTopics = Object.freeze({ BootstrapError: "TorBootstrapError", HasWarnOrErr: "TorLogHasWarnOrErr", - ProcessDidNotStart: "TorProcessDidNotStart", ProcessExited: "TorProcessExited", ProcessIsReady: "TorProcessIsReady", ProcessRestarted: "TorProcessRestarted", @@ -191,8 +190,17 @@ const TorMonitorService = { await this._controlTor(); Services.obs.notifyObservers(null, TorTopics.ProcessRestarted); }; - await this._torProcess.start(); - if (!this._torProcess.isRunning) { + try { + await this._torProcess.start(); + if (!this._torProcess.isRunning) { + this._torProcess = null; + return false; + } + } catch (e) { + // TorProcess already logs the error. + this._bootstrapErrorOccurred = true; + this._lastWarningPhase = "startup"; + this._lastWarningReason = e.toString(); this._torProcess = null; return false; } @@ -222,11 +230,9 @@ const TorMonitorService = { ControlConnTimings.timeoutMS ) { let s = TorLauncherUtil.getLocalizedString("tor_controlconn_failed"); - TorLauncherUtil.notifyUserOfError( - s, - null, - TorTopics.ProcessDidNotStart - ); + this._bootstrapErrorOccurred = true; + this._lastWarningPhase = "startup"; + this._lastWarningReason = s; logger.info(s); } else { delayMS *= 2; @@ -432,8 +438,13 @@ const TorMonitorService = { this._lastWarningPhase = statusObj.TAG; this._lastWarningReason = statusObj.REASON;
- const msg = TorLauncherUtil.getLocalizedString("tor_bootstrap_failed"); - TorLauncherUtil.notifyUserOfError(msg, details, TorTopics.BootstrapError); + const message = TorLauncherUtil.getLocalizedString( + "tor_bootstrap_failed" + ); + Services.obs.notifyObservers( + { message, details }, + TorTopics.BootstrapError + ); } },
diff --git a/toolkit/components/tor-launcher/TorProcess.jsm b/toolkit/components/tor-launcher/TorProcess.jsm index a23fd324efff..3dd194817d0a 100644 --- a/toolkit/components/tor-launcher/TorProcess.jsm +++ b/toolkit/components/tor-launcher/TorProcess.jsm @@ -32,10 +32,6 @@ const TorProcessStatus = Object.freeze({ Exited: 3, });
-const TorProcessTopics = Object.freeze({ - ProcessDidNotStart: "TorProcessDidNotStart", -}); - // Logger adapted from CustomizableUI.jsm XPCOMUtils.defineLazyGetter(this, "logger", () => { const { ConsoleAPI } = ChromeUtils.import( @@ -82,9 +78,7 @@ class TorProcess { this._status = TorProcessStatus.Unknown;
try { - if (!this._makeArgs()) { - return; - } + this._makeArgs(); this._addControlPortArg(); this._addSocksPortArg();
@@ -149,11 +143,7 @@ class TorProcess { this._status = TorProcessStatus.Exited; this._torProcess = null; logger.error("startTor error:", e); - Services.obs.notifyObservers( - null, - TorProcessTopics.ProcessDidNotStart, - null - ); + throw e; } }
@@ -284,12 +274,7 @@ class TorProcess { [details], 1 ); - TorLauncherUtil.notifyUserOfError( - err, - null, - TorProcessTopics.ProcessDidNotStart - ); - return false; + throw new Error(err); }
const torrcDefaultsFile = TorLauncherUtil.getTorFile( @@ -319,8 +304,6 @@ class TorProcess { this._args.push(geoip6File.path); this._args.push("HashedControlPassword"); this._args.push(hashedPassword); - - return true; }
_addControlPortArg() {