tor-browser

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

commit ea85f757c5cf5f9589ff51d9feb77015a3d3fbce
parent d8f8717930c264243730e242c72a89854654b65c
Author: Alexandru Marc <amarc@mozilla.com>
Date:   Thu, 11 Dec 2025 20:36:11 +0200

Revert "Bug 1997878 - Preserve width of backgrounded split view panels to prevent issues with PiP when switching tabs r=desktop-theme-reviewers,tabbrowser-reviewers,jules,jsudiaman,emilio" for causing marionette failures @ test_restore_split_view.py

This reverts commit 5d796ce5231b43eb6c06778a3e6073c7d67c53aa.

Diffstat:
Mbrowser/components/tabbrowser/content/tabbrowser.js | 13-------------
Mbrowser/components/tabbrowser/content/tabsplitview.js | 25+++++++++++++------------
Mbrowser/components/tabbrowser/test/browser/tabs/browser_tab_splitview.js | 13++++++++++++-
Mbrowser/components/tabbrowser/test/browser/tabs/browser_tab_splitview_footer.js | 8+-------
Mbrowser/themes/shared/tabbrowser/content-area.css | 17++++++-----------
Mtoolkit/content/widgets/tabbox.js | 15+++++++--------
Mtoolkit/content/xul.css | 2+-
7 files changed, 40 insertions(+), 53 deletions(-)

diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js @@ -3297,19 +3297,6 @@ } /** - * Toggle split view active attribute - * - * @param {boolean} isActive - * @param {MozTabbrowserTab[]} tabs - */ - setIsSplitViewActive(isActive, tabs) { - for (const tab of tabs) { - this.tabpanels.setSplitViewPanelActive(isActive, tab.linkedPanel); - } - this.tabpanels.isSplitViewActive = gBrowser.selectedTab.splitview; - } - - /** * Ensures the split view footer exists for the given tab. * * @param {MozTabbrowserTab} tab diff --git a/browser/components/tabbrowser/content/tabsplitview.js b/browser/components/tabbrowser/content/tabsplitview.js @@ -39,6 +39,9 @@ /** @type {MozTabbrowserTab[]} */ #tabs = []; + /** @type {boolean} */ + #activated = false; + /** * @returns {boolean} */ @@ -144,26 +147,26 @@ /** * Show all Split View tabs in the content area. */ - #activate(skipShowPanels = false) { + #activate() { updateUrlbarButton.arm(); - if (!skipShowPanels) { - gBrowser.showSplitViewPanels(this.#tabs); + if (this.#activated) { + return; } + gBrowser.showSplitViewPanels(this.#tabs); this.container.dispatchEvent( new CustomEvent("TabSplitViewActivate", { detail: { tabs: this.#tabs, splitview: this }, bubbles: true, }) ); + this.#activated = true; } /** * Remove Split View tabs from the content area. */ - #deactivate(skipHidePanels = false) { - if (!skipHidePanels) { - gBrowser.hideSplitViewPanels(this.#tabs); - } + #deactivate() { + gBrowser.hideSplitViewPanels(this.#tabs); updateUrlbarButton.arm(); this.container.dispatchEvent( new CustomEvent("TabSplitViewDeactivate", { @@ -171,6 +174,7 @@ bubbles: true, }) ); + this.#activated = false; } /** @@ -198,7 +202,6 @@ } if (this.hasActiveTab) { this.#activate(); - gBrowser.setIsSplitViewActive(true, this.#tabs); } } @@ -207,7 +210,6 @@ */ unsplitTabs() { gBrowser.unsplitTabs(this); - gBrowser.setIsSplitViewActive(false, this.#tabs); } /** @@ -242,11 +244,10 @@ */ on_TabSelect(event) { this.hasActiveTab = event.target.splitview === this; - gBrowser.setIsSplitViewActive(this.hasActiveTab, this.#tabs); if (this.hasActiveTab) { - this.#activate(true); + this.#activate(); } else { - this.#deactivate(true); + this.#deactivate(); } } } diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview.js b/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview.js @@ -28,8 +28,19 @@ async function checkSplitViewPanelVisible(tab, isVisible) { await BrowserTestUtils.waitForMutationCondition( panel, { attributes: true }, - () => panel.classList.contains("split-view-panel-active") == isVisible + () => panel.classList.contains("split-view-panel") == isVisible ); + if (isVisible) { + Assert.ok( + gBrowser.splitViewBrowsers.includes(tab.linkedBrowser), + "Split view panel is active." + ); + } else { + Assert.ok( + !gBrowser.splitViewBrowsers.includes(tab.linkedBrowser), + "Split view panel is inactive." + ); + } } function dragSplitter(deltaX, splitter) { diff --git a/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview_footer.js b/browser/components/tabbrowser/test/browser/tabs/browser_tab_splitview_footer.js @@ -29,18 +29,12 @@ async function setupSplitView() { info("Add tabs into an active split view."); await BrowserTestUtils.switchTab(gBrowser, tabs[0]); const splitView = gBrowser.addTabSplitView(tabs); - const tabpanels = document.getElementById("tabbrowser-tabpanels"); - await BrowserTestUtils.waitForMutationCondition( - tabpanels, - { attributes: true }, - () => tabpanels.hasAttribute("splitview") - ); for (const tab of tabs) { const tabPanel = document.getElementById(tab.linkedPanel); await BrowserTestUtils.waitForMutationCondition( tabPanel, { attributes: true }, - () => tabPanel.classList.contains("split-view-panel-active") + () => tabPanel.classList.contains("split-view-panel") ); } diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css @@ -156,21 +156,16 @@ -moz-user-focus: none !important; } - .split-view-panel { + &[splitview] { --panel-min-width: 140px; - min-width: var(--panel-min-width); - max-width: calc(100% - var(--panel-min-width)); - width: 49.4%; - } - &[splitview] { - .split-view-panel.split-view-panel-active { - margin: var(--space-xsmall); - flex: 1; + .split-view-panel { position: relative; - width: unset; + flex: 1; + min-width: var(--panel-min-width); + max-width: calc(100% - var(--panel-min-width)); + margin: var(--space-xsmall); } - /* Ensure any dialogs are clipped in an inactive/not-selected panel. */ :root:not([inDOMFullscreen]) & > .split-view-panel:not(.deck-selected) { overflow: clip; diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js @@ -367,6 +367,10 @@ } set splitViewPanels(newPanels) { + const oldPanels = this.#splitViewPanels; + for (const panel of oldPanels) { + this.removePanelFromSplitView(panel, false); + } for (const [i, panel] of newPanels.entries()) { const panelEl = document.getElementById(panel); panelEl?.classList.add("split-view-panel"); @@ -377,7 +381,7 @@ } } this.#splitViewPanels = newPanels; - this.isSplitViewActive = !!newPanels.length; + this.#isSplitViewActive = !!newPanels.length; } get splitViewPanels() { @@ -405,10 +409,10 @@ this.#splitViewPanels.splice(index, 1); } } - this.isSplitViewActive = !!this.#splitViewPanels.length; + this.#isSplitViewActive = !!this.#splitViewPanels.length; } - set isSplitViewActive(isActive) { + set #isSplitViewActive(isActive) { this.toggleAttribute("splitview", isActive); this.splitViewSplitter.hidden = !isActive; if (isActive) { @@ -417,11 +421,6 @@ firstPanel?.after(this.#splitViewSplitter); } } - - setSplitViewPanelActive(isActive, panel) { - const panelEl = document.getElementById(panel); - panelEl?.classList.toggle("split-view-panel-active", isActive); - } } MozXULElement.implementCustomInterface(MozTabpanels, [ diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css @@ -461,7 +461,7 @@ deck > *|*:not(:-moz-native-anonymous) { } tabpanels > .deck-selected, -tabpanels > .split-view-panel-active, +tabpanels > .split-view-panel, tabpanels > .split-view-splitter, deck > .deck-selected { -moz-subtree-hidden-only-visually: 0;