tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3d4d2f96a0c489728e59a5e9d9a629f4ce0baaed
parent 6d91498cf88ec45d892676ef7a6f155b3661f1a8
Author: DJ <dj@walker.dev>
Date:   Wed,  7 Jan 2026 20:58:04 +0000

Bug 2007838 - dismiss tab preview at beginning of tab drag. r=tabbrowser-reviewers,sthompson

Differential Revision: https://phabricator.services.mozilla.com/D277879

Diffstat:
Mbrowser/components/tabbrowser/content/tab-hover-preview.mjs | 11+++++++++++
Mbrowser/components/tabbrowser/test/browser/tabs/browser_tab_preview.js | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/browser/components/tabbrowser/content/tab-hover-preview.mjs b/browser/components/tabbrowser/content/tab-hover-preview.mjs @@ -83,6 +83,16 @@ export default class TabHoverPanelSet { ); this.#setExternalPopupListeners(); + this.#win.gBrowser.tabContainer.addEventListener("dragstart", event => { + const target = event.target.closest?.("tab, .tab-group-label"); + if ( + target && + (this.#win.gBrowser.isTab(target) || + this.#win.gBrowser.isTabGroupLabel(target)) + ) { + this.deactivate(null, { force: true }); + } + }); } /** @@ -191,6 +201,7 @@ export default class TabHoverPanelSet { return ( // All other popups are closed. !this.#openPopups.size && + !this.#win.gBrowser.tabContainer.hasAttribute("movingtab") && // TODO (bug 1899556): for now disable in background windows, as there are // issues with windows ordering on Linux (bug 1897475), plus intermittent // persistence of previews after session restore (bug 1888148). diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tab_preview.js b/browser/components/tabbrowser/test/browser/tabs/browser_tab_preview.js @@ -1292,6 +1292,81 @@ add_task(async function testDragToCancelPreview() { await SpecialPowers.popPrefEnv(); }); +add_task(async function tabPreviewHidesWhenDraggingOverPanel() { + const tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:robots" + ); + const previewElement = document.getElementById(TAB_PREVIEW_PANEL_ID); + + await openTabPreview(tab); + + const previewHidden = BrowserTestUtils.waitForPopupEvent( + previewElement, + "hidden" + ); + const dragend = BrowserTestUtils.waitForEvent(tab, "dragend"); + + EventUtils.synthesizePlainDragAndDrop({ + srcElement: tab, + destElement: null, + stepX: 10, + stepY: 0, + }); + + await previewHidden; + Assert.equal( + previewElement.state, + "closed", + "Preview closes when dragging downward over the panel" + ); + + await dragend; + + BrowserTestUtils.removeTab(tab); + await resetState(); + + const groupTab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "about:robots" + ); + const group = gBrowser.addTabGroup([groupTab]); + group.collapsed = true; + + await openGroupPreview(group); + + const groupPreviewElement = document.getElementById( + TAB_GROUP_PREVIEW_PANEL_ID + ); + const groupPreviewHidden = BrowserTestUtils.waitForPopupEvent( + groupPreviewElement, + "hidden" + ); + const groupDragend = BrowserTestUtils.waitForEvent( + group.labelElement, + "dragend" + ); + + EventUtils.synthesizePlainDragAndDrop({ + srcElement: group.labelElement, + destElement: null, + stepX: 10, + stepY: 0, + }); + + await groupPreviewHidden; + Assert.equal( + groupPreviewElement.state, + "closed", + "Group preview closes when dragging downward over the panel" + ); + + await groupDragend; + + BrowserTestUtils.removeTab(groupTab); + await resetState(); +}); + /** * Other open panels should prevent tab preview from opening */