From 5e27368a4800775528bb8b4ed3b5954a5dc30764 Mon Sep 17 00:00:00 2001 From: "mr. m" Date: Wed, 25 Feb 2026 20:31:28 +0100 Subject: [PATCH] fix: Fixed race conditions when syncing views through windows desktops, b=bug #12390, c=no-component --- src/zen/sessionstore/ZenWindowSync.sys.mjs | 25 ++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index 32200d625..361de92e0 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -1259,11 +1259,10 @@ class nsZenWindowSync { }); } - async on_focus(aEvent) { + on_focus(aEvent) { if (typeof aEvent.target !== "object") { return; } - await this.#docShellSwitchPromise; const window = Services.focus.activeWindow; if ( !window?.gBrowser || @@ -1273,23 +1272,31 @@ class nsZenWindowSync { ) { return; } + let promise = this.#docShellSwitchPromise; this.#lastFocusedWindow = new WeakRef(window); this.#lastSelectedTab = new WeakRef(window.gBrowser.selectedTab); - return (this.#docShellSwitchPromise = this.#onTabSwitchOrWindowFocus(window)); + // eslint-disable-next-line no-async-promise-executor + this.#docShellSwitchPromise = new Promise(async (resolve) => { + await promise; + await this.#onTabSwitchOrWindowFocus(window); + resolve(); + }); } - async on_TabSelect(aEvent) { - await this.#docShellSwitchPromise; + on_TabSelect(aEvent) { const tab = aEvent.target; if (this.#lastSelectedTab?.deref() === tab) { return; } this.#lastSelectedTab = new WeakRef(tab); const previousTab = aEvent.detail.previousTab; - return (this.#docShellSwitchPromise = this.#onTabSwitchOrWindowFocus( - aEvent.target.ownerGlobal, - previousTab - )); + let promise = this.#docShellSwitchPromise; + // eslint-disable-next-line no-async-promise-executor + this.#docShellSwitchPromise = new Promise(async (resolve) => { + await promise; + await this.#onTabSwitchOrWindowFocus(tab.ownerGlobal, previousTab); + resolve(); + }); } on_SSWindowClosing(aEvent) {