Skip to content

Send TorConnect "Error" signal before "StateChange".

Merge Info

Related Issues



  • Immediate: patchset needed as soon as possible
  • Next Minor Stable Release: patchset that needs to be verified in nightly before backport
  • Eventually: patchset that needs to be verified in alpha before backport
  • No Backport (preferred): patchset for the next major stable

(Optional) Justification

  • Emergency security update: patchset fixes CVEs, 0-days, etc
  • Censorship event: patchset enables censorship circumvention
  • Critical bug-fix: patchset fixes a bug in core-functionality
  • Consistency: patchset which would make development easier if it were in both the alpha and release branches; developer tools, build system changes, etc
  • Sponsor required: patchset required for sponsor
  • Localization: typos and other localization changes that should be also in the release branch
  • Other: please explain


  • Merge to tor-browser - !fixups to tor-browser-specific commits, new features, security backports
  • Merge to base-browser - !fixups to base-browser-specific commits, new features to be shared with mullvad-browser, and security backports
    • NOTE: if your changeset includes patches to both base-browser and tor-browser please clearly label in the change description which commits should be cherry-picked to base-browser after merging

Issue Tracking


Request Reviewer

  • Request review from an applications developer depending on modified system:
    • NOTE: if the MR modifies multiple areas, please /cc all the relevant reviewers (since gitlab only allows 1 reviewer)
    • accessibility : henry
    • android : clairehurst, dan
    • build system : boklm
    • extensions : ma1
    • firefox internals (XUL/JS/XPCOM) : jwilde, ma1
    • fonts : pierov
    • frontend (implementation) : henry
    • frontend (review) : donuts, richard
    • localization : henry, pierov
    • macOS : clairehurst, dan
    • nightly builds : boklm
    • rebases/release-prep : dan, ma1, pierov, richard
    • security : jwilde, ma1
    • signing : boklm, richard
    • updater : pierov
    • windows : jwilde, richard
    • misc/other : pierov, richard

Change Description

Changed the order of the "Error" and "StateChange" events. Note, this is not that elegant right now, but I'm planning on removing this Error state eventually in #41710 since the focus will switch to what the user should see. This should work for 13.5 stable though.

How Tested

Go offline and have bootstrap fail. Note, bootstrapping offline just hangs for me, so I forced it to fail using

    // this.#bootstrap = new lazy.TorBootstrapRequest();
    this.#bootstrap = {
      _timeout: 0,
      bootstrap() {
        this._timeout = setTimeout(() => {
          const err = new Error("Censorship simulation");
          err.phase = "conn";
          err.reason = "noroute";
        }, 1500);
      cancel() {

Not tested on android.

/cc @clairehurst @dan

I think the main change is lastKnownError will be set before the first call to onBootstrapStateChange(TorConnectState.Error.state). Note, as far as I can tell, this is called twice on android, once due to the "Error" signal, and once due to the "StateChange" signal, is that intentional? The difference is before:

lastKnownError = ...

and now instead it will be:

lastKnownError = ...

Also, it should ensure that lastKnownError is set before this call to handleError when invoked from here.

Merge request reports