diff --git a/README.md b/README.md index 202e780a9..505d3f316 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne ### Firefox Versions - [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `141.0.3`! 🚀 -- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 141.0.3`! +- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 142.0`! ### Contributing diff --git a/build/firefox-cache/l10n-last-commit-hash b/build/firefox-cache/l10n-last-commit-hash index ffafcb981..315f3a940 100644 --- a/build/firefox-cache/l10n-last-commit-hash +++ b/build/firefox-cache/l10n-last-commit-hash @@ -1 +1 @@ -4a784a2037bf44d4fcacf70fd69c86ff30825ec1 \ No newline at end of file +aeeb12ebf5e8312e56bf0126778460f7a5fa607a \ No newline at end of file diff --git a/scripts/recalculate-patches.sh b/scripts/recalculate-patches.sh index 0c6aa210b..6904cc90d 100644 --- a/scripts/recalculate-patches.sh +++ b/scripts/recalculate-patches.sh @@ -3,6 +3,11 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +IGNORE_FILES=( + "shared.nsh" + "ignorePrefs.json" +) + # Recursively find all .patch files in the current directory and its subdirectories find src -type f -name "*.patch" | while read -r patch_file; do # Replace all - with . and remove the .patch extension @@ -17,8 +22,10 @@ find src -type f -name "*.patch" | while read -r patch_file; do new_file="${new_file/-ftl/.ftl}" fi - # Create the new file with the same content as the original - npm run export ${new_file} & + new_file_base=$(basename "$new_file") + if [[ ! " ${IGNORE_FILES[@]} " =~ " ${new_file_base} " ]]; then + npm run export ${new_file} + fi done for job in $(jobs -p); do diff --git a/scripts/run_tests.py b/scripts/run_tests.py index 81d086b74..a4adecd7c 100644 --- a/scripts/run_tests.py +++ b/scripts/run_tests.py @@ -4,10 +4,33 @@ import os import sys +import json from pathlib import Path +IGNORE_PREFS_FILE_IN = os.path.join( + 'src', 'zen', 'tests', 'ignorePrefs.json' +) +IGNORE_PREFS_FILE_OUT = os.path.join( + 'engine', 'testing', 'mochitest', 'ignorePrefs.json' +) + + +def copy_ignore_prefs(): + print("Copying ignorePrefs.json from src/zen/tests to engine/testing/mochitest...") + # if there are prefs that dont exist on output file, copy them from input file + all_prefs = [] + with open(IGNORE_PREFS_FILE_OUT, 'r') as f: + all_prefs = json.load(f) + with open(IGNORE_PREFS_FILE_IN, 'r') as f_in: + new_prefs = json.load(f_in) + all_prefs.extend(p for p in new_prefs if p not in all_prefs) + with open(IGNORE_PREFS_FILE_OUT, 'w') as f_out: + json.dump(all_prefs, f_out, indent=2) + def main(): + copy_ignore_prefs() + project_root = Path(__file__).resolve().parent.parent package_json = project_root / 'package.json' diff --git a/src/Cargo-lock.patch b/src/Cargo-lock.patch index 7a740531f..11e71b9db 100644 --- a/src/Cargo-lock.patch +++ b/src/Cargo-lock.patch @@ -1,8 +1,8 @@ diff --git a/Cargo.lock b/Cargo.lock -index f223ba9af3edd60a42730a606aca2c48bbdddc0c..501cf2de684532203bfb2e96f8add919f3d6e739 100644 +index fe4eff865884fb79983f636861897648c36491b5..a9516246ffacfd50b7e4198967bebb71b2c73eca 100644 --- a/Cargo.lock +++ b/Cargo.lock -@@ -4049,8 +4049,6 @@ dependencies = [ +@@ -4067,8 +4067,6 @@ dependencies = [ [[package]] name = "mime_guess" version = "2.0.4" diff --git a/src/Cargo-toml.patch b/src/Cargo-toml.patch index c015fcff8..7617d5bae 100644 --- a/src/Cargo-toml.patch +++ b/src/Cargo-toml.patch @@ -1,12 +1,11 @@ diff --git a/Cargo.toml b/Cargo.toml -index d402d783e2bbc30b87b2c59cf02e38b74d0484c1..b718ee7ed0519cac20d2828fee0350b44fc3f45a 100644 +index c41cc4f4e68e5b30e1a290e07b2c5061db4400cc..7fa5402b32116922766ee1463b441d3fc86c1eff 100644 --- a/Cargo.toml +++ b/Cargo.toml -@@ -227,6 +227,9 @@ rure = { path = "third_party/rust/rure" } - # Patch `plist` to work with `indexmap` 2.* - plist = { path = "third_party/rust/plist" } +@@ -218,6 +218,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" } + # Workaround for https://github.com/rust-lang/cargo/issues/11232 + rure = { path = "third_party/rust/rure" } -+# Patch mime_guess to add missing mime types +mime_guess = { path = "third_party/rust/mime_guess" } + # Patch `unicode-width` 0.1.* to 0.2. diff --git a/src/browser/actors/WebRTCParent-sys-mjs.patch b/src/browser/actors/WebRTCParent-sys-mjs.patch index 4b6a910a5..321d1b520 100644 --- a/src/browser/actors/WebRTCParent-sys-mjs.patch +++ b/src/browser/actors/WebRTCParent-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs -index 4ed2dd19207fc38b9e5cc22ea2947aba94b2f5ad..ffc88d62dc46683399c68cdfd35f1b1efde70902 100644 +index 49ba7724801e699c60fac72d67b3b2d11b6c8c93..5a9f209b3e6b625c6346083ab7eace552a81a3b4 100644 --- a/browser/actors/WebRTCParent.sys.mjs +++ b/browser/actors/WebRTCParent.sys.mjs @@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent { diff --git a/src/browser/base/content/browser-js.patch b/src/browser/base/content/browser-js.patch index cadc482a2..2c8f9416d 100644 --- a/src/browser/base/content/browser-js.patch +++ b/src/browser/base/content/browser-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js -index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab87d7fbf3 100644 +index 05f6aec3dac31231e15cb316f6e06d66ee87bea9..3bbbe8553777056798ea9ddce1744a8e48848a37 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -29,6 +29,7 @@ ChromeUtils.defineESModuleGetters(this, { @@ -10,7 +10,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab DevToolsSocketStatus: "resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs", DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs", -@@ -2282,6 +2283,8 @@ var XULBrowserWindow = { +@@ -2287,6 +2288,8 @@ var XULBrowserWindow = { AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); TranslationsParent.onLocationChange(gBrowser.selectedBrowser); @@ -19,7 +19,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); if (!gMultiProcessBrowser) { -@@ -4617,7 +4620,7 @@ function switchToTabHavingURI( +@@ -4630,7 +4633,7 @@ function switchToTabHavingURI( ignoreQueryString || replaceQueryString, ignoreFragmentWhenComparing ); @@ -28,7 +28,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab for (let i = 0; i < browsers.length; i++) { let browser = browsers[i]; let browserCompare = cleanURL( -@@ -4660,7 +4663,7 @@ function switchToTabHavingURI( +@@ -4673,7 +4676,7 @@ function switchToTabHavingURI( } if (!doAdopt) { @@ -37,7 +37,7 @@ index 8e839c497bba9de04948ad8759679b6a6f61a65f..d79bd14443d94b91309f0add133e35ab } return true; -@@ -5476,6 +5479,9 @@ var ConfirmationHint = { +@@ -5489,6 +5492,9 @@ var ConfirmationHint = { MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl"); MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl"); document.l10n.setAttributes(this._message, messageId, options.l10nArgs); diff --git a/src/browser/base/content/nsContextMenu-sys-mjs.patch b/src/browser/base/content/nsContextMenu-sys-mjs.patch index 8dd519051..15d825b58 100644 --- a/src/browser/base/content/nsContextMenu-sys-mjs.patch +++ b/src/browser/base/content/nsContextMenu-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs -index e5ae99edff6cef4964ff15a7d32b0f9c80625425..6b7b6e75c76b25319334113bf2f17817f67e1073 100644 +index b12427b3c23447ab26499120f8395c716dae9e82..934f5c1f1b38d035cd7d3a5253a8d3cecad385f8 100644 --- a/browser/base/content/nsContextMenu.sys.mjs +++ b/browser/base/content/nsContextMenu.sys.mjs -@@ -1050,6 +1050,8 @@ export class nsContextMenu { +@@ -1054,6 +1054,8 @@ export class nsContextMenu { !this.isSecureAboutPage() ); diff --git a/src/browser/base/content/zen-panels/folders-search.inc b/src/browser/base/content/zen-panels/folders-search.inc index 44743aba1..7f39c9576 100644 --- a/src/browser/base/content/zen-panels/folders-search.inc +++ b/src/browser/base/content/zen-panels/folders-search.inc @@ -5,7 +5,10 @@ - + diff --git a/src/browser/base/content/zen-panels/popups.inc b/src/browser/base/content/zen-panels/popups.inc index 8eb5e614e..efd4b0014 100644 --- a/src/browser/base/content/zen-panels/popups.inc +++ b/src/browser/base/content/zen-panels/popups.inc @@ -45,4 +45,3 @@ - diff --git a/src/browser/base/jar-mn.patch b/src/browser/base/jar-mn.patch index f6e5cb0b6..90ff34745 100644 --- a/src/browser/base/jar-mn.patch +++ b/src/browser/base/jar-mn.patch @@ -1,8 +1,8 @@ diff --git a/browser/base/jar.mn b/browser/base/jar.mn -index ad10fe2c55c422090ebfc3989ca6858c1d958a10..0ff76c3bd768b2b337683a35f8dbd197f421905c 100644 +index f5a94b47c95304399bce8159dd9fb5d2911ea60a..f63cb861e8807294d597a341ddb408f236ee2df2 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn -@@ -105,3 +105,5 @@ browser.jar: +@@ -106,3 +106,5 @@ browser.jar: # L10n resources and overrides. % override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties diff --git a/src/browser/components/BrowserContentHandler-sys-mjs.patch b/src/browser/components/BrowserContentHandler-sys-mjs.patch index 9fe176927..a0ab7bf03 100644 --- a/src/browser/components/BrowserContentHandler-sys-mjs.patch +++ b/src/browser/components/BrowserContentHandler-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs -index 415d1d52507e0710a3c1daa5864618527b162100..f420fcb8db2ed6f33eb3b38ec9bd213809aa74c3 100644 +index 81f72563b93b9ce77191ad4cf200489222e0122e..40bc484301b3d66542c4171921f527c2ac6ed047 100644 --- a/browser/components/BrowserContentHandler.sys.mjs +++ b/browser/components/BrowserContentHandler.sys.mjs @@ -1276,6 +1276,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) { diff --git a/src/browser/components/BrowserGlue-sys-mjs.patch b/src/browser/components/BrowserGlue-sys-mjs.patch index 3530cc007..b7b59f874 100644 --- a/src/browser/components/BrowserGlue-sys-mjs.patch +++ b/src/browser/components/BrowserGlue-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs -index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df726d15b0 100644 +index f3253d2565cf735bdf33792697f91db9ca9ba5e9..5a6a62e3de3d510a3ae514773e6f8886ef8f9a09 100644 --- a/browser/components/BrowserGlue.sys.mjs +++ b/browser/components/BrowserGlue.sys.mjs @@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; @@ -10,7 +10,7 @@ index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs", AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs", ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs", -@@ -1496,7 +1497,7 @@ BrowserGlue.prototype = { +@@ -1490,7 +1491,7 @@ BrowserGlue.prototype = { windowcount++; let tabbrowser = win.gBrowser; if (tabbrowser) { @@ -19,7 +19,7 @@ index 05a5063427e4038b3d57f6f5bae31b60428c7880..a01e25b52ffc3a68dddb513cb085b7df } } -@@ -1659,6 +1660,8 @@ BrowserGlue.prototype = { +@@ -1653,6 +1654,8 @@ BrowserGlue.prototype = { } else if (profileDataVersion < APP_DATA_VERSION) { lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION); } diff --git a/src/browser/components/search/SearchOneOffs-sys-mjs.patch b/src/browser/components/search/SearchOneOffs-sys-mjs.patch index 15c034f87..17f9becee 100644 --- a/src/browser/components/search/SearchOneOffs-sys-mjs.patch +++ b/src/browser/components/search/SearchOneOffs-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs -index 23808139bc885c5e6457b3e4be0b1727c0f3bbf9..472fdbe863db5725d01af903b69a479b9edc3244 100644 +index 3930862215a667e223f1bf6959dcf1c08421b37d..68d767b6d8490a374973eb86a032a6386879fd93 100644 --- a/browser/components/search/SearchOneOffs.sys.mjs +++ b/browser/components/search/SearchOneOffs.sys.mjs -@@ -455,7 +455,7 @@ export class SearchOneOffs { +@@ -466,7 +466,7 @@ export class SearchOneOffs { // For the search-bar, always show the one-off buttons where there is an // option to add an engine. let addEngineNeeded = isSearchBar && addEngines.length; diff --git a/src/browser/components/search/SearchUIUtils-sys-mjs.patch b/src/browser/components/search/SearchUIUtils-sys-mjs.patch index a93ccce5f..c6927f012 100644 --- a/src/browser/components/search/SearchUIUtils-sys-mjs.patch +++ b/src/browser/components/search/SearchUIUtils-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs -index 3666beb83bc50e80fa8848f18aaeb6545d5ff8a7..0566fc87e90531456e78bc6c33a0696f0aff6cb3 100644 +index dfd18da85323751c4be7963cb5ab2357de488d83..e228bf594a0a736396cabd247bac4033091afccc 100644 --- a/browser/components/search/SearchUIUtils.sys.mjs +++ b/browser/components/search/SearchUIUtils.sys.mjs @@ -412,7 +412,7 @@ export var SearchUIUtils = { diff --git a/src/browser/components/sessionstore/SessionStore-sys-mjs.patch b/src/browser/components/sessionstore/SessionStore-sys-mjs.patch index 1fba82ee7..364ec6ace 100644 --- a/src/browser/components/sessionstore/SessionStore-sys-mjs.patch +++ b/src/browser/components/sessionstore/SessionStore-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs -index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29ee03bbdda 100644 +index e954a8df26ed84731b08b151f90a758206946582..5b8013c71c6b50579668d16a5f7d5a82b5d43e4d 100644 --- a/browser/components/sessionstore/SessionStore.sys.mjs +++ b/browser/components/sessionstore/SessionStore.sys.mjs -@@ -2120,7 +2120,6 @@ var SessionStoreInternal = { +@@ -2135,7 +2135,6 @@ var SessionStoreInternal = { if (closedWindowState) { let newWindowState; if ( @@ -10,7 +10,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e !lazy.SessionStartup.willRestore() ) { // We want to split the window up into pinned tabs and unpinned tabs. -@@ -2353,11 +2352,9 @@ var SessionStoreInternal = { +@@ -2368,11 +2367,9 @@ var SessionStoreInternal = { tabbrowser.selectedTab.label; } @@ -22,7 +22,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e // Store the window's close date to figure out when each individual tab // was closed. This timestamp should allow re-arranging data based on how -@@ -3303,7 +3300,7 @@ var SessionStoreInternal = { +@@ -3357,7 +3354,7 @@ var SessionStoreInternal = { if (!isPrivateWindow && tabState.isPrivate) { return; } @@ -31,7 +31,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e return; } -@@ -4012,6 +4009,11 @@ var SessionStoreInternal = { +@@ -4069,6 +4066,11 @@ var SessionStoreInternal = { Math.min(tabState.index, tabState.entries.length) ); tabState.pinned = false; @@ -43,7 +43,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e if (inBackground === false) { aWindow.gBrowser.selectedTab = newTab; -@@ -4448,6 +4450,7 @@ var SessionStoreInternal = { +@@ -4505,6 +4507,7 @@ var SessionStoreInternal = { // Append the tab if we're opening into a different window, tabIndex: aSource == aTargetWindow ? pos : Infinity, pinned: state.pinned, @@ -51,7 +51,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e userContextId: state.userContextId, skipLoad: true, preferredRemoteType, -@@ -5303,7 +5306,7 @@ var SessionStoreInternal = { +@@ -5360,7 +5363,7 @@ var SessionStoreInternal = { for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) { let tab = tabbrowser.tabs[i]; @@ -60,7 +60,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e removableTabs.push(tab); } } -@@ -5363,7 +5366,7 @@ var SessionStoreInternal = { +@@ -5420,7 +5423,7 @@ var SessionStoreInternal = { } let workspaceID = aWindow.getWorkspaceID(); @@ -69,7 +69,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e winData.workspaceID = workspaceID; } }, -@@ -5554,11 +5557,12 @@ var SessionStoreInternal = { +@@ -5611,11 +5614,12 @@ var SessionStoreInternal = { } let tabbrowser = aWindow.gBrowser; @@ -83,7 +83,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e // update the internal state data for this window for (let tab of tabs) { if (tab == aWindow.FirefoxViewHandler.tab) { -@@ -5569,6 +5573,7 @@ var SessionStoreInternal = { +@@ -5626,6 +5630,7 @@ var SessionStoreInternal = { tabsData.push(tabData); } @@ -91,7 +91,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e // update tab group state for this window winData.groups = []; for (let tabGroup of aWindow.gBrowser.tabGroups) { -@@ -5581,7 +5586,7 @@ var SessionStoreInternal = { +@@ -5638,7 +5643,7 @@ var SessionStoreInternal = { // a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab, // since it's only inserted into the tab strip after it's selected). if (aWindow.FirefoxViewHandler.tab?.selected) { @@ -100,7 +100,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e winData.title = tabbrowser.tabs[0].label; } winData.selected = selectedIndex; -@@ -5693,8 +5698,8 @@ var SessionStoreInternal = { +@@ -5750,8 +5755,8 @@ var SessionStoreInternal = { // selectTab represents. let selectTab = 0; if (overwriteTabs) { @@ -111,7 +111,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e selectTab = Math.min(selectTab, winData.tabs.length); } -@@ -5737,6 +5742,8 @@ var SessionStoreInternal = { +@@ -5794,6 +5799,8 @@ var SessionStoreInternal = { winData.tabs, winData.groups ?? [] ); @@ -120,7 +120,7 @@ index be029379c101a0105d4837136e064e6007b67c3e..cfa861920b15c2f535f1d9351425e29e this._log.debug( `restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs` ); -@@ -6286,6 +6293,22 @@ var SessionStoreInternal = { +@@ -6351,6 +6358,22 @@ var SessionStoreInternal = { // Most of tabData has been restored, now continue with restoring // attributes that may trigger external events. diff --git a/src/browser/components/tabbrowser/content/tab-js.patch b/src/browser/components/tabbrowser/content/tab-js.patch index e6e615061..46135a48e 100644 --- a/src/browser/components/tabbrowser/content/tab-js.patch +++ b/src/browser/components/tabbrowser/content/tab-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js -index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d678dd81594 100644 +index f261f0f2c7945cbdb41e5d1b6067a8db38bef117..32e21e1295aa508a2b8dc6b8a0ea4d678dd81594 100644 --- a/browser/components/tabbrowser/content/tab.js +++ b/browser/components/tabbrowser/content/tab.js @@ -21,6 +21,7 @@ @@ -42,11 +42,13 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 return; } -@@ -224,7 +227,19 @@ +@@ -224,9 +227,19 @@ } get visible() { -- return this.isOpen && !this.hidden && !this.group?.collapsed; +- return ( +- this.isOpen && !this.hidden && (!this.group?.collapsed || this.selected) +- ); + if (!this.isOpen || this.hidden || this.hasAttribute("zen-empty-tab")) { + return false; + } @@ -63,7 +65,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 } get hidden() { -@@ -295,7 +310,7 @@ +@@ -297,7 +310,7 @@ return false; } @@ -72,7 +74,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 } get lastAccessed() { -@@ -372,8 +387,11 @@ +@@ -374,8 +387,11 @@ } get group() { @@ -86,7 +88,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 } return null; } -@@ -467,6 +485,8 @@ +@@ -469,6 +485,8 @@ this.style.MozUserFocus = "ignore"; } else if ( event.target.classList.contains("tab-close-button") || @@ -95,7 +97,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 event.target.classList.contains("tab-icon-overlay") || event.target.classList.contains("tab-audio-button") ) { -@@ -521,6 +541,10 @@ +@@ -523,6 +541,10 @@ this.style.MozUserFocus = ""; } @@ -106,7 +108,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 on_click(event) { if (event.button != 0) { return; -@@ -569,6 +593,7 @@ +@@ -571,6 +593,7 @@ ) ); } else { @@ -114,7 +116,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 gBrowser.removeTab(this, { animate: true, triggeringEvent: event, -@@ -581,6 +606,14 @@ +@@ -583,6 +606,14 @@ // (see tabbrowser-tabs 'click' handler). gBrowser.tabContainer._blockDblClick = true; } @@ -129,7 +131,7 @@ index e5509953509c4da8756e36a0792f76814e24ba0c..32e21e1295aa508a2b8dc6b8a0ea4d67 } on_dblclick(event) { -@@ -604,6 +637,8 @@ +@@ -606,6 +637,8 @@ animate: true, triggeringEvent: event, }); diff --git a/src/browser/components/tabbrowser/content/tabbrowser-js.patch b/src/browser/components/tabbrowser/content/tabbrowser-js.patch index d1ecef12f..6983a7294 100644 --- a/src/browser/components/tabbrowser/content/tabbrowser-js.patch +++ b/src/browser/components/tabbrowser/content/tabbrowser-js.patch @@ -1,14 +1,11 @@ diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js -index 96fd8acdc0..a8abf1597f 100644 +index d80a66a01002e78a9c65545d08fe786328ddf124..5c784c911fcd30353744a79caad9bb42b1257c3f 100644 --- a/browser/components/tabbrowser/content/tabbrowser.js +++ b/browser/components/tabbrowser/content/tabbrowser.js @@ -422,15 +422,60 @@ return this.tabContainer.visibleTabs; } -- get pinnedTabCount() { -- for (var i = 0; i < this.tabs.length; i++) { -- if (!this.tabs[i].pinned) { + get _numVisiblePinTabsWithoutCollapsed() { + let i = 0; + for (let item of this.tabContainer.ariaFocusableItems) { @@ -17,15 +14,15 @@ index 96fd8acdc0..a8abf1597f 100644 + continue; + } + if (!item.pinned && !item.hasAttribute("zen-glance-tab")) { - break; - } ++ break; ++ } + if (item.visible) { + i += !item.hasAttribute("zen-glance-tab"); + } - } - return i; - } - ++ } ++ return i; ++ } ++ + ungroupTabsUntilNoActive(tab) { + if (!tab || !tab.group) return; + const activeGroups = tab.group.activeGroups; @@ -48,17 +45,19 @@ index 96fd8acdc0..a8abf1597f 100644 + return i; + } + -+ get pinnedTabCount() { + get pinnedTabCount() { +- for (var i = 0; i < this.tabs.length; i++) { +- if (!this.tabs[i].pinned) { + let i = 0; + for (let tab of this.tabs) { + if (!tab.pinned && !tab.hasAttribute("zen-glance-tab")) { -+ break; -+ } + break; + } + i += !tab.hasAttribute("zen-glance-tab"); -+ } -+ return i; -+ } -+ + } + return i; + } + + get tabsWithoutGlance() { + return this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab")); + } @@ -294,7 +293,7 @@ index 96fd8acdc0..a8abf1597f 100644 } if (!color) { -@@ -3040,9 +3132,14 @@ +@@ -3040,9 +3132,13 @@ label, isAdoptingGroup ); @@ -304,14 +303,13 @@ index 96fd8acdc0..a8abf1597f 100644 + } + group.essential = tabs.some(tab => tab.hasAttribute("essential")); + group.pinned = group.essential || tabs.some(tab => tab.pinned); -+ if (forSplitView) insertBefore = insertBefore.group; + insertBefore.before( group, - insertBefore?.group ?? insertBefore ); group.addTabs(tabs); -@@ -3163,7 +3260,7 @@ +@@ -3163,7 +3259,7 @@ } this.#handleTabMove(tab, () => @@ -320,7 +318,7 @@ index 96fd8acdc0..a8abf1597f 100644 ); } -@@ -3357,6 +3454,7 @@ +@@ -3365,6 +3461,7 @@ openWindowInfo, skipLoad, triggeringRemoteType, @@ -328,7 +326,7 @@ index 96fd8acdc0..a8abf1597f 100644 } ) { // If we don't have a preferred remote type (or it is `NOT_REMOTE`), and -@@ -3426,6 +3524,7 @@ +@@ -3434,6 +3531,7 @@ openWindowInfo, name, skipLoad, @@ -336,7 +334,7 @@ index 96fd8acdc0..a8abf1597f 100644 }); } -@@ -3613,7 +3712,7 @@ +@@ -3621,7 +3719,7 @@ // Add a new tab if needed. if (!tab) { let createLazyBrowser = @@ -345,7 +343,7 @@ index 96fd8acdc0..a8abf1597f 100644 let url = "about:blank"; if (tabData.entries?.length) { -@@ -3650,8 +3749,10 @@ +@@ -3658,8 +3756,10 @@ insertTab: false, skipLoad: true, preferredRemoteType, @@ -357,7 +355,7 @@ index 96fd8acdc0..a8abf1597f 100644 if (select) { tabToSelect = tab; } -@@ -3663,7 +3764,8 @@ +@@ -3671,7 +3771,8 @@ this.pinTab(tab); // Then ensure all the tab open/pinning information is sent. this._fireTabOpen(tab, {}); @@ -367,7 +365,7 @@ index 96fd8acdc0..a8abf1597f 100644 let { groupId } = tabData; const tabGroup = tabGroupWorkingData.get(groupId); // if a tab refers to a tab group we don't know, skip any group -@@ -3677,7 +3779,10 @@ +@@ -3685,7 +3786,10 @@ tabGroup.stateData.id, tabGroup.stateData.color, tabGroup.stateData.collapsed, @@ -379,7 +377,7 @@ index 96fd8acdc0..a8abf1597f 100644 ); tabsFragment.appendChild(tabGroup.node); } -@@ -3722,9 +3827,23 @@ +@@ -3730,9 +3834,23 @@ // to remove the old selected tab. if (tabToSelect) { let leftoverTab = this.selectedTab; @@ -395,15 +393,15 @@ index 96fd8acdc0..a8abf1597f 100644 + gZenWorkspaces._initialTab._shouldRemove = true; + } + } - } ++ } + else { + gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab; -+ } + } + this._hasAlreadyInitializedZenSessionStore = true; if (tabs.length > 1 || !tabs[0].selected) { this._updateTabsAfterInsert(); -@@ -3919,7 +4038,7 @@ +@@ -3927,7 +4045,7 @@ // Ensure we have an index if one was not provided. if (typeof elementIndex != "number" && typeof tabIndex != "number") { // Move the new tab after another tab if needed, to the end otherwise. @@ -412,7 +410,7 @@ index 96fd8acdc0..a8abf1597f 100644 if ( !bulkOrderedOpen && ((openerTab && -@@ -3931,7 +4050,7 @@ +@@ -3939,7 +4057,7 @@ let lastRelatedTab = openerTab && this._lastRelatedTabMap.get(openerTab); let previousTab = lastRelatedTab || openerTab || this.selectedTab; @@ -421,7 +419,7 @@ index 96fd8acdc0..a8abf1597f 100644 tabGroup = previousTab.group; } if ( -@@ -3942,7 +4061,7 @@ +@@ -3950,7 +4068,7 @@ ) { elementIndex = Infinity; } else if (previousTab.visible) { @@ -430,7 +428,7 @@ index 96fd8acdc0..a8abf1597f 100644 } else if (previousTab == FirefoxViewHandler.tab) { elementIndex = 0; } -@@ -3970,14 +4089,14 @@ +@@ -3978,14 +4096,14 @@ } // Ensure index is within bounds. if (tab.pinned) { @@ -447,9 +445,9 @@ index 96fd8acdc0..a8abf1597f 100644 - let itemAfter = allItems.at(index); + let itemAfter = gZenGlanceManager.getTabOrGlanceParent(allItems.at(index)); - // Prevent a flash of unstyled content by setting up the tab content - // and inherited attributes before appending it (see Bug 1592054): -@@ -3985,7 +4104,7 @@ + if (pinned && !itemAfter?.pinned) { + itemAfter = null; +@@ -3996,7 +4114,7 @@ this.tabContainer._invalidateCachedTabs(); @@ -458,7 +456,7 @@ index 96fd8acdc0..a8abf1597f 100644 if (this.isTab(itemAfter) && itemAfter.group == tabGroup) { // Place at the front of, or between tabs in, the same tab group this.tabContainer.insertBefore(tab, itemAfter); -@@ -4018,6 +4137,7 @@ +@@ -4032,6 +4150,7 @@ if (pinned) { this._updateTabBarForPinnedTabs(); } @@ -466,7 +464,7 @@ index 96fd8acdc0..a8abf1597f 100644 TabBarVisibility.update(); } -@@ -4307,6 +4427,9 @@ +@@ -4321,6 +4440,9 @@ return; } @@ -476,7 +474,7 @@ index 96fd8acdc0..a8abf1597f 100644 this.removeTabs(selectedTabs, { isUserTriggered, telemetrySource }); } -@@ -4568,6 +4691,7 @@ +@@ -4582,6 +4704,7 @@ telemetrySource, } = {} ) { @@ -484,7 +482,7 @@ index 96fd8acdc0..a8abf1597f 100644 // When 'closeWindowWithLastTab' pref is enabled, closing all tabs // can be considered equivalent to closing the window. if ( -@@ -4657,6 +4781,7 @@ +@@ -4671,6 +4794,7 @@ if (lastToClose) { this.removeTab(lastToClose, aParams); } @@ -492,7 +490,7 @@ index 96fd8acdc0..a8abf1597f 100644 } catch (e) { console.error(e); } -@@ -4695,6 +4820,12 @@ +@@ -4709,6 +4833,12 @@ aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start(); } @@ -505,7 +503,7 @@ index 96fd8acdc0..a8abf1597f 100644 // Handle requests for synchronously removing an already // asynchronously closing tab. if (!animate && aTab.closing) { -@@ -4709,6 +4840,9 @@ +@@ -4723,6 +4853,9 @@ // state). let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width; let isLastTab = this.#isLastTabInWindow(aTab); @@ -515,7 +513,7 @@ index 96fd8acdc0..a8abf1597f 100644 if ( !this._beginRemoveTab(aTab, { closeWindowFastpath: true, -@@ -4891,7 +5025,7 @@ +@@ -4905,7 +5038,7 @@ closeWindowWithLastTab != null ? closeWindowWithLastTab : !window.toolbar.visible || @@ -524,7 +522,7 @@ index 96fd8acdc0..a8abf1597f 100644 if (closeWindow) { // We've already called beforeunload on all the relevant tabs if we get here, -@@ -4915,6 +5049,7 @@ +@@ -4929,6 +5062,7 @@ newTab = true; } @@ -532,18 +530,22 @@ index 96fd8acdc0..a8abf1597f 100644 aTab._endRemoveArgs = [closeWindow, newTab]; // swapBrowsersAndCloseOther will take care of closing the window without animation. -@@ -4955,9 +5090,7 @@ +@@ -4969,13 +5103,7 @@ aTab._mouseleave(); if (newTab) { - this.addTrustedTab(BROWSER_NEW_TAB_URL, { - skipAnimation: true, +- // In the event that insertAfterCurrent is set and the current tab is +- // inside a group that is being closed we want to avoid creating the +- // new tab inside that group. +- tabIndex: 0, - }); + gZenWorkspaces.selectEmptyTab(BROWSER_NEW_TAB_URL); } else { TabBarVisibility.update(); } -@@ -5090,6 +5223,7 @@ +@@ -5108,6 +5236,7 @@ this.tabs[i]._tPos = i; } @@ -551,7 +553,7 @@ index 96fd8acdc0..a8abf1597f 100644 if (!this._windowIsClosing) { // update tab close buttons state this.tabContainer._updateCloseButtons(); -@@ -5302,6 +5436,7 @@ +@@ -5320,6 +5449,7 @@ } let excludeTabs = new Set(aExcludeTabs); @@ -559,7 +561,7 @@ index 96fd8acdc0..a8abf1597f 100644 // If this tab has a successor, it should be selectable, since // hiding or closing a tab removes that tab as a successor. -@@ -5314,13 +5449,13 @@ +@@ -5332,13 +5462,13 @@ !excludeTabs.has(aTab.owner) && Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose") ) { @@ -575,7 +577,7 @@ index 96fd8acdc0..a8abf1597f 100644 ); let tab = this.tabContainer.findNextTab(aTab, { -@@ -5336,7 +5471,7 @@ +@@ -5354,7 +5484,7 @@ } if (tab) { @@ -584,7 +586,7 @@ index 96fd8acdc0..a8abf1597f 100644 } // If no qualifying visible tab was found, see if there is a tab in -@@ -5357,7 +5492,7 @@ +@@ -5375,7 +5505,7 @@ }); } @@ -593,7 +595,7 @@ index 96fd8acdc0..a8abf1597f 100644 } _blurTab(aTab) { -@@ -5759,10 +5894,10 @@ +@@ -5777,10 +5907,10 @@ SessionStore.deleteCustomTabValue(aTab, "hiddenBy"); } @@ -606,7 +608,7 @@ index 96fd8acdc0..a8abf1597f 100644 aTab.selected || aTab.closing || // Tabs that are sharing the screen, microphone or camera cannot be hidden. -@@ -5952,7 +6087,7 @@ +@@ -5972,7 +6102,7 @@ * `true` if element is a `` */ isTabGroup(element) { @@ -615,7 +617,7 @@ index 96fd8acdc0..a8abf1597f 100644 } /** -@@ -6029,7 +6164,7 @@ +@@ -6049,7 +6179,7 @@ // Don't allow mixing pinned and unpinned tabs. if (this.isTab(element) && element.pinned) { @@ -624,7 +626,7 @@ index 96fd8acdc0..a8abf1597f 100644 } else { tabIndex = Math.max(tabIndex, this.pinnedTabCount); } -@@ -6055,10 +6190,16 @@ +@@ -6075,10 +6205,16 @@ this.#handleTabMove( element, () => { @@ -643,7 +645,7 @@ index 96fd8acdc0..a8abf1597f 100644 if (neighbor && this.isTab(element) && tabIndex > element._tPos) { neighbor.after(element); } else { -@@ -6116,22 +6257,26 @@ +@@ -6136,22 +6272,26 @@ #moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) { if (this.isTabGroupLabel(targetElement)) { targetElement = targetElement.group; @@ -676,7 +678,7 @@ index 96fd8acdc0..a8abf1597f 100644 moveBefore = false; } else if (!element.pinned && targetElement && targetElement.pinned) { // If the caller asks to move an unpinned element next to a pinned -@@ -6145,14 +6290,18 @@ +@@ -6165,14 +6305,18 @@ // move the tab group right before the first unpinned tab. // 4. Moving a tab group and the first unpinned tab is grouped: // move the tab group right before the first unpinned tab's tab group. @@ -696,7 +698,7 @@ index 96fd8acdc0..a8abf1597f 100644 element.pinned ? this.tabContainer.pinnedTabsContainer : this.tabContainer; -@@ -6161,7 +6310,7 @@ +@@ -6181,7 +6325,7 @@ element, () => { if (moveBefore) { @@ -705,7 +707,7 @@ index 96fd8acdc0..a8abf1597f 100644 } else if (targetElement) { targetElement.after(element); } else { -@@ -6210,7 +6359,7 @@ +@@ -6230,7 +6374,7 @@ if (!this.isTab(aTab)) { throw new Error("Can only move a tab into a tab group"); } @@ -714,7 +716,7 @@ index 96fd8acdc0..a8abf1597f 100644 return; } if (aTab.group && aTab.group.id === aGroup.id) { -@@ -6304,6 +6453,10 @@ +@@ -6324,6 +6468,10 @@ moveActionCallback(); @@ -725,7 +727,7 @@ index 96fd8acdc0..a8abf1597f 100644 // Clear tabs cache after moving nodes because the order of tabs may have // changed. this.tabContainer._invalidateCachedTabs(); -@@ -7198,7 +7351,7 @@ +@@ -7221,7 +7369,7 @@ // preventDefault(). It will still raise the window if appropriate. break; } @@ -734,7 +736,7 @@ index 96fd8acdc0..a8abf1597f 100644 window.focus(); aEvent.preventDefault(); break; -@@ -8143,6 +8296,7 @@ +@@ -8166,6 +8314,7 @@ aWebProgress.isTopLevel ) { this.mTab.setAttribute("busy", "true"); @@ -742,16 +744,16 @@ index 96fd8acdc0..a8abf1597f 100644 gBrowser._tabAttrModified(this.mTab, ["busy"]); this.mTab._notselectedsinceload = !this.mTab.selected; } -@@ -9108,7 +9262,7 @@ var TabContextMenu = { +@@ -9157,7 +9306,7 @@ var TabContextMenu = { ); contextUnpinSelectedTabs.hidden = !this.contextTab.pinned || !this.multiselected; - + gZenPinnedTabManager.updatePinnedTabContextMenu(this.contextTab); - // Move Tab items - let contextMoveTabOptions = document.getElementById( - "context_moveTabOptions" -@@ -9384,6 +9538,7 @@ var TabContextMenu = { + // Build Ask Chat items + TabContextMenu.GenAI.buildTabMenu( + document.getElementById("context_askChat"), +@@ -9476,6 +9625,7 @@ var TabContextMenu = { ) ); } else { diff --git a/src/browser/components/tabbrowser/content/tabgroup-js.patch b/src/browser/components/tabbrowser/content/tabgroup-js.patch index ef0cb6b68..f4df09326 100644 --- a/src/browser/components/tabbrowser/content/tabgroup-js.patch +++ b/src/browser/components/tabbrowser/content/tabgroup-js.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js -index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1fda11a48c 100644 +index caea196b22b4689f55780a528661d87b52f4e728..43d815218d652055378f50cb577086f3f01b681a 100644 --- a/browser/components/tabbrowser/content/tabgroup.js +++ b/browser/components/tabbrowser/content/tabgroup.js @@ -13,10 +13,12 @@ @@ -15,10 +15,10 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f + + + - `; - - /** @type {string} */ -@@ -45,16 +47,22 @@ + + +@@ -57,20 +59,27 @@ } connectedCallback() { @@ -38,42 +38,44 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f // causes the component to be repositioned in the DOM. - this.#observeTabChanges(); + // Similar to above, always set up TabSelect listener, as this gets + // removed in disconnectedCallback + this.ownerGlobal.addEventListener("TabSelect", this); + - if (this._initialized) { - return; - } + if (!this._initialized) { ++ this._initialized = true; this.saveOnWindowClose = true; -@@ -68,12 +76,14 @@ +@@ -97,11 +106,10 @@ this.#labelElement.container = gBrowser.tabContainer; this.#labelElement.group = this; -- this.#labelElement.addEventListener("click", this); -+ this.querySelector(".tab-group-label-container").addEventListener("click", this); -+ if (!this.isZenFolder) { - this.#labelElement.addEventListener("contextmenu", e => { - e.preventDefault(); - gBrowser.tabGroupMenu.openEditModal(this); - return false; - }); -+ } +- this.#labelElement.addEventListener("contextmenu", e => { +- e.preventDefault(); +- gBrowser.tabGroupMenu.openEditModal(this); +- return false; +- }); ++ this.appendChild = function (child) { ++ this.querySelector(".tab-group-container").appendChild(child); ++ }; ++ this.#updateLabelAriaAttributes(); this.#updateCollapsedAriaAttributes(); -@@ -93,6 +103,11 @@ - // claim that a tab group was created by adoption the first time it +@@ -127,6 +135,8 @@ // mounts after getting created by `Tabbrowser.adoptTabGroup`. this.#wasCreatedByAdoption = false; -+ this.appendChild = function (child) { -+ this.querySelector(".tab-group-container").appendChild(child); -+ } -+ } -+ this.#observeTabChanges(); } ++ this.#observeTabChanges(); ++ } - disconnectedCallback() { -@@ -123,7 +138,10 @@ + resetDefaultGroupName = () => { + this.#defaultGroupName = ""; +@@ -197,7 +207,10 @@ } }); } @@ -85,15 +87,12 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f } get color() { -@@ -172,7 +190,6 @@ - // always create a text node and get consistent layout. - this.setAttribute("label", val || "\u200b"); - -- this.dataset.tooltip = val; - - this.#updateLabelAriaAttributes(); - if (diff) { -@@ -244,7 +261,53 @@ +@@ -338,12 +351,57 @@ + tabGroupName, + }) + .then(result => { +- this.dataset.tooltip = result; + }); } get tabs() { @@ -148,7 +147,7 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f } /** -@@ -270,7 +333,7 @@ +@@ -373,7 +431,7 @@ */ addTabs(tabs, metricsContext) { for (let tab of tabs) { @@ -157,16 +156,16 @@ index 2ed2fa02b16013e40a32391b3dba0a4301d65262..aea9fb03dbc28a524ec5a26e76510b1f tab.ownerGlobal.gBrowser.unpinTab(tab); } let tabToMove = -@@ -333,7 +396,7 @@ - * @param {PointerEvent} event +@@ -437,7 +495,7 @@ */ on_click(event) { -- if (event.target === this.#labelElement && event.button === 0) { -+ if (event.target.closest('.tab-group-label-container') && event.button === 0) { + let isToggleElement = +- event.target === this.#labelElement || ++ event.target.closest(".tab-group-label-container") || + event.target === this.#overflowCountLabel; + if (isToggleElement && event.button === 0) { event.preventDefault(); - this.collapsed = !this.collapsed; - gBrowser.tabGroupMenu.close(); -@@ -364,5 +427,6 @@ +@@ -470,5 +528,6 @@ } } diff --git a/src/browser/components/tabbrowser/content/tabs-js.patch b/src/browser/components/tabbrowser/content/tabs-js.patch index 99eae47d6..259aa77d6 100644 --- a/src/browser/components/tabbrowser/content/tabs-js.patch +++ b/src/browser/components/tabbrowser/content/tabs-js.patch @@ -1,16 +1,8 @@ diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js -index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d784cc9da0 100644 +index e47f735e4e4563c9b7537944628418d1478c068d..e8e52b56ba2eca562186512363d90e38c4d3dffe 100644 --- a/browser/components/tabbrowser/content/tabs.js +++ b/browser/components/tabbrowser/content/tabs.js -@@ -289,6 +289,7 @@ - on_TabGroupCollapse(event) { - this._invalidateCachedVisibleTabs(); - this._unlockTabSizing(); -+ return; - - // If the user's selected tab is in the collapsing group, kick them off - // the tab. If no tabs exist outside the group, create a new one and -@@ -345,7 +346,7 @@ +@@ -332,7 +332,7 @@ // and we're not hitting the scroll buttons. if ( event.button != 0 || @@ -19,7 +11,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 event.composedTarget.localName == "toolbarbutton" ) { return; -@@ -695,7 +696,7 @@ +@@ -686,7 +686,7 @@ if (this.#isContainerVerticalPinnedGrid(tab)) { // In expanded vertical mode, the max number of pinned tabs per row is dynamic // Set this before adjusting dragged tab's position @@ -28,14 +20,10 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let tabsPerRow = 0; let position = RTL_UI ? window.windowUtils.getBoundsWithoutFlushing( -@@ -777,11 +778,12 @@ - +@@ -773,8 +773,9 @@ if (tab.multiselected) { this.#moveTogetherSelectedTabs(tab); -- } else if (isTabGroupLabel(tab) && !tab.group.collapsed) { -+ } else if (isTabGroupLabel(tab)) { - this._lockTabSizing(); - this.#keepTabSizeLocked = true; + } else if (isTabGroupLabel(tab) && !tab.group.collapsed) { - tab.group.collapsed = true; - expandGroupOnDrop = true; + tab.group.collapsed = !tab.group.hasAttribute("split-view-group"); @@ -44,7 +32,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } } -@@ -879,7 +881,7 @@ +@@ -872,7 +873,7 @@ ? event.screenY - window.screenY - tabOffset : event.screenY - window.screenY, scrollPos: @@ -53,18 +41,18 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 ? this.pinnedTabsContainer.scrollPosition : this.arrowScrollbox.scrollPosition, screenX: event.screenX, -@@ -933,6 +935,10 @@ +@@ -933,6 +934,10 @@ } let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0); -+ if (draggedTab && effects === "move") { ++ if (draggedTab && dropEffect === "move") { + gZenPinnedTabManager.applyDragoverClass(event, draggedTab); + gZenViewSplitter.onBrowserDragEndToSplit(event); + } if ( - (effects == "move" || effects == "copy") && + (dropEffect == "move" || dropEffect == "copy") && document == draggedTab.ownerDocument && -@@ -1060,7 +1066,9 @@ +@@ -1060,7 +1065,9 @@ isTabGroupLabel(draggedTab) && draggedTab._dragData?.expandGroupOnDrop ) { @@ -72,10 +60,10 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 + const isActive = draggedTab.group.hasAttribute("has-active"); + draggedTab.group.collapsed = isActive; + if (isActive) gZenFolders.expandVisibleTab(draggedTab.group); - this.#keepTabSizeLocked = false; - this._unlockTabSizing(); } -@@ -1089,6 +1097,18 @@ + } + +@@ -1096,6 +1103,18 @@ this._tabDropIndicator.hidden = true; event.stopPropagation(); @@ -94,15 +82,21 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 if (draggedTab && dropEffect == "copy") { let duplicatedDraggedTab; let duplicatedTabs = []; -@@ -1127,11 +1147,12 @@ - newTranslateY -= tabHeight; +@@ -1120,8 +1139,9 @@ + let translateOffsetY = oldTranslateY % tabHeight; + let newTranslateX = oldTranslateX - translateOffsetX; + let newTranslateY = oldTranslateY - translateOffsetY; +- let isPinned = draggedTab.pinned; +- let numPinned = gBrowser.pinnedTabCount; ++ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned; ++ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed; ++ let essential = draggedTab.hasAttribute("zen-essential"); + + if (this.#isContainerVerticalPinnedGrid(draggedTab)) { + // Update both translate axis for pinned vertical expanded tabs +@@ -1137,8 +1157,8 @@ } } else { -- let isPinned = draggedTab.pinned; -- let numPinned = gBrowser.pinnedTabCount; -+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned; -+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed; -+ let essential = draggedTab.hasAttribute("zen-essential"); let tabs = this.ariaFocusableItems.slice( - isPinned ? 0 : numPinned, - isPinned ? numPinned : undefined @@ -111,15 +105,29 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 ); let size = this.verticalMode ? "height" : "width"; let screenAxis = this.verticalMode ? "screenY" : "screenX"; -@@ -1181,6 +1202,7 @@ +@@ -1179,11 +1199,9 @@ + } + + let shouldPin = +- numPinned && +- this.pinnedTabsContainer.contains(event.target) && +- !draggedTab.pinned; ++ false; + let shouldUnpin = +- this.arrowScrollbox.contains(event.target) && draggedTab.pinned; ++ false; + let shouldTranslate = + !gReduceMotion && + !shouldCreateGroupOnDrop && +@@ -1196,6 +1214,7 @@ (oldTranslateY && oldTranslateY != newTranslateY); } else if (this.verticalMode) { shouldTranslate &&= oldTranslateY && oldTranslateY != newTranslateY; -+ shouldTranslate = false; // TODO: Find a way to animate vertical tab moves. ++ shouldTranslate = false; } else { shouldTranslate &&= oldTranslateX && oldTranslateX != newTranslateX; } -@@ -1349,6 +1371,7 @@ +@@ -1379,6 +1398,7 @@ let nextItem = this.ariaFocusableItems[newIndex]; let tabGroup = isTab(nextItem) && nextItem.group; @@ -127,7 +135,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 gBrowser.loadTabs(urls, { inBackground, replace, -@@ -1381,6 +1404,17 @@ +@@ -1411,6 +1431,17 @@ this.finishMoveTogetherSelectedTabs(draggedTab); this.finishAnimateTabMove(); @@ -142,10 +150,10 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 + if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false; + } + + this.#keepTabSizeLocked = false; + this._unlockTabSizing(); this.#expandGroupOnDrop(draggedTab); - - if ( -@@ -1607,7 +1641,7 @@ +@@ -1640,7 +1671,7 @@ } get newTabButton() { @@ -154,7 +162,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } get verticalMode() { -@@ -1623,6 +1657,7 @@ +@@ -1656,6 +1687,7 @@ } get overflowing() { @@ -162,7 +170,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 return this.hasAttribute("overflow"); } -@@ -1631,26 +1666,54 @@ +@@ -1664,26 +1696,54 @@ if (this.#allTabs) { return this.#allTabs; } @@ -224,7 +232,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } /** -@@ -1717,33 +1780,27 @@ +@@ -1750,32 +1810,27 @@ let elementIndex = 0; @@ -243,17 +251,18 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } else if (isTabGroup(child)) { child.labelElement.elementIndex = elementIndex++; focusableItems.push(child.labelElement); -- if (!child.collapsed) { -- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible); -- visibleTabsInGroup.forEach(tab => { +- +- let visibleTabsInGroup = child.tabs.filter(tab => tab.visible); +- visibleTabsInGroup.forEach(tab => { +- tab.elementIndex = elementIndex++; +- }); + if (!child.hasAttribute("split-view-group")) { -+ let visibleTabsAndGroupsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible); -+ visibleTabsAndGroupsInGroup.forEach(tab => { - tab.elementIndex = elementIndex++; - }); -- focusableItems.push(...visibleTabsInGroup); -+ focusableItems.push(...visibleTabsAndGroupsInGroup); - } ++ let visibleTabsInGroup = child.childGroupsAndTabs.filter(tab => tab.visible); ++ visibleTabsInGroup.forEach(tab => { ++ tab.elementIndex = elementIndex++; ++ }); + focusableItems.push(...visibleTabsInGroup); ++ } } } @@ -265,7 +274,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 return this.#focusableItems; } -@@ -1751,6 +1808,7 @@ +@@ -1783,6 +1838,7 @@ _invalidateCachedTabs() { this.#allTabs = null; this._invalidateCachedVisibleTabs(); @@ -273,7 +282,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } _invalidateCachedVisibleTabs() { -@@ -1766,8 +1824,8 @@ +@@ -1798,8 +1854,8 @@ #isContainerVerticalPinnedGrid(tab) { return ( this.verticalMode && @@ -284,7 +293,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 !this.expandOnHover ); } -@@ -1783,7 +1841,7 @@ +@@ -1815,7 +1871,7 @@ if (node == null) { // We have a container for non-tab elements at the end of the scrollbox. @@ -293,7 +302,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } node.before(tab); -@@ -1878,7 +1936,7 @@ +@@ -1910,7 +1966,7 @@ // There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and // for when the tab strip is overflowed (which is shared by vertical and horizontal tabs); // Attach the long click popup to all of them. @@ -302,7 +311,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 const newTab2 = this.newTabButton; const newTabVertical = document.getElementById( "vertical-tabs-newtab-button" -@@ -1973,10 +2031,12 @@ +@@ -2005,10 +2061,12 @@ _handleTabSelect(aInstant) { let selectedTab = this.selectedItem; @@ -315,7 +324,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 selectedTab._notselectedsinceload = false; } -@@ -2130,7 +2190,7 @@ +@@ -2152,6 +2210,7 @@ + when the tab is first selected to be dragged. + */ + #updateTabStylesOnDrag(tab) { ++ return; + let isPinned = tab.pinned; + let numPinned = gBrowser.pinnedTabCount; + let allTabs = this.ariaFocusableItems; +@@ -2385,7 +2444,7 @@ return; } @@ -324,7 +341,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let directionX = screenX > dragData.animLastScreenX; let directionY = screenY > dragData.animLastScreenY; -@@ -2139,6 +2199,8 @@ +@@ -2394,6 +2453,8 @@ let { width: tabWidth, height: tabHeight } = draggedTab.getBoundingClientRect(); @@ -333,16 +350,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let shiftSizeX = tabWidth * movingTabs.length; let shiftSizeY = tabHeight; dragData.tabWidth = tabWidth; -@@ -2168,7 +2230,7 @@ - let translateX = screenX - dragData.screenX; - let translateY = screenY - dragData.screenY; - translateY += -- this.pinnedTabsContainer.scrollPosition - dragData.scrollPos; -+ dragData.scrollPos; - let firstBoundX = firstTabInRow.screenX - firstMovingTabScreenX; - let firstBoundY = firstTabInRow.screenY - firstMovingTabScreenY; - let lastBoundX = -@@ -2294,7 +2356,7 @@ +@@ -2547,7 +2608,7 @@ } dragData.animDropElementIndex = newIndex; @@ -351,7 +359,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 dragData.dropBefore = newIndex < tabs.length; // Shift background tabs to leave a gap where the dragged tab -@@ -2327,12 +2389,17 @@ +@@ -2580,13 +2641,18 @@ this.#clearDragOverCreateGroupTimer(); @@ -361,7 +369,8 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 + let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed; + let essential = draggedTab.hasAttribute("zen-essential"); + const isDraggingFolder = isTabGroupLabel(draggedTab) && draggedTab.group?.isZenFolder; - let tabs = this.ariaFocusableItems.slice( + let allTabs = this.ariaFocusableItems; + let tabs = allTabs.slice( - isPinned ? 0 : numPinned, - isPinned ? numPinned : undefined + (isPinned && essential) ? 0 : gBrowser._numZenEssentials, @@ -373,17 +382,17 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 if (this.#rtlMode) { tabs.reverse(); -@@ -2346,7 +2413,7 @@ +@@ -2597,7 +2663,7 @@ + let screenAxis = this.verticalMode ? "screenY" : "screenX"; let size = this.verticalMode ? "height" : "width"; let translateAxis = this.verticalMode ? "translateY" : "translateX"; - let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft"; - let { width: tabWidth, height: tabHeight } = bounds(draggedTab); + let { width: tabWidth, height: tabHeight } = bounds(draggedTab.group?.hasAttribute("split-view-group") ? draggedTab.group : draggedTab); let translateX = event.screenX - dragData.screenX; let translateY = event.screenY - dragData.screenY; -@@ -2360,12 +2427,18 @@ - let lastTab = tabs.at(-1); +@@ -2611,6 +2677,12 @@ + let lastTab = allTabs.at(this.#rtlMode ? 0 : -1); let lastMovingTab = movingTabs.at(-1); let firstMovingTab = movingTabs[0]; + if (lastMovingTab.group?.hasAttribute("split-view-group")) { @@ -395,22 +404,15 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let endEdge = ele => ele[screenAxis] + bounds(ele)[size]; let lastMovingTabScreen = endEdge(lastMovingTab); let firstMovingTabScreen = firstMovingTab[screenAxis]; - let shiftSize = lastMovingTabScreen - firstMovingTabScreen; - let translate = screen - dragData[screenAxis]; -- if (!isPinned) { -+ if (true) { - translate += - this.arrowScrollbox.scrollbox[scrollDirection] - dragData.scrollPos; - } else if (isPinned && this.verticalMode) { -@@ -2377,6 +2450,7 @@ - // - for unpinned tabs, between the first and last unpinned tab +@@ -2619,6 +2691,7 @@ + // Constrain the range over which the moving tabs can move between the first and last tab let firstBound = firstTab[screenAxis] - firstMovingTabScreen; let lastBound = endEdge(lastTab) - lastMovingTabScreen; + lastBound = gZenPinnedTabManager.getLastTabBound(lastBound, lastTab, isDraggingFolder); - translate = Math.min(Math.max(translate, firstBound), lastBound); - for (let item of movingTabs) { -@@ -2384,6 +2458,9 @@ + // Center the tab under the cursor if the tab is not under the cursor while dragging + if ( +@@ -2636,6 +2709,9 @@ // Shift the `.tab-group-label-container` to shift the label element. item = item.parentElement; } @@ -420,7 +422,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 item.style.transform = `${translateAxis}(${translate}px)`; } -@@ -2521,6 +2598,9 @@ +@@ -2773,6 +2849,9 @@ break; } let element = tabs[mid]; @@ -430,7 +432,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let elementForSize = isTabGroupLabel(element) ? element.parentElement : element; -@@ -2540,6 +2620,8 @@ +@@ -2792,6 +2871,8 @@ }; let dropElement = getOverlappedElement(); @@ -439,7 +441,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 let newDropElementIndex; if (dropElement) { -@@ -2604,7 +2686,7 @@ +@@ -2856,7 +2937,7 @@ let shouldCreateGroupOnDrop; let dropBefore; if (dropElement) { @@ -448,7 +450,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 ? dropElement.parentElement : dropElement; -@@ -2624,7 +2706,7 @@ +@@ -2876,7 +2957,7 @@ ? Services.prefs.getIntPref( "browser.tabs.dragDrop.moveOverThresholdPercent" ) / 100 @@ -457,7 +459,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 moveOverThreshold = Math.min(1, Math.max(0, moveOverThreshold)); let shouldMoveOver = overlapPercent > moveOverThreshold; if (logicalForward && shouldMoveOver) { -@@ -2656,44 +2738,21 @@ +@@ -2908,44 +2989,21 @@ // If dragging a group over another group, don't make it look like it is // possible to drop the dragged group inside the other group. @@ -507,7 +509,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 // When dragging tab(s) over an ungrouped tab, signal to the user // that dropping the tab(s) will create a new tab group. shouldCreateGroupOnDrop = -@@ -2703,12 +2762,6 @@ +@@ -2955,12 +3013,6 @@ overlapPercent > dragOverGroupingThreshold; if (shouldCreateGroupOnDrop) { @@ -520,7 +522,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } else { this.removeAttribute("movingtab-createGroup"); document -@@ -2735,19 +2788,14 @@ +@@ -2987,19 +3039,14 @@ dropElement = dropElementGroup; colorCode = undefined; } else if (isTabGroupLabel(dropElement)) { @@ -548,7 +550,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } this.#setDragOverGroupColor(colorCode); this.toggleAttribute("movingtab-ungroup", !colorCode); -@@ -2765,19 +2813,28 @@ +@@ -3017,19 +3064,28 @@ dragData.dropElement = dropElement; dragData.dropBefore = dropBefore; dragData.animDropElementIndex = newDropElementIndex; @@ -579,7 +581,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 } item.style.transform = transform; } -@@ -2830,12 +2887,14 @@ +@@ -3082,12 +3138,14 @@ ); } @@ -596,7 +598,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 for (let item of this.ariaFocusableItems) { if (isTabGroupLabel(item)) { -@@ -2843,6 +2902,18 @@ +@@ -3095,6 +3153,18 @@ item = item.parentElement; } item.style.transform = ""; @@ -615,7 +617,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 item.removeAttribute("dragover-createGroup"); } this.removeAttribute("movingtab-createGroup"); -@@ -2889,7 +2960,7 @@ +@@ -3198,7 +3268,7 @@ let postTransitionCleanup = () => { movingTab._moveTogetherSelectedTabsData.animate = false; }; @@ -624,7 +626,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 postTransitionCleanup(); } else { let onTransitionEnd = transitionendEvent => { -@@ -3062,7 +3133,7 @@ +@@ -3371,7 +3441,7 @@ } _notifyBackgroundTab(aTab) { @@ -633,7 +635,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 return; } -@@ -3171,7 +3242,10 @@ +@@ -3480,7 +3550,10 @@ #getDragTarget(event, { ignoreSides = false } = {}) { let { target } = event; while (target) { @@ -645,7 +647,7 @@ index 1fcebe3962398ff1b7cadef657ac8b68a80e720d..1cd2e9f24b3be1717493b4e663bc41d7 break; } target = target.parentNode; -@@ -3188,6 +3262,9 @@ +@@ -3497,6 +3570,9 @@ return null; } } diff --git a/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch b/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch index 00f45ec0b..b15fb4bdd 100644 --- a/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarInput-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs -index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c0268965bbc92b9 100644 +index db1a780f36d16c1b63ad50af76887b16e88ca8fe..dee34ba81aae1fd961e7c01f10e485458c01977c 100644 --- a/browser/components/urlbar/UrlbarInput.sys.mjs +++ b/browser/components/urlbar/UrlbarInput.sys.mjs @@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter( @@ -16,7 +16,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 const DEFAULT_FORM_HISTORY_NAME = "searchbar-history"; const SEARCH_BUTTON_CLASS = "urlbar-search-button"; -@@ -378,7 +385,16 @@ export class UrlbarInput { +@@ -380,7 +387,16 @@ export class UrlbarInput { // See _on_select(). HTMLInputElement.select() dispatches a "select" // event but does not set the primary selection. this._suppressPrimaryAdjustment = true; @@ -33,7 +33,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 this._suppressPrimaryAdjustment = false; } -@@ -454,6 +470,10 @@ export class UrlbarInput { +@@ -456,6 +472,10 @@ export class UrlbarInput { hideSearchTerms = false, isSameDocument = false ) { @@ -44,7 +44,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 // We only need to update the searchModeUI on tab switch conditionally // as we only persist searchMode with ScotchBonnet enabled. if ( -@@ -717,8 +737,16 @@ export class UrlbarInput { +@@ -728,8 +748,16 @@ export class UrlbarInput { return; } } @@ -62,7 +62,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 } /** -@@ -1124,7 +1152,11 @@ export class UrlbarInput { +@@ -1143,7 +1171,11 @@ export class UrlbarInput { } if (!this.#providesSearchMode(result)) { @@ -75,7 +75,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 } if (isCanonized) { -@@ -2177,6 +2209,10 @@ export class UrlbarInput { +@@ -2208,6 +2240,10 @@ export class UrlbarInput { await this.#updateLayoutBreakoutDimensions(); } @@ -86,7 +86,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 startLayoutExtend() { if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) { // Do not expand if the Urlbar does not support being expanded or it is -@@ -2191,6 +2227,12 @@ export class UrlbarInput { +@@ -2222,6 +2258,12 @@ export class UrlbarInput { this.setAttribute("breakout-extend", "true"); @@ -99,7 +99,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 // Enable the animation only after the first extend call to ensure it // doesn't run when opening a new window. if (!this.hasAttribute("breakout-extend-animate")) { -@@ -2210,6 +2252,24 @@ export class UrlbarInput { +@@ -2241,6 +2283,24 @@ export class UrlbarInput { return; } @@ -124,7 +124,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 this.removeAttribute("breakout-extend"); this.#updateTextboxPosition(); } -@@ -2539,7 +2599,7 @@ export class UrlbarInput { +@@ -2570,7 +2630,7 @@ export class UrlbarInput { this.textbox.parentNode.style.setProperty( "--urlbar-container-height", @@ -133,7 +133,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 ); this.textbox.style.setProperty( "--urlbar-height", -@@ -2954,6 +3014,7 @@ export class UrlbarInput { +@@ -2985,6 +3045,7 @@ export class UrlbarInput { } _toggleActionOverride(event) { @@ -141,7 +141,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 if ( event.keyCode == KeyEvent.DOM_VK_SHIFT || event.keyCode == KeyEvent.DOM_VK_ALT || -@@ -3055,7 +3116,7 @@ export class UrlbarInput { +@@ -3086,7 +3147,7 @@ export class UrlbarInput { */ _trimValue(val) { let trimmedValue = lazy.UrlbarPrefs.get("trimURLs") @@ -150,7 +150,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 : val; // Only trim value if the directionality doesn't change to RTL and we're not // showing a strikeout https protocol. -@@ -3425,6 +3486,10 @@ export class UrlbarInput { +@@ -3459,6 +3520,10 @@ export class UrlbarInput { } reuseEmpty = true; } @@ -161,7 +161,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 if ( where == "tab" && reuseEmpty && -@@ -3432,6 +3497,9 @@ export class UrlbarInput { +@@ -3466,6 +3531,9 @@ export class UrlbarInput { ) { where = "current"; } @@ -171,7 +171,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 return where; } -@@ -3689,6 +3757,7 @@ export class UrlbarInput { +@@ -3723,6 +3791,7 @@ export class UrlbarInput { this.setResultForCurrentValue(null); this.handleCommand(); this.controller.clearLastQueryContextCache(); @@ -179,7 +179,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 this._suppressStartQuery = false; }); -@@ -3696,7 +3765,6 @@ export class UrlbarInput { +@@ -3730,7 +3799,6 @@ export class UrlbarInput { contextMenu.addEventListener("popupshowing", () => { // Close the results pane when the input field contextual menu is open, // because paste and go doesn't want a result selection. @@ -187,7 +187,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 let controller = this.document.commandDispatcher.getControllerForCommand("cmd_paste"); -@@ -4098,6 +4166,7 @@ export class UrlbarInput { +@@ -4138,6 +4206,7 @@ export class UrlbarInput { this.document.l10n.setAttributes( this.inputField, @@ -195,7 +195,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 l10nId, l10nId == "urlbar-placeholder-with-name" ? { name } : undefined ); -@@ -4209,6 +4278,11 @@ export class UrlbarInput { +@@ -4249,6 +4318,11 @@ export class UrlbarInput { } _on_click(event) { @@ -207,7 +207,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 if ( event.target == this.inputField || event.target == this._inputContainer || -@@ -4280,7 +4354,7 @@ export class UrlbarInput { +@@ -4320,7 +4394,7 @@ export class UrlbarInput { } } @@ -216,7 +216,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 this.view.autoOpen({ event }); } else { if (this._untrimOnFocusAfterKeydown) { -@@ -4320,9 +4394,16 @@ export class UrlbarInput { +@@ -4360,9 +4434,16 @@ export class UrlbarInput { } _on_mousedown(event) { @@ -234,7 +234,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 if ( event.target != this.inputField && -@@ -4334,6 +4415,10 @@ export class UrlbarInput { +@@ -4374,6 +4455,10 @@ export class UrlbarInput { this.focusedViaMousedown = !this.focused; this._preventClickSelectsAll = this.focused; @@ -245,7 +245,7 @@ index 50e9d3931789551869ff37a4fc89d5dfe2c09ad1..0cbce1ce41345075c999f3ff9c026896 // Keep the focus status, since the attribute may be changed // upon calling this.focus(). -@@ -4374,7 +4459,7 @@ export class UrlbarInput { +@@ -4414,7 +4499,7 @@ export class UrlbarInput { } // Don't close the view when clicking on a tab; we may want to keep the // view open on tab switch, and the TabSelect event arrived earlier. diff --git a/src/browser/components/urlbar/UrlbarMuxerStandard-sys-mjs.patch b/src/browser/components/urlbar/UrlbarMuxerStandard-sys-mjs.patch new file mode 100644 index 000000000..74e480433 --- /dev/null +++ b/src/browser/components/urlbar/UrlbarMuxerStandard-sys-mjs.patch @@ -0,0 +1,12 @@ +diff --git a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs +index 57463d2c4e39e67eeec7e2c752fe5236a662c7d2..4ca28540a71594e935847679a4b676ae48eb10d8 100644 +--- a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs ++++ b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs +@@ -845,6 +845,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer { + } + + if (result.providerName == lazy.UrlbarProviderTabToSearch.name) { ++ return false; + // Discard the result if a tab-to-search result was added already. + if (!state.canAddTabToSearch) { + return false; diff --git a/src/browser/components/urlbar/UrlbarMuxerUnifiedComplete-sys-mjs.patch b/src/browser/components/urlbar/UrlbarMuxerUnifiedComplete-sys-mjs.patch deleted file mode 100644 index fa83a1913..000000000 --- a/src/browser/components/urlbar/UrlbarMuxerUnifiedComplete-sys-mjs.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs b/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs -index c0d2b04ff869c4ad193d71aa19949d0e1fefe5ea..e5d054bf583a10fd96a94096cfe3752beb97d2ab 100644 ---- a/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs -+++ b/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs -@@ -845,6 +845,7 @@ class MuxerUnifiedComplete extends UrlbarMuxer { - } - - if (result.providerName == lazy.UrlbarProviderTabToSearch.name) { -+ return false; - // Discard the result if a tab-to-search result was added already. - if (!state.canAddTabToSearch) { - return false; diff --git a/src/browser/components/urlbar/UrlbarProviderPlaces-sys-mjs.patch b/src/browser/components/urlbar/UrlbarProviderPlaces-sys-mjs.patch index 6a2e2ac4b..df8854d91 100644 --- a/src/browser/components/urlbar/UrlbarProviderPlaces-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarProviderPlaces-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs -index 815734d9a5a589174ac33cb15ff9988d13e78b8c..adbd1e99987a92c9b79af8bcde204543e46e181f 100644 +index ad971f090bdaba2865cf1fac2840b1f553d2630c..a9e676e43d35b617eebd5a67c8653397b7c0c6bf 100644 --- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs +++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs @@ -40,11 +40,13 @@ function defaultQuery(conditions = "") { @@ -26,7 +26,7 @@ index 815734d9a5a589174ac33cb15ff9988d13e78b8c..adbd1e99987a92c9b79af8bcde204543 h.visit_count, h.typed, 0, t.open_count, :matchBehavior, :searchBehavior, NULL) -@@ -1114,11 +1116,13 @@ Search.prototype = { +@@ -1116,11 +1118,13 @@ Search.prototype = { ? lazy.PlacesUtils.toDate(lastVisitPRTime).getTime() : undefined; let tabGroup = row.getResultByName("groupId"); diff --git a/src/browser/components/urlbar/UrlbarView-sys-mjs.patch b/src/browser/components/urlbar/UrlbarView-sys-mjs.patch index ae412027e..02d2b2bed 100644 --- a/src/browser/components/urlbar/UrlbarView-sys-mjs.patch +++ b/src/browser/components/urlbar/UrlbarView-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs -index ec5575d8990ee431729d044953924d3a8b79d665..376d68f3a30bc75ca19bba5efc97fe923ab0e49e 100644 +index b3608bb8b851979b893da9c83e86d08b54288047..021ce0b80015256767b88132e99c67fa8ddfd2c4 100644 --- a/browser/components/urlbar/UrlbarView.sys.mjs +++ b/browser/components/urlbar/UrlbarView.sys.mjs @@ -609,7 +609,7 @@ export class UrlbarView { @@ -11,7 +11,7 @@ index ec5575d8990ee431729d044953924d3a8b79d665..376d68f3a30bc75ca19bba5efc97fe92 // Try to reuse the cached top-sites context. If it's not cached, then // there will be a gap of time between when the input is focused and // when the view opens that can be perceived as flicker. -@@ -1325,7 +1325,7 @@ export class UrlbarView { +@@ -1333,7 +1333,7 @@ export class UrlbarView { includeHiddenExposures: true, }); let canBeVisible = @@ -20,7 +20,7 @@ index ec5575d8990ee431729d044953924d3a8b79d665..376d68f3a30bc75ca19bba5efc97fe92 if (result.isHiddenExposure) { if (canBeVisible) { this.controller.engagementEvent.addExposure( -@@ -3015,7 +3015,7 @@ export class UrlbarView { +@@ -3061,7 +3061,7 @@ export class UrlbarView { } #enableOrDisableRowWrap() { diff --git a/src/browser/extensions/newtab/lib/ActivityStream-sys-mjs.patch b/src/browser/extensions/newtab/lib/ActivityStream-sys-mjs.patch index 16e966429..a5333d96e 100644 --- a/src/browser/extensions/newtab/lib/ActivityStream-sys-mjs.patch +++ b/src/browser/extensions/newtab/lib/ActivityStream-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs -index fc416c1977f9bc20ad86ecb7758056489cbc94cf..939f5ea34a914e919ebe568f8e795d7421c0abbc 100644 +index f4eca54a9638072a03b4c0e406fe14388b85db61..7f0c5f724558bdb004114f2a6bea266c94facdf9 100644 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs -@@ -258,7 +258,7 @@ export const PREFS_CONFIG = new Map([ +@@ -260,7 +260,7 @@ export const PREFS_CONFIG = new Map([ "showSponsoredTopSites", { title: "Show sponsored top sites", diff --git a/src/browser/modules/BrowserDOMWindow-sys-mjs.patch b/src/browser/modules/BrowserDOMWindow-sys-mjs.patch index 0b909dad0..a0d49d806 100644 --- a/src/browser/modules/BrowserDOMWindow-sys-mjs.patch +++ b/src/browser/modules/BrowserDOMWindow-sys-mjs.patch @@ -1,8 +1,8 @@ diff --git a/browser/modules/BrowserDOMWindow.sys.mjs b/browser/modules/BrowserDOMWindow.sys.mjs -index 2bc4918c15b5ea80e486db66d20bb9668b9e29c0..3800a3807f11c5f65ce0d602a775f95037f5dcf8 100644 +index 534d23b3e66176ea77f3ef577bf9630626948b9d..752e229bbe725ae394b7648adb949635f2bd70e4 100644 --- a/browser/modules/BrowserDOMWindow.sys.mjs +++ b/browser/modules/BrowserDOMWindow.sys.mjs -@@ -362,7 +362,7 @@ export class BrowserDOMWindow { +@@ -374,7 +374,7 @@ export class BrowserDOMWindow { // Passing a null-URI to only create the content window, // and pass true for aSkipLoad to prevent loading of // about:blank @@ -11,7 +11,7 @@ index 2bc4918c15b5ea80e486db66d20bb9668b9e29c0..3800a3807f11c5f65ce0d602a775f950 null, aParams, aWhere, -@@ -370,6 +370,10 @@ export class BrowserDOMWindow { +@@ -382,6 +382,10 @@ export class BrowserDOMWindow { aName, true ); diff --git a/src/browser/modules/ExtensionsUI-sys-mjs.patch b/src/browser/modules/ExtensionsUI-sys-mjs.patch index 49325b628..7a591ad77 100644 --- a/src/browser/modules/ExtensionsUI-sys-mjs.patch +++ b/src/browser/modules/ExtensionsUI-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/modules/ExtensionsUI.sys.mjs b/browser/modules/ExtensionsUI.sys.mjs -index a31179ef7986e1290aef8af58d1f82e23e55fcbe..4adaa921ce5fce8155cd98aa0e7a2b0b6d44ac1b 100644 +index 3302b1e9a66c8495e1a627b33488b952e8ef72b1..1de6ee8b59595da4acbb91bc625cd380be32845a 100644 --- a/browser/modules/ExtensionsUI.sys.mjs +++ b/browser/modules/ExtensionsUI.sys.mjs @@ -466,7 +466,7 @@ export var ExtensionsUI = { diff --git a/src/browser/modules/URILoadingHelper-sys-mjs.patch b/src/browser/modules/URILoadingHelper-sys-mjs.patch index 0310708b2..de0a5219c 100644 --- a/src/browser/modules/URILoadingHelper-sys-mjs.patch +++ b/src/browser/modules/URILoadingHelper-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs -index 14bf18132eaee8a0c8fe6e108ac423de91a7d3e2..fa616654fdf8a29d59889227780a98f0f9dc9a20 100644 +index ce594b69f55f9b9245a56fe8c962cf8a83cfe9a1..f3b99524f49f5a624c2fc213257a911862cd70c2 100644 --- a/browser/modules/URILoadingHelper.sys.mjs +++ b/browser/modules/URILoadingHelper.sys.mjs @@ -516,7 +516,7 @@ export const URILoadingHelper = { diff --git a/src/browser/themes/BuiltInThemeConfig-sys-mjs.patch b/src/browser/themes/BuiltInThemeConfig-sys-mjs.patch index 38ee55686..ae66873e5 100644 --- a/src/browser/themes/BuiltInThemeConfig-sys-mjs.patch +++ b/src/browser/themes/BuiltInThemeConfig-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs -index a5361f1f0ec57f575f8d76e118ff762dc7547501..db5c5eb2059b4ceef3911fd807bf985408859d1a 100644 +index 28b254d5757caf35c4ba755ef4cfed44bab5af00..660f517e0e3342970c6e30837fcf4d0adf360777 100644 --- a/browser/themes/BuiltInThemeConfig.sys.mjs +++ b/browser/themes/BuiltInThemeConfig.sys.mjs @@ -33,11 +33,4 @@ export const BuiltInThemeConfig = new Map([ diff --git a/src/browser/themes/linux/browser-css.patch b/src/browser/themes/linux/browser-css.patch index 7045be58a..fb8f1c3ef 100644 --- a/src/browser/themes/linux/browser-css.patch +++ b/src/browser/themes/linux/browser-css.patch @@ -1,31 +1,31 @@ diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css -index 714e465f6d5bb28fc0c9517013ce7f9961bd0ace..8d739cb6e0cee93d994b17f7e3451fb3fcf11ed7 100644 +index dadb198cbf968dc622d2d0ee6c754f3541c052a2..5b7d17d8705c7cfddaee04c90d342bd705338a18 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css -@@ -42,7 +42,8 @@ - -moz-default-appearance: -moz-window-decorations; - appearance: auto; +@@ -43,7 +43,8 @@ + -moz-default-appearance: -moz-window-decorations; + appearance: auto; -- #navigator-toolbox, +- #navigator-toolbox, + #zen-main-app-wrapper, + #zen-browser-background, - dialog::backdrop { - border-top-left-radius: env(-moz-gtk-csd-titlebar-radius); - border-top-right-radius: env(-moz-gtk-csd-titlebar-radius); -@@ -50,13 +51,14 @@ + dialog::backdrop { + border-top-left-radius: env(-moz-gtk-csd-titlebar-radius); + border-top-right-radius: env(-moz-gtk-csd-titlebar-radius); +@@ -51,13 +52,14 @@ - /* stylelint-disable-next-line media-query-no-invalid */ - @media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") { -- #navigator-toolbox { + /* stylelint-disable-next-line media-query-no-invalid */ + @media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") { +- #navigator-toolbox { + #zen-main-app-wrapper { - /* The body clip below covers this. */ - border-radius: 0; - } + /* The body clip below covers this. */ + border-radius: 0; + } - body, -- dialog::backdrop { + body, +- dialog::backdrop { + dialog::backdrop, + #zen-browser-background { - /* Use an uniform clip to allow WebRender to optimize it better */ - border-radius: env(-moz-gtk-csd-titlebar-radius); - } + /* Use an uniform clip to allow WebRender to optimize it better */ + border-radius: env(-moz-gtk-csd-titlebar-radius); + } diff --git a/src/browser/themes/shared/controlcenter/panel-css.patch b/src/browser/themes/shared/controlcenter/panel-css.patch deleted file mode 100644 index 5d0b30158..000000000 --- a/src/browser/themes/shared/controlcenter/panel-css.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/browser/themes/shared/controlcenter/panel.css b/browser/themes/shared/controlcenter/panel.css -index d0bc0e89142ef8d6090f1b270a0193ac8899c41f..cb16ab639c675433b2bfbcee11def5428c41afb3 100644 ---- a/browser/themes/shared/controlcenter/panel.css -+++ b/browser/themes/shared/controlcenter/panel.css -@@ -10,11 +10,11 @@ - #identity-popup, - #permission-popup, - #protections-popup { -- --popup-width: 30.81em; -+ --popup-width: 28.81em; - /* Set default fill for icons in the identity popup. - Individual icons can override this. */ - fill: currentColor; -- --horizontal-padding: calc(var(--arrowpanel-menuitem-padding-inline) * 2); -+ --horizontal-padding: 0; - --vertical-section-padding: 0.9em; - --height-offset: 0px; - font: menu; diff --git a/src/browser/themes/shared/light-dark-overrides-css.patch b/src/browser/themes/shared/light-dark-overrides-css.patch deleted file mode 100644 index 91a8dbccb..000000000 --- a/src/browser/themes/shared/light-dark-overrides-css.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/browser/themes/shared/light-dark-overrides.css b/browser/themes/shared/light-dark-overrides.css -index 8b10da7c3ccbbfca30f77e2b7602794dccbf306d..f9188accee0e02d3ef6944b155da613fa6bd335d 100644 ---- a/browser/themes/shared/light-dark-overrides.css -+++ b/browser/themes/shared/light-dark-overrides.css -@@ -5,5 +5,4 @@ - #urlbar { - --urlbar-box-bgcolor: var(--toolbar-field-focus-background-color); - --urlbar-box-focus-bgcolor: var(--button-background-color); -- --urlbar-box-hover-bgcolor: var(--button-background-color-hover); - } diff --git a/src/browser/themes/shared/tabbrowser/tabs-css.patch b/src/browser/themes/shared/tabbrowser/tabs-css.patch index 5eddb5c6c..64bb6302b 100644 --- a/src/browser/themes/shared/tabbrowser/tabs-css.patch +++ b/src/browser/themes/shared/tabbrowser/tabs-css.patch @@ -1,5 +1,5 @@ diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css -index 79a95268e5..3a9fe04d6a 100644 +index b710cbf2aa3febc0693bdc6aef48ef4aea855235..61c813322c866ae823dac6c0826d572a1e768135 100644 --- a/browser/themes/shared/tabbrowser/tabs.css +++ b/browser/themes/shared/tabbrowser/tabs.css @@ -19,7 +19,7 @@ @@ -23,7 +23,7 @@ index 79a95268e5..3a9fe04d6a 100644 --tab-selected-bgcolor: var(--toolbar-bgcolor); --tab-selected-color-scheme: var(--toolbar-color-scheme); &[lwt-tab-selected="light"] { -@@ -251,7 +251,6 @@ +@@ -255,7 +255,6 @@ } :root:not([uidensity="compact"], [sidebar-expand-on-hover]) &[pinned] { @@ -31,7 +31,7 @@ index 79a95268e5..3a9fe04d6a 100644 } &:is([selected], [multiselected]) { -@@ -265,6 +264,7 @@ +@@ -269,6 +268,7 @@ border-radius: inherit; position: relative; overflow: hidden; @@ -39,7 +39,7 @@ index 79a95268e5..3a9fe04d6a 100644 &::before { position: absolute; -@@ -464,14 +464,11 @@ +@@ -468,14 +468,11 @@ .tab-icon-image { -moz-context-properties: fill, stroke; fill: currentColor; @@ -55,7 +55,7 @@ index 79a95268e5..3a9fe04d6a 100644 opacity: 0.5; /* Fade the favicon out */ transition-property: filter, opacity; -@@ -488,10 +485,6 @@ +@@ -492,10 +489,6 @@ /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") { &[pending][discarded] { @@ -66,7 +66,7 @@ index 79a95268e5..3a9fe04d6a 100644 opacity: 0.5; /* Fade the favicon out */ transition-property: filter, opacity; -@@ -564,7 +557,7 @@ +@@ -568,7 +561,7 @@ z-index: 1; /* Overlay tab title */ #tabbrowser-tabs[orient="vertical"] & { @@ -75,7 +75,7 @@ index 79a95268e5..3a9fe04d6a 100644 } &[crashed] { -@@ -572,7 +565,7 @@ +@@ -576,7 +569,7 @@ } #tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]), @@ -84,7 +84,7 @@ index 79a95268e5..3a9fe04d6a 100644 &[soundplaying] { list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg"); } -@@ -629,7 +622,7 @@ +@@ -633,7 +626,7 @@ } } @@ -93,7 +93,7 @@ index 79a95268e5..3a9fe04d6a 100644 &[crashed] { display: revert; } -@@ -730,7 +723,7 @@ +@@ -734,7 +727,7 @@ has not been added to root. There are certain scenarios when that attribute is temporarily removed from root such as when toggling the sidebar to expand with the toolbar button. */ #tabbrowser-tabs[orient="horizontal"] &:not([pinned]):not([crashed]), @@ -102,22 +102,7 @@ index 79a95268e5..3a9fe04d6a 100644 &:is([soundplaying], [muted], [activemedia-blocked]) { display: flex; } -@@ -1004,20 +997,20 @@ tab-group { - */ - display: contents; - -- #tabbrowser-tabs[orient="horizontal"] &[collapsed] > .tabbrowser-tab { -+ #tabbrowser-tabs[orient="horizontal"] &[collapsed] .tab-group-container > .tabbrowser-tab { - min-width: 0 !important; - max-width: 0 !important; - padding: 0; - overflow-clip-margin: 0; - } - -- #tabbrowser-tabs[orient="vertical"] &[collapsed] > .tabbrowser-tab { -+ #tabbrowser-tabs[orient="vertical"] &[collapsed] .tab-group-container > .tabbrowser-tab { - display: none; - } +@@ -1039,7 +1032,7 @@ tab-group { } #tabbrowser-tabs[orient="vertical"][expanded] { @@ -126,7 +111,7 @@ index 79a95268e5..3a9fe04d6a 100644 &[movingtab][movingtab-addToGroup]:not([movingtab-createGroup], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) { margin-inline-start: var(--space-medium); } -@@ -1370,7 +1363,7 @@ tab-group { +@@ -1457,7 +1450,7 @@ tab-group { } } @@ -135,7 +120,7 @@ index 79a95268e5..3a9fe04d6a 100644 #vertical-tabs-newtab-button { appearance: none; min-height: var(--tab-min-height); -@@ -1381,7 +1374,7 @@ tab-group { +@@ -1468,7 +1461,7 @@ tab-group { margin-inline: var(--tab-inner-inline-margin); #tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text { @@ -144,7 +129,7 @@ index 79a95268e5..3a9fe04d6a 100644 } &:hover { -@@ -1405,7 +1398,7 @@ tab-group { +@@ -1492,7 +1485,7 @@ tab-group { * flex container. #tabs-newtab-button is a child of the arrowscrollbox where * we don't want a gap (between tabs), so we have to add some margin. */ @@ -153,7 +138,7 @@ index 79a95268e5..3a9fe04d6a 100644 margin-block: var(--tab-block-margin); } -@@ -1600,7 +1593,6 @@ tab-group { +@@ -1687,7 +1680,6 @@ tab-group { &:not([expanded]) { .tabbrowser-tab[pinned] { @@ -161,7 +146,7 @@ index 79a95268e5..3a9fe04d6a 100644 } .tab-background { -@@ -1760,7 +1752,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button { +@@ -1847,7 +1839,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button { list-style-image: url(chrome://global/skin/icons/plus.svg); } diff --git a/src/browser/themes/shared/toolbarbuttons-css.patch b/src/browser/themes/shared/toolbarbuttons-css.patch index eed38b559..36bde8e07 100644 --- a/src/browser/themes/shared/toolbarbuttons-css.patch +++ b/src/browser/themes/shared/toolbarbuttons-css.patch @@ -1,8 +1,8 @@ diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css -index a8df2d5cd8b3009daa033a9bf06908be78adeb3b..8c47fd0056599c539eb309eb90b465921400aae4 100644 +index 1f91bda717979f3e81d2f6b243336078d97c5cb9..4232ec4761cb15ff96e9b18810b05f548a6f5fd9 100644 --- a/browser/themes/shared/toolbarbuttons.css +++ b/browser/themes/shared/toolbarbuttons.css -@@ -254,7 +254,7 @@ toolbar .toolbaritem-combined-buttons > separator { +@@ -256,7 +256,7 @@ toolbar .toolbaritem-combined-buttons > separator { #nav-bar-overflow-button { list-style-image: url("chrome://global/skin/icons/chevron.svg"); @@ -11,7 +11,7 @@ index a8df2d5cd8b3009daa033a9bf06908be78adeb3b..8c47fd0056599c539eb309eb90b46592 display: none; } -@@ -464,7 +464,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) { +@@ -466,7 +466,7 @@ toolbarbutton.bookmark-item:not(.subviewbutton) { */ align-items: stretch; > .toolbarbutton-icon { diff --git a/src/browser/themes/shared/urlbarView-css.patch b/src/browser/themes/shared/urlbarView-css.patch index 8a0cc3e54..ca161840b 100644 --- a/src/browser/themes/shared/urlbarView-css.patch +++ b/src/browser/themes/shared/urlbarView-css.patch @@ -1,5 +1,5 @@ diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css -index 28608327793ff564d19536e1086660b040c462d4..6714457b1de5928fff19f679eb0388f40e343186 100644 +index 428ce749239be2a54c86e0feff123772d1a1d697..9f33c10add207c7971c07743147a458e19b469bb 100644 --- a/browser/themes/shared/urlbarView.css +++ b/browser/themes/shared/urlbarView.css @@ -20,7 +20,7 @@ diff --git a/src/browser/themes/windows/browser-css.patch b/src/browser/themes/windows/browser-css.patch index f0444b65e..4b5293bf4 100644 --- a/src/browser/themes/windows/browser-css.patch +++ b/src/browser/themes/windows/browser-css.patch @@ -1,5 +1,5 @@ diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css -index 587e189d9c403c01463c4167de8c21d3533351cb..5edbc05b905692b29c9e292533616c9bc03cb5fe 100644 +index 4f960ae35aa69a1d1ce4ad368f5bae365229bbdf..3a17985b3376eb8a966cd85324d86d00d891bf0f 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -31,7 +31,6 @@ @@ -10,7 +10,7 @@ index 587e189d9c403c01463c4167de8c21d3533351cb..5edbc05b905692b29c9e292533616c9b } /* Using a semitransparent background preserves the tinting from the backdrop. -@@ -63,7 +62,7 @@ +@@ -61,7 +60,7 @@ /* This is needed for Windows 10, see bug 1961257 */ @media (-moz-windows-accent-color-in-titlebar) { diff --git a/src/build/pgo/profileserver-py.patch b/src/build/pgo/profileserver-py.patch index 43c0496b2..637c8bfcc 100644 --- a/src/build/pgo/profileserver-py.patch +++ b/src/build/pgo/profileserver-py.patch @@ -1,8 +1,8 @@ diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py -index 6017810c873f6be5a5d133dc9386f7cd8879e81b..6d399e0c8135d2c27157c81d75515de04c39f1d7 100755 +index faf15719a0537d7c5fc0a62afb93fa4a61605bf7..68d114fd6651b7c210aa1a58e6fcf4fa749f53b1 100755 --- a/build/pgo/profileserver.py +++ b/build/pgo/profileserver.py -@@ -18,7 +18,13 @@ from mozprofile import FirefoxProfile, Preferences +@@ -17,7 +17,13 @@ from mozprofile import FirefoxProfile, Preferences from mozprofile.permissions import ServerLocations from mozrunner import CLI, FirefoxRunner diff --git a/src/dom/base/Document-cpp.patch b/src/dom/base/Document-cpp.patch index c8938c970..0c437f6e0 100644 --- a/src/dom/base/Document-cpp.patch +++ b/src/dom/base/Document-cpp.patch @@ -1,5 +1,5 @@ diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp -index 36f9681a989bf4007fa837e7c9ef332ee14e55bd..8c407b5297570aee5322515d47b0895b833e3a10 100644 +index 40da41ae4ac7d8d61c664e25bec8a74091d8b3e0..59773e80c6220115d0c51e268bb1eff0fe208010 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -10,6 +10,7 @@ @@ -10,7 +10,7 @@ index 36f9681a989bf4007fa837e7c9ef332ee14e55bd..8c407b5297570aee5322515d47b0895b #include #include -@@ -3300,6 +3301,11 @@ void Document::FillStyleSetUserAndUASheets() { +@@ -3306,6 +3307,11 @@ void Document::FillStyleSetUserAndUASheets() { styleSet.AppendStyleSheet(*sheet); } diff --git a/src/dom/base/use_counter_metrics-yaml.patch b/src/dom/base/use_counter_metrics-yaml.patch index 79dd3c964..700cacc9f 100644 --- a/src/dom/base/use_counter_metrics-yaml.patch +++ b/src/dom/base/use_counter_metrics-yaml.patch @@ -1,8 +1,8 @@ diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml -index c3830ede7637a047ffa285c0e8e281befd933f18..ddc8be98dc969c54774682361bc1f191754a4609 100644 +index c8dd3cca62e788eed5e5df5294fa7c9f3a2e9492..91e6281f4eb1c4c6aa1dddd8a0f06aa0c15a71ab 100644 --- a/dom/base/use_counter_metrics.yaml +++ b/dom/base/use_counter_metrics.yaml -@@ -21765,6 +21765,22 @@ use.counter.css.page: +@@ -21460,6 +21460,22 @@ use.counter.css.page: send_in_pings: - use-counters @@ -25,7 +25,7 @@ index c3830ede7637a047ffa285c0e8e281befd933f18..ddc8be98dc969c54774682361bc1f191 css_transform_origin: type: counter description: > -@@ -33752,6 +33768,22 @@ use.counter.css.doc: +@@ -33447,6 +33463,22 @@ use.counter.css.doc: send_in_pings: - use-counters diff --git a/src/dom/html/HTMLMediaElement-cpp.patch b/src/dom/html/HTMLMediaElement-cpp.patch index b3363dc45..9160debaf 100644 --- a/src/dom/html/HTMLMediaElement-cpp.patch +++ b/src/dom/html/HTMLMediaElement-cpp.patch @@ -1,5 +1,5 @@ diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp -index ee151115e3db05b4e92c3f68d724bd785f4e4669..b8cfdd0862af690ebaff833049bdd5b48068f34d 100644 +index 2becc049b5a0ee8544819b08d65f1df0a4c23658..6e7a05f135c6ab2c4955a679c1a4ac0e9aae7592 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -453,6 +453,7 @@ class HTMLMediaElement::MediaControlKeyListener final @@ -10,7 +10,7 @@ index ee151115e3db05b4e92c3f68d724bd785f4e4669..b8cfdd0862af690ebaff833049bdd5b4 NotifyAudibleStateChanged(mIsOwnerAudible ? MediaAudibleState::eAudible : MediaAudibleState::eInaudible); -@@ -7007,6 +7008,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) { +@@ -7034,6 +7035,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) { QueueTask(std::move(runner)); mQueueTimeUpdateRunnerTime = TimeStamp::Now(); mLastCurrentTime = CurrentTime(); diff --git a/src/gfx/wr/webrender/src/picture-rs.patch b/src/gfx/wr/webrender/src/picture-rs.patch index 9e6bdad51..05d8c2560 100644 --- a/src/gfx/wr/webrender/src/picture-rs.patch +++ b/src/gfx/wr/webrender/src/picture-rs.patch @@ -1,8 +1,8 @@ diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs -index 2e74dbbc23ed56b469000913ae24addc1a519e60..ff94049a68c75ab61e4792ec37720a340776acef 100644 +index e860f36ef2b42a7377047c64dd4f9405f26b3249..8057172482aa042e9951fc7367891a66eed75f5e 100644 --- a/gfx/wr/webrender/src/picture.rs +++ b/gfx/wr/webrender/src/picture.rs -@@ -8045,7 +8045,12 @@ fn get_relative_scale_offset( +@@ -8112,7 +8112,12 @@ fn get_relative_scale_offset( CoordinateSpaceMapping::Local => ScaleOffset::identity(), CoordinateSpaceMapping::ScaleOffset(scale_offset) => scale_offset, CoordinateSpaceMapping::Transform(m) => { diff --git a/src/layout/base/nsStyleSheetService-h.patch b/src/layout/base/nsStyleSheetService-h.patch index 998ea2cfc..9959493be 100644 --- a/src/layout/base/nsStyleSheetService-h.patch +++ b/src/layout/base/nsStyleSheetService-h.patch @@ -1,5 +1,5 @@ diff --git a/layout/base/nsStyleSheetService.h b/layout/base/nsStyleSheetService.h -index 8c49b338bf8e6830874ace9a08e8c0713167ee58..115bf09314970fd2fe79793e9cf8e0c40eb0459b 100644 +index 83fc829aad19f8b80692e67bddb781778fbc4f8d..04806a1f51686a82c1dc2555dae86a4397b181fb 100644 --- a/layout/base/nsStyleSheetService.h +++ b/layout/base/nsStyleSheetService.h @@ -50,6 +50,8 @@ class nsStyleSheetService final : public nsIStyleSheetService, diff --git a/src/layout/generic/nsIFrame-cpp.patch b/src/layout/generic/nsIFrame-cpp.patch index 886c604bb..e47c115b5 100644 --- a/src/layout/generic/nsIFrame-cpp.patch +++ b/src/layout/generic/nsIFrame-cpp.patch @@ -1,8 +1,8 @@ diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp -index bd4a77009b8f1a791063c6039dabc8b7527a2504..214f10d59ebdd27e04e43e9dc96e55afbfe0a902 100644 +index e13628eccc51f0e81fc1404b061840d816502757..85cca51cf37db83f6e79c6e6af080646d2c49670 100644 --- a/layout/generic/nsIFrame.cpp +++ b/layout/generic/nsIFrame.cpp -@@ -11897,6 +11897,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const { +@@ -11901,6 +11901,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const { gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms( uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel)); diff --git a/src/layout/style/nsStyleStruct-cpp.patch b/src/layout/style/nsStyleStruct-cpp.patch index 91c11bda3..ba1e4553c 100644 --- a/src/layout/style/nsStyleStruct-cpp.patch +++ b/src/layout/style/nsStyleStruct-cpp.patch @@ -1,8 +1,8 @@ diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp -index c4f9fd72246a42efcb6b30219bd2af9b0b6f9c99..6ff1d3acbf24f8fdc2ae9545dc52f0f826557022 100644 +index 4b979fc1f9d0986f5382cab0c39bf99ed34ef39e..90f67c73c13fbfdcfff86125c6d7258850ca62b0 100644 --- a/layout/style/nsStyleStruct.cpp +++ b/layout/style/nsStyleStruct.cpp -@@ -3234,6 +3234,9 @@ nsStyleUIReset::nsStyleUIReset() +@@ -3237,6 +3237,9 @@ nsStyleUIReset::nsStyleUIReset() mWindowShadow(StyleWindowShadow::Auto), mWindowOpacity(1.0), mMozWindowInputRegionMargin(StyleLength::Zero()), @@ -12,7 +12,7 @@ index c4f9fd72246a42efcb6b30219bd2af9b0b6f9c99..6ff1d3acbf24f8fdc2ae9545dc52f0f8 mTransitions( nsStyleAutoArray::WITH_SINGLE_INITIAL_ELEMENT), mTransitionTimingFunctionCount(1), -@@ -3277,6 +3280,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource) +@@ -3281,6 +3284,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource) mWindowOpacity(aSource.mWindowOpacity), mMozWindowInputRegionMargin(aSource.mMozWindowInputRegionMargin), mMozWindowTransform(aSource.mMozWindowTransform), diff --git a/src/layout/style/nsStyleStruct-h.patch b/src/layout/style/nsStyleStruct-h.patch index f84ada69a..5ab373834 100644 --- a/src/layout/style/nsStyleStruct-h.patch +++ b/src/layout/style/nsStyleStruct-h.patch @@ -1,8 +1,8 @@ diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h -index 4811ceab129cd2dcbc65de52c2978bc5735aa486..8ed6eb405cf8843811d8d9721532ab646dc2d759 100644 +index 3236244280edaae2bbe4440e76da3455015ab722..3474d4bcfab2944aae9635250350b674a8ed1c42 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h -@@ -2026,6 +2026,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset { +@@ -2033,6 +2033,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset { // The margin of the window region that should be transparent to events. mozilla::StyleLength mMozWindowInputRegionMargin; mozilla::StyleTransform mMozWindowTransform; diff --git a/src/layout/style/test/ListCSSProperties-cpp.patch b/src/layout/style/test/ListCSSProperties-cpp.patch index 22082cbdb..bc7700138 100644 --- a/src/layout/style/test/ListCSSProperties-cpp.patch +++ b/src/layout/style/test/ListCSSProperties-cpp.patch @@ -1,8 +1,8 @@ diff --git a/layout/style/test/ListCSSProperties.cpp b/layout/style/test/ListCSSProperties.cpp -index b6a881b037a3720991f8097903e859dfc72012c1..8917a8cc23b97e37b4accaaf0d6c2876b36594af 100644 +index df06ffac358c1b245c84432aa6f143f9c5806029..0bca4b9b40b3b030c54fc36c659966dd3a8894f7 100644 --- a/layout/style/test/ListCSSProperties.cpp +++ b/layout/style/test/ListCSSProperties.cpp -@@ -108,6 +108,7 @@ const char* gInaccessibleProperties[] = { +@@ -109,6 +109,7 @@ const char* gInaccessibleProperties[] = { "-moz-window-opacity", // chrome-only internal properties "-moz-window-transform", // chrome-only internal properties "-moz-window-shadow", // chrome-only internal properties diff --git a/src/modules/libpref/init/StaticPrefList-yaml.patch b/src/modules/libpref/init/StaticPrefList-yaml.patch index 6dab5b326..670438552 100644 --- a/src/modules/libpref/init/StaticPrefList-yaml.patch +++ b/src/modules/libpref/init/StaticPrefList-yaml.patch @@ -1,8 +1,8 @@ diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml -index f689389fbc0382f10b7d146273efffdd1db4fd41..955f8e6edda62832ce5aeafd16ed58f5c94e312b 100644 +index 30a19900c13cd0720008980202077af1df705856..136e3a13b810215be7a102786dce54651b38829d 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml -@@ -19099,6 +19099,7 @@ +@@ -19119,6 +19119,7 @@ mirror: always #endif diff --git a/src/modules/libpref/moz-build.patch b/src/modules/libpref/moz-build.patch index a0319add4..d5fd7d0c8 100644 --- a/src/modules/libpref/moz-build.patch +++ b/src/modules/libpref/moz-build.patch @@ -1,5 +1,5 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build -index bff4fa68bbb4f7937632395351a0f8800815f862..d823accd1227635b555af2ca710645244d53aa12 100644 +index 68a0bd6b50b804745b052e1921f4f6120354443e..23e7d03a6796af39dc2d39733b16548e73f8b10f 100644 --- a/modules/libpref/moz.build +++ b/modules/libpref/moz.build @@ -93,6 +93,7 @@ pref_groups = [ diff --git a/src/netwerk/protocol/http/moz-build.patch b/src/netwerk/protocol/http/moz-build.patch index ddc48f44f..e77666bdc 100644 --- a/src/netwerk/protocol/http/moz-build.patch +++ b/src/netwerk/protocol/http/moz-build.patch @@ -1,8 +1,8 @@ diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build -index af31c6f5255f0bffd2938bc9ac2d86315f3428ff..8ca3a799302d1ae5d515c0a1616151ab29a5657b 100644 +index 906a2fcdcc2684ff4326aeb7f22f3441add7e56c..37e16b62d012498c66bc3a38f4ce48972298b6be 100644 --- a/netwerk/protocol/http/moz.build +++ b/netwerk/protocol/http/moz.build -@@ -224,7 +224,7 @@ LOCAL_INCLUDES += [ +@@ -225,7 +225,7 @@ LOCAL_INCLUDES += [ "/netwerk/url-classifier", ] diff --git a/src/toolkit/actors/PictureInPictureChild-sys-mjs.patch b/src/toolkit/actors/PictureInPictureChild-sys-mjs.patch index 50b09f5c1..68ff066c2 100644 --- a/src/toolkit/actors/PictureInPictureChild-sys-mjs.patch +++ b/src/toolkit/actors/PictureInPictureChild-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs -index 7c383a8112d221d029b64fbb7432abc8ac720d28..e853f1a16149b6010377191b9da560a95a017acb 100644 +index 21b6295bf46336a70ed0a3797cf3210c8c0cb545..5a7018f1f923e977f63fae296ffdff1730ad1218 100644 --- a/toolkit/actors/PictureInPictureChild.sys.mjs +++ b/toolkit/actors/PictureInPictureChild.sys.mjs @@ -292,6 +292,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild { diff --git a/src/toolkit/content/widgets/infobar-css.patch b/src/toolkit/content/widgets/infobar-css.patch index 82545cef1..59ca689d9 100644 --- a/src/toolkit/content/widgets/infobar-css.patch +++ b/src/toolkit/content/widgets/infobar-css.patch @@ -1,8 +1,8 @@ diff --git a/toolkit/content/widgets/infobar.css b/toolkit/content/widgets/infobar.css -index 4547df3f3573e95e616c803bc37c7da61bbe6b58..b0540c058d7d31ce929319e5ad9381889b9b6c60 100644 +index e2272e913ad0215fa733c5fa01d180ccfa919abc..f6da9321fcdc70ab4a81f01787c3d2a55057fda9 100644 --- a/toolkit/content/widgets/infobar.css +++ b/toolkit/content/widgets/infobar.css -@@ -97,3 +97,18 @@ strong { +@@ -102,3 +102,18 @@ strong { :host([type="system"]) .content { margin-inline-start: 0; } diff --git a/src/toolkit/modules/AppConstants-sys-mjs.patch b/src/toolkit/modules/AppConstants-sys-mjs.patch index 449b2d770..886e98f5c 100644 --- a/src/toolkit/modules/AppConstants-sys-mjs.patch +++ b/src/toolkit/modules/AppConstants-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs -index a794e82288d30c979f2d2798bded49fb4dd3118b..cd1875dc048607447e25d30341052a6930d1c08f 100644 +index 5465ed3fb01e4214029b44f338d5e1e1580c3aab..a4d6b42916014d5e0f643b35a7b4feb281f59023 100644 --- a/toolkit/modules/AppConstants.sys.mjs +++ b/toolkit/modules/AppConstants.sys.mjs @@ -172,6 +172,8 @@ export var AppConstants = Object.freeze({ diff --git a/src/toolkit/modules/LightweightThemeConsumer-sys-mjs.patch b/src/toolkit/modules/LightweightThemeConsumer-sys-mjs.patch index d48857380..0429b305b 100644 --- a/src/toolkit/modules/LightweightThemeConsumer-sys-mjs.patch +++ b/src/toolkit/modules/LightweightThemeConsumer-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/modules/LightweightThemeConsumer.sys.mjs b/toolkit/modules/LightweightThemeConsumer.sys.mjs -index c42269ca92e21d1058046d7247e19dc5fde4c1c0..b12d38aa8999d4c2c4c7218b299cd9ed1566fc7d 100644 +index 1d16b3f191a53b6877122086de9bba1fbcaa71f4..64df5577aac095ddd3d9a381bf118496bf279276 100644 --- a/toolkit/modules/LightweightThemeConsumer.sys.mjs +++ b/toolkit/modules/LightweightThemeConsumer.sys.mjs @@ -31,7 +31,7 @@ const toolkitVariableMap = [ diff --git a/src/toolkit/modules/moz-build.patch b/src/toolkit/modules/moz-build.patch index ec84e1b8a..847630ede 100644 --- a/src/toolkit/modules/moz-build.patch +++ b/src/toolkit/modules/moz-build.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build -index 4c45be797e2cca88d302f98e765545b13da3f0dc..31f2694a8cfb73c4f31b819e4362b46bdb22faef 100644 +index 8c020ddc23afd11b2592bfd98b3131613b084202..045be1fa401d24932d0fe4197a9dc0d7a63bcd20 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -280,6 +280,7 @@ for var in ( diff --git a/src/toolkit/moz-configure.patch b/src/toolkit/moz-configure.patch index 8367e413a..8867d4b21 100644 --- a/src/toolkit/moz-configure.patch +++ b/src/toolkit/moz-configure.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/moz.configure b/toolkit/moz.configure -index 77069eaacf383214e705f04733cd4f5db1fca1e8..9abbd6a9ba58759a33f9e9a0bea934a5fe022893 100644 +index 87abe60e93bc7dfb84052c9735ddddc75b74c229..f4649e9d48a2a2892c48ce536da105dcfa72d73b 100644 --- a/toolkit/moz.configure +++ b/toolkit/moz.configure @@ -22,6 +22,7 @@ def check_moz_app_id(moz_app_id, build_project): diff --git a/src/toolkit/mozapps/extensions/AddonManager-sys-mjs.patch b/src/toolkit/mozapps/extensions/AddonManager-sys-mjs.patch index 3aa9ef85a..474ec0df6 100644 --- a/src/toolkit/mozapps/extensions/AddonManager-sys-mjs.patch +++ b/src/toolkit/mozapps/extensions/AddonManager-sys-mjs.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs -index e09ea87de86b06d1b505e59d4f0c4a090533ca71..9e8291ee5a83a686f3a129c3c6872bb7c84fdcd9 100644 +index 14b57fcca58409671361ac5a5d753d8b71235ea5..e75a8939c4b1c574213ed3e2db6377de99218a1f 100644 --- a/toolkit/mozapps/extensions/AddonManager.sys.mjs +++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs @@ -1221,12 +1221,12 @@ var AddonManagerInternal = { diff --git a/src/toolkit/mozapps/extensions/content/aboutaddons-css.patch b/src/toolkit/mozapps/extensions/content/aboutaddons-css.patch index 3e958d9fa..1e88ee608 100644 --- a/src/toolkit/mozapps/extensions/content/aboutaddons-css.patch +++ b/src/toolkit/mozapps/extensions/content/aboutaddons-css.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/mozapps/extensions/content/aboutaddons.css b/toolkit/mozapps/extensions/content/aboutaddons.css -index d8f84dcbf83d4768b9b8174ccf07706702d690a5..afce2630bf64a262b0f6a9e752db5c745167bf6a 100644 +index d8ccfe4b25f8139127c5ef48e739d79d960a7c91..93c6f3b6ec84be3e2f0081d5f7257488f47c7c26 100644 --- a/toolkit/mozapps/extensions/content/aboutaddons.css +++ b/toolkit/mozapps/extensions/content/aboutaddons.css @@ -105,6 +105,13 @@ h2 { diff --git a/src/toolkit/themes/shared/tree/tree-css.patch b/src/toolkit/themes/shared/tree/tree-css.patch index cca3fbdf7..b5347977d 100644 --- a/src/toolkit/themes/shared/tree/tree-css.patch +++ b/src/toolkit/themes/shared/tree/tree-css.patch @@ -1,5 +1,5 @@ diff --git a/toolkit/themes/shared/tree/tree.css b/toolkit/themes/shared/tree/tree.css -index bd743c2b05729644637c172d973ad057387bc5ce..58589094ff68d1972a32fe4f4087af2c0211ee97 100644 +index c50cab31785eecece2bf061b9770ba90c6ed0181..dfbd227ddab802d927b6897454a86fcd7252e96f 100644 --- a/toolkit/themes/shared/tree/tree.css +++ b/toolkit/themes/shared/tree/tree.css @@ -12,6 +12,7 @@ diff --git a/src/widget/cocoa/nsCocoaWindow-mm.patch b/src/widget/cocoa/nsCocoaWindow-mm.patch index 99d0092bb..4286b6fca 100644 --- a/src/widget/cocoa/nsCocoaWindow-mm.patch +++ b/src/widget/cocoa/nsCocoaWindow-mm.patch @@ -1,8 +1,8 @@ diff --git a/widget/cocoa/nsCocoaWindow.mm b/widget/cocoa/nsCocoaWindow.mm -index 225815aca04da2298605a732b25a3ebe17c109bf..3dcf1dfc5cf6c76380c41c37b778bc4160720960 100644 +index f753a7a8bf132044060bdcd7bf14b134ca785f4a..ec1f2b26ea2bc178c66c386dc078d6a8f2ec3423 100644 --- a/widget/cocoa/nsCocoaWindow.mm +++ b/widget/cocoa/nsCocoaWindow.mm -@@ -7380,7 +7380,7 @@ static NSMutableSet* gSwizzledFrameViewClasses = nil; +@@ -7398,7 +7398,7 @@ static NSMutableSet* gSwizzledFrameViewClasses = nil; // Returns an autoreleased NSImage. static NSImage* GetMenuMaskImage() { diff --git a/src/xpfe/appshell/AppWindow-cpp.patch b/src/xpfe/appshell/AppWindow-cpp.patch index dd4fcf8c2..64f5558af 100644 --- a/src/xpfe/appshell/AppWindow-cpp.patch +++ b/src/xpfe/appshell/AppWindow-cpp.patch @@ -1,8 +1,8 @@ diff --git a/xpfe/appshell/AppWindow.cpp b/xpfe/appshell/AppWindow.cpp -index 3efb67402877b3af707e67a9e431415c20d77a58..5dd20250aacde2d082f09deae0ad846fed90a8d6 100644 +index ddd7fb3ff3008b4761ddc63b32c7c265ada024df..d18cddc6e00bc68789435f47fd505e04a4789383 100644 --- a/xpfe/appshell/AppWindow.cpp +++ b/xpfe/appshell/AppWindow.cpp -@@ -1867,7 +1867,7 @@ nsresult AppWindow::MaybeSaveEarlyWindowPersistentValues( +@@ -1880,7 +1880,7 @@ nsresult AppWindow::MaybeSaveEarlyWindowPersistentValues( } } diff --git a/src/zen/compact-mode/ZenCompactMode.mjs b/src/zen/compact-mode/ZenCompactMode.mjs index fecfd276f..e5b44d0d2 100644 --- a/src/zen/compact-mode/ZenCompactMode.mjs +++ b/src/zen/compact-mode/ZenCompactMode.mjs @@ -604,10 +604,10 @@ var gZenCompactModeManager = { }, this.HOVER_HACK_DELAY); }; - target.addEventListener('mouseenter', onEnter); + target.addEventListener('mouseover', onEnter); target.addEventListener('dragover', onEnter); - target.addEventListener('mouseleave', onLeave); + target.addEventListener('mouseout', onLeave); target.addEventListener('dragleave', onLeave); } diff --git a/src/zen/folders/ZenFolder.mjs b/src/zen/folders/ZenFolder.mjs index 187a7302a..d417dafbb 100644 --- a/src/zen/folders/ZenFolder.mjs +++ b/src/zen/folders/ZenFolder.mjs @@ -13,6 +13,9 @@ + + `; static rawIcon = new DOMParser().parseFromString( @@ -133,11 +136,6 @@ return activeGroups; } - // Dont expand the folder when the user selects a tab in it - on_TabSelect() { - this.collapsed = this.hasAttribute('has-active'); - } - rename() { gZenVerticalTabsManager.renameTabStart({ target: this.labelElement, diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index 4f6ca819f..253d80b40 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -31,7 +31,7 @@ const ZEN_MAX_SUBFOLDERS = Services.prefs.getIntPref('zen.folders.max-subfolders'); - class nsZenFolders extends nsZenPreloadedFeature { + class nsZenFolders extends nsZenDOMOperatedFeature { #popup = null; #popupTimer = null; #mouseTimer = null; @@ -143,11 +143,11 @@ } }); - this.#popup.addEventListener('mouseenter', () => { + this.#popup.addEventListener('mouseover', () => { clearTimeout(this.#popupTimer); }); - this.#popup.addEventListener('mouseleave', () => { + this.#popup.addEventListener('mouseout', () => { this.#popupTimer = setTimeout(() => { if (this.#popup.matches(':hover')) return; this.#popup.hidePopup(); diff --git a/src/zen/folders/zen-folders.css b/src/zen/folders/zen-folders.css index fe9769625..829b191e1 100644 --- a/src/zen/folders/zen-folders.css +++ b/src/zen/folders/zen-folders.css @@ -192,6 +192,8 @@ zen-folder { -moz-window-dragging: no-drag; transition: margin-inline-start 0.15s ease-in-out; + margin-inline-start: var(--zen-folder-indent) !important; + &[selected] > .tab-group-label-container::before { background-color: color-mix(in srgb, var(--zen-colors-border) 60%, transparent); } @@ -276,7 +278,7 @@ zen-folder { } & svg[state='open'] { - scale: 0.9; + scale: 0.92; } } @@ -447,3 +449,7 @@ zen-folder { border-bottom-right-radius: max(calc(var(--panel-border-radius) - 4px), 4px); } } + +.tab-group-overflow-count-container { + display: none !important; +} diff --git a/src/zen/mods/ZenStyleSheetCache.cpp b/src/zen/mods/ZenStyleSheetCache.cpp index 3ba2b28af..f774632c6 100644 --- a/src/zen/mods/ZenStyleSheetCache.cpp +++ b/src/zen/mods/ZenStyleSheetCache.cpp @@ -7,6 +7,7 @@ #include "nsCOMPtr.h" #include "nsIFile.h" +#include "nsNetUtil.h" #include "nsStyleSheetService.h" diff --git a/src/zen/tabs/ZenPinnedTabManager.mjs b/src/zen/tabs/ZenPinnedTabManager.mjs index ed46b3ac5..7b51fcfbc 100644 --- a/src/zen/tabs/ZenPinnedTabManager.mjs +++ b/src/zen/tabs/ZenPinnedTabManager.mjs @@ -707,7 +707,7 @@ } async savePin(pin, notifyObservers = true) { - if (!this.#hasInitializedPins) { + if (!this.#hasInitializedPins && !gZenUIManager.testingEnabled) { return; } const existingPin = this._pinsCache.find((p) => p.uuid === pin.uuid); @@ -1196,10 +1196,11 @@ if (!isPinned) { topToNormalTabs += draggedTab.getBoundingClientRect().height; } - const isGoingToPinnedTabs = translate < topToNormalTabs; + const isGoingToPinnedTabs = + translate < topToNormalTabs && gBrowser.pinnedTabCount - gBrowser._numZenEssentials > 0; const multiplier = isGoingToPinnedTabs !== isPinned ? (isGoingToPinnedTabs ? 1 : -1) : 0; this._isGoingToPinnedTabs = isGoingToPinnedTabs; - if (!dropElement && gBrowser.pinnedTabCount - gBrowser._numZenEssentials > 0) { + if (!dropElement) { itemsToCheck.forEach((item) => { item.style.transform = `translateY(${draggingTabHeight * multiplier}px)`; }); diff --git a/src/zen/tests/ignorePrefs.json b/src/zen/tests/ignorePrefs.json new file mode 100644 index 000000000..e0c610426 --- /dev/null +++ b/src/zen/tests/ignorePrefs.json @@ -0,0 +1,6 @@ +[ + "zen.mods.updated-value-observer", + "zen.mods.last-update", + "zen.view.compact.should-enable-at-startup", + "browser.newtabpage.activity-stream.trendingSearch.defaultSearchEngine" +] diff --git a/src/zen/tests/split_view/browser_split_groups.js b/src/zen/tests/split_view/browser_split_groups.js index ab5ab8b9b..861986216 100644 --- a/src/zen/tests/split_view/browser_split_groups.js +++ b/src/zen/tests/split_view/browser_split_groups.js @@ -41,3 +41,12 @@ add_task(async function test_Basic_Split_Groups_Pinning() { ok(!group.pinned, 'The split group should be unpinned after unpinning a tab'); }); }); + +add_task(async function test_Basic_Unsplit_Group_Removed() { + let group; + await basicSplitNTabs(async (tabs) => { + group = tabs[0].group; + }); + ok(group, 'The split group should exist'); + ok(!group.parentNode, 'The split group should be removed from the DOM after unsplitting'); +}); diff --git a/src/zen/tests/welcome/browser_welcome.js b/src/zen/tests/welcome/browser_welcome.js index e4f5327dd..42ea965fd 100644 --- a/src/zen/tests/welcome/browser_welcome.js +++ b/src/zen/tests/welcome/browser_welcome.js @@ -154,6 +154,7 @@ add_task(async function test_Welcome_Steps() { 'The first tab group should be labeled "Zen Basics" after the welcome process' ); for (const tab of gBrowser.tabs) { + if (tab.hasAttribute('zen-empty-tab')) continue; if (tab.pinned) { if (!tab.hasAttribute('zen-essential')) { ok( diff --git a/src/zen/workspaces/ZenWorkspace.mjs b/src/zen/workspaces/ZenWorkspace.mjs index 1a386c49b..558c59b4d 100644 --- a/src/zen/workspaces/ZenWorkspace.mjs +++ b/src/zen/workspaces/ZenWorkspace.mjs @@ -68,6 +68,8 @@ this.indicator.querySelector('.zen-current-workspace-indicator-name').onRenameFinished = this.onIndicatorRenameFinished.bind(this); + this.pinnedTabsContainer.scrollbox = this.scrollbox; + this.indicator .querySelector('.zen-workspaces-actions') .addEventListener('click', this.onActionsCommand.bind(this)); diff --git a/surfer.json b/surfer.json index 952dbb69a..0deb3ad0b 100644 --- a/surfer.json +++ b/surfer.json @@ -6,7 +6,7 @@ "version": { "product": "firefox", "version": "141.0.3", - "candidate": "141.0.3" + "candidate": "142.0" }, "buildOptions": { "generateBranding": true