tor-browser

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

commit 4cef53c557c801211286dc82b70c7cde80d84172
parent e32e779c97b96a40ad2ea9331b1a1ab919afb60c
Author: Cristian Tuns <ctuns@mozilla.com>
Date:   Fri,  2 Jan 2026 15:07:59 -0500

Revert "Bug 1970541 Precompute unmovingTabStripItems and dropIndexSearchArray r=sthompson,tabbrowser-reviewers" for causing bc failures in browser_move_unpinned_not_overflowing.js

This reverts commit bf027a10140b8904d111126cd4c66143ebb4b828.

Diffstat:
Mbrowser/components/tabbrowser/content/drag-and-drop.js | 58+++++++++++++++++++++++++++-------------------------------
Mbrowser/components/tabbrowser/content/tab-stacking.js | 18++++++++++++------
2 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js @@ -1114,11 +1114,6 @@ let movingTabs = tab.multiselected ? gBrowser.selectedTabs : [tab]; let movingTabsSet = new Set(movingTabs); - let unmovingTabStripItems = - this._tabbrowserTabs.dragAndDropElements.filter( - t => !movingTabsSet.has(t) - ); - let dropIndexSearchArray = [tab, ...unmovingTabStripItems]; let dropEffect = this.getDropEffectForTabDrag(event); let isMovingInTabStrip = !fromTabList && dropEffect == "move"; @@ -1140,8 +1135,6 @@ screenY: event.screenY, movingTabs, movingTabsSet, - dropIndexSearchArray, - unmovingTabStripItems, fromTabList, tabGroupCreationColor: gBrowser.tabGroupMenu.nextUnusedColor, expandGroupOnDrop: collapseTabGroupDuringDrag, @@ -1717,7 +1710,7 @@ // * We're doing a binary search in order to reduce the amount of // tabs we need to check. - let dropIndexSearchArray = dragData.dropIndexSearchArray; + tabs = tabs.filter(t => !movingTabs.includes(t) || t == draggedTab); let firstTabCenterX = firstMovingTabScreenX + translateX + tabWidth / 2; let lastTabCenterX = lastMovingTabScreenX + translateX + tabWidth / 2; let tabCenterX = directionX ? lastTabCenterX : firstTabCenterX; @@ -1766,18 +1759,18 @@ }; let low = 0; - let high = dropIndexSearchArray.length - 1; + let high = tabs.length - 1; let newIndex = -1; let oldIndex = dragData.animDropElementIndex ?? movingTabs[0].elementIndex; while (low <= high) { let mid = Math.floor((low + high) / 2); - if (dropIndexSearchArray[mid] == draggedTab && ++mid > high) { + if (tabs[mid] == draggedTab && ++mid > high) { break; } - let [shiftX, shiftY] = getTabShift(dropIndexSearchArray[mid], oldIndex); - screenX = dropIndexSearchArray[mid].screenX + shiftX; - screenY = dropIndexSearchArray[mid].screenY + shiftY; + let [shiftX, shiftY] = getTabShift(tabs[mid], oldIndex); + screenX = tabs[mid].screenX + shiftX; + screenY = tabs[mid].screenY + shiftY; if (screenY + tabHeight < tabCenterY) { low = mid + 1; @@ -1792,12 +1785,12 @@ ) { low = mid + 1; } else { - newIndex = dropIndexSearchArray[mid].elementIndex; + newIndex = tabs[mid].elementIndex; break; } } - if (newIndex >= oldIndex && newIndex < dropIndexSearchArray.length) { + if (newIndex >= oldIndex && newIndex < tabs.length) { newIndex++; } @@ -1810,18 +1803,17 @@ } dragData.animDropElementIndex = newIndex; - dragData.dropElement = - dropIndexSearchArray[ - Math.min(newIndex, dropIndexSearchArray.length - 1) - ]; - dragData.dropBefore = newIndex < dropIndexSearchArray.length; + dragData.dropElement = tabs[Math.min(newIndex, tabs.length - 1)]; + dragData.dropBefore = newIndex < tabs.length; // Shift background tabs to leave a gap where the dragged tab // would currently be dropped. - for (let tab of dragData.unmovingTabStripItems) { - let [shiftX, shiftY] = getTabShift(tab, newIndex); - tab.style.transform = - shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; + for (let tab of tabs) { + if (tab != draggedTab) { + let [shiftX, shiftY] = getTabShift(tab, newIndex); + tab.style.transform = + shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; + } } } @@ -1940,7 +1932,7 @@ dragData.translatePos = translate; - let dropIndexSearchArray = dragData.dropIndexSearchArray; + tabs = tabs.filter(t => !movingTabsSet.has(t) || t == draggedTab); /** * When the `draggedTab` is just starting to move, the `draggedTab` is in @@ -2065,13 +2057,13 @@ (screenForward ? lastMovingTabScreen : firstMovingTabScreen) + translate; let low = 0; - let high = dropIndexSearchArray.length - 1; + let high = tabs.length - 1; while (low <= high) { let mid = Math.floor((low + high) / 2); - if (dropIndexSearchArray[mid] == draggedTab && ++mid > high) { + if (tabs[mid] == draggedTab && ++mid > high) { break; } - let element = dropIndexSearchArray[mid]; + let element = tabs[mid]; let elementForSize = elementToMove(element); screen = elementForSize[screenAxis] + @@ -2132,8 +2124,8 @@ // valuë of `movingTabs[0].elementIndex`. In this case, the drop element // shouldn't be a moving tab, so keep it `undefined`. let lastPossibleDropElement = this._rtlMode - ? dropIndexSearchArray.find(t => t != draggedTab) - : dropIndexSearchArray.findLast(t => t != draggedTab); + ? tabs.find(t => t != draggedTab) + : tabs.findLast(t => t != draggedTab); let maxElementIndexForDropElement = lastPossibleDropElement?.elementIndex; if (Number.isInteger(maxElementIndexForDropElement)) { @@ -2340,7 +2332,11 @@ // Shift background tabs to leave a gap where the dragged tab // would currently be dropped. - for (let item of dragData.unmovingTabStripItems) { + for (let item of tabs) { + if (item == draggedTab) { + continue; + } + let shift = getTabShift(item, newDropElementIndex); let transform = shift ? `${translateAxis}(${shift}px)` : ""; item = elementToMove(item); diff --git a/browser/components/tabbrowser/content/tab-stacking.js b/browser/components/tabbrowser/content/tab-stacking.js @@ -965,7 +965,8 @@ } dragData.translatePos = translate; - tabs = dragData.dropIndexSearchArray; + + tabs = tabs.filter(t => !movingTabsSet.has(t) || t == draggedTab); /** * When the `draggedTab` is just starting to move, the `draggedTab` is in @@ -1371,7 +1372,10 @@ // Shift background tabs to leave a gap where the dragged tab // would currently be dropped. - for (let item of dragData.unmovingTabStripItems) { + for (let item of tabs) { + if (item == draggedTab) { + continue; + } let shift = getTabShift(item, newDropElementIndex); let transform = shift ? `${translateAxis}(${shift}px)` : ""; item = elementToMove(item); @@ -1554,10 +1558,12 @@ // Shift background tabs to leave a gap where the dragged tab // would currently be dropped. - for (let tab of dragData.unmovingTabStripItems) { - let [shiftX, shiftY] = getTabShift(tab, newIndex); - tab.style.transform = - shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; + for (let tab of tabs) { + if (tab != draggedTab) { + let [shiftX, shiftY] = getTabShift(tab, newIndex); + tab.style.transform = + shiftX || shiftY ? `translate(${shiftX}px, ${shiftY}px)` : ""; + } } }