chore: Sync upstream Firefox to version 148.0, p=#12440

This commit is contained in:
mr. m
2026-02-20 17:24:17 +01:00
committed by GitHub
parent a8e245b28a
commit dbb1e28b2f
101 changed files with 658 additions and 566 deletions

View File

@@ -35,7 +35,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 `147.0.4`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 147.0.4`!
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 148.0`!
### Contributing

View File

@@ -1 +1 @@
b1e00b74d3791a5a7bbd6ba3d32b69b60471e73b
b7d21837fa8fcae98dab2a4f016cc9fb3053903d

View File

@@ -1,5 +1,5 @@
diff --git a/Cargo.lock b/Cargo.lock
index 723445447f491058784992e66245e0e0f8e61e19..02816c1df3e20d96ce68f16970b8a6e38080533e 100644
index abc04e6a8e1e68fa71c6de0375f8e953e6369d8b..7bdfb41e255fc12065de064162e9bf9e15d7ff12 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4214,8 +4214,6 @@ dependencies = [

View File

@@ -1,13 +1,13 @@
diff --git a/Cargo.toml b/Cargo.toml
index 35e725043bce0b39fea550e8fb2b0ae1ff752e43..abac2042d537fcc1ce26e0e3acbf98fc2975b793 100644
index ab9eda43302a6281e59a2738170e77bb0f0b1b90..3389f1c744b56e3a6a4eb3f05b0601bed4538fa1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -237,6 +237,8 @@ moz_asserts = { path = "mozglue/static/rust/moz_asserts" }
@@ -240,6 +240,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" }
+mime_guess = { path = "third_party/rust/mime_guess" }
+
# Patch `unicode-width` 0.1.* to 0.2.
unicode-width = { path = "build/rust/unicode-width" }
# To-be-published changes.
unicode-bidi = { git = "https://github.com/servo/unicode-bidi", rev = "ca612daf1c08c53abe07327cb3e6ef6e0a760f0c" }
nss-gk-api = { git = "https://github.com/beurdouche/nss-gk-api", rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63" }

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
index 288a79e5fb4da24cffcb30fb4b8adc9604b15d26..bf9bd3e666dfb6298dbeec0546cae223a7bc68f0 100644
index 0186e3a6508fc8e40f93619d8b3e5a0c003cbd4a..1f4fa115e591cfbe3e23d4ce880be66277a50a26 100644
--- a/browser/base/content/browser-init.js
+++ b/browser/base/content/browser-init.js
@@ -200,6 +200,7 @@ var gBrowserInit = {
@@ -243,6 +243,7 @@ var gBrowserInit = {
},
onLoad() {
@@ -10,7 +10,7 @@ index 288a79e5fb4da24cffcb30fb4b8adc9604b15d26..bf9bd3e666dfb6298dbeec0546cae223
gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
PopupAndRedirectBlockerObserver.handleEvent(e)
);
@@ -375,6 +376,7 @@ var gBrowserInit = {
@@ -433,6 +434,7 @@ var gBrowserInit = {
this._handleURIToLoad();

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae031fe6119 100644
index e2e0526a0ddd617291f1f6c17bcfb807954b481f..c3d2afff6eaa788309d1c1a7fa40f9b8b4f0fffe 100644
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -33,6 +33,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -819,7 +820,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
@@ -814,7 +815,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
var backDisabled = backCommand.hasAttribute("disabled");
var forwardDisabled = forwardCommand.hasAttribute("disabled");
@@ -24,7 +24,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
if (backDisabled) {
backCommand.removeAttribute("disabled");
} else {
@@ -2305,6 +2311,8 @@ var XULBrowserWindow = {
@@ -2301,6 +2307,8 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@@ -33,7 +33,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -3818,7 +3826,7 @@ function warnAboutClosingWindow() {
@@ -3821,7 +3829,7 @@ function warnAboutClosingWindow() {
if (!isPBWindow && !toolbar.visible) {
return gBrowser.warnAboutClosingTabs(
@@ -42,7 +42,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
gBrowser.closingTabsEnum.ALL
);
}
@@ -3858,7 +3866,7 @@ function warnAboutClosingWindow() {
@@ -3861,7 +3869,7 @@ function warnAboutClosingWindow() {
return (
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -51,7 +51,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
gBrowser.closingTabsEnum.ALL
)
);
@@ -3883,7 +3891,7 @@ function warnAboutClosingWindow() {
@@ -3886,7 +3894,7 @@ function warnAboutClosingWindow() {
AppConstants.platform != "macosx" ||
isPBWindow ||
gBrowser.warnAboutClosingTabs(
@@ -60,7 +60,7 @@ index 16cf3e201358d24c9216f9b06b0ba3b89684d32a..2cfa507bbdc96b8a293b18595d0beae0
gBrowser.closingTabsEnum.ALL
)
);
@@ -4806,6 +4814,9 @@ var ConfirmationHint = {
@@ -4809,6 +4817,9 @@ var ConfirmationHint = {
MozXULElement.insertFTLIfNeeded("toolkit/branding/brandings.ftl");
MozXULElement.insertFTLIfNeeded("browser/confirmationHints.ftl");
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
index 139f7c2617f5e4843e0072435818c859def2f6bb..6ac1467b4117e2d76102d6977f13268827b4588f 100644
index df768aaa77a6986260da5052ed14c8403d48de6b..a30e3a2784a6215c959d23802b5c2c966f89ca10 100644
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -413,3 +413,4 @@
@@ -414,3 +414,4 @@
internal="true"/>
#endif
</keyset>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-sets.js b/browser/base/content/browser-sets.js
index 94a05a510204c027e482fda33deaf3dc0d7471c9..da7cda8e2708a29cf6cc3bf667240d37ef66ecfb 100644
index 50845ebd925955bf9646fc499b9828eccbf266ef..5482a24576ebcd4382409cae01a4c6bcbd88a96c 100644
--- a/browser/base/content/browser-sets.js
+++ b/browser/base/content/browser-sets.js
@@ -266,7 +266,7 @@ document.addEventListener(
@@ -270,7 +270,7 @@ document.addEventListener(
}
});
@@ -11,7 +11,7 @@ index 94a05a510204c027e482fda33deaf3dc0d7471c9..da7cda8e2708a29cf6cc3bf667240d37
const SIDEBAR_REVAMP_PREF = "sidebar.revamp";
const SIDEBAR_REVAMP_ENABLED = Services.prefs.getBoolPref(
SIDEBAR_REVAMP_PREF,
@@ -304,6 +304,8 @@ document.addEventListener(
@@ -308,6 +308,8 @@ document.addEventListener(
panel: SidebarController.currentID,
opened: SidebarController._state.launcherExpanded,
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js
index 8369e546866aa313e62f808acb8d51afa8da4f9b..7a4b20dd5922425cebfac542893a52cd68a26449 100644
index 6d2052e060896bb5e91ba84c15bf14c969340935..6ceef1806e2d88cd7e2ebc867d633e9148f3b298 100644
--- a/browser/base/content/browser-siteIdentity.js
+++ b/browser/base/content/browser-siteIdentity.js
@@ -451,11 +451,6 @@ var gIdentityHandler = {
@@ -464,11 +464,6 @@ var gIdentityHandler = {
// avoid a pretty ugly transition. Also hide it even
// if the update resulted in no site data, to keep the
// illusion that clicking the button had an effect.
@@ -14,7 +14,7 @@ index 8369e546866aa313e62f808acb8d51afa8da4f9b..7a4b20dd5922425cebfac542893a52cd
let baseDomain = SiteDataManager.getBaseDomainFromHost(this._uri.host);
if (SiteDataManager.promptSiteDataRemoval(window, [baseDomain])) {
@@ -832,7 +827,7 @@ var gIdentityHandler = {
@@ -847,7 +842,7 @@ var gIdentityHandler = {
// This is a secure internal Firefox page.
this._identityBox.className = "chromeUI";
let brandBundle = document.getElementById("bundle_brand");
@@ -23,7 +23,7 @@ index 8369e546866aa313e62f808acb8d51afa8da4f9b..7a4b20dd5922425cebfac542893a52cd
} else if (this._pageExtensionPolicy) {
// This is a WebExtension page.
this._identityBox.className = "extensionPage";
@@ -1161,6 +1156,12 @@ var gIdentityHandler = {
@@ -1190,6 +1185,12 @@ var gIdentityHandler = {
}
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index ac82dcd286b5502d1ba38ed740813db08941eb7b..c26b3f0468ee6acd7716d4e8a24ad8cc84fce186 100644
index 832d98f911e0bd0e231421332a521bfefea72ef8..a9955256c81b252fe0527ae5857c9283e2518274 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -19,6 +19,7 @@
@@ -10,7 +10,7 @@ index ac82dcd286b5502d1ba38ed740813db08941eb7b..c26b3f0468ee6acd7716d4e8a24ad8cc
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -99,8 +100,10 @@
@@ -100,8 +101,10 @@
<title data-l10n-id="browser-main-window-default-title"></title>
@@ -21,7 +21,7 @@ index ac82dcd286b5502d1ba38ed740813db08941eb7b..c26b3f0468ee6acd7716d4e8a24ad8cc
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -133,9 +136,11 @@
@@ -134,9 +137,11 @@
</vbox>
</html:template>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
index 79b604c5965ba03762acbf085c9288c73001ec24..d75d5481e5de93c592850e39d4b0b4fd07e12678 100644
index 0d73eb17b340001312a885ea10f5d6ad871f14d2..475824a0f9a4bbc15dc9bc7f1d2a09a51e58bc65 100644
--- a/browser/base/content/main-popupset.inc.xhtml
+++ b/browser/base/content/main-popupset.inc.xhtml
@@ -226,6 +226,10 @@
@@ -234,6 +234,10 @@
hidden="true"
tabspecific="true"
aria-labelledby="editBookmarkPanelTitle">
@@ -13,7 +13,7 @@ index 79b604c5965ba03762acbf085c9288c73001ec24..d75d5481e5de93c592850e39d4b0b4fd
<box class="panel-header">
<html:h1>
<html:span id="editBookmarkPanelTitle"/>
@@ -251,6 +255,7 @@
@@ -259,6 +263,7 @@
class="footer-button"/>
</html:moz-button-group>
</vbox>
@@ -21,7 +21,7 @@ index 79b604c5965ba03762acbf085c9288c73001ec24..d75d5481e5de93c592850e39d4b0b4fd
</panel>
</html:template>
@@ -656,6 +661,8 @@
@@ -678,6 +683,8 @@
#include popup-notifications.inc.xhtml

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index 68c24f730d56f548cf1e286198a04f8363529378..eb9aa5e77cf549062d8d3770f8057ceafe67c317 100644
index 4d4223c508560136aba220adb18528aac913a188..7e7432f7adb761a598d3e3e5ca4c6385a3bfe223 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
@@ -11,18 +11,18 @@ index 68c24f730d56f548cf1e286198a04f8363529378..eb9aa5e77cf549062d8d3770f8057cea
<script src="chrome://browser/content/navigator-toolbox.js" />
<!-- Menu -->
@@ -18,9 +18,8 @@
@@ -18,9 +18,9 @@
#include browser-menubar.inc
</toolbaritem>
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
-#include titlebar-items.inc.xhtml
</toolbar>
-
+<hbox id="titlebar">
<toolbar id="TabsToolbar"
class="browser-toolbar browser-titlebar"
fullscreentoolbar="true"
@@ -62,6 +61,9 @@
@@ -62,6 +62,9 @@
<html:sidebar-pins-promo id="drag-to-pin-promo-card"></html:sidebar-pins-promo>
<arrowscrollbox id="pinned-tabs-container" orient="horizontal" clicktoscroll=""></arrowscrollbox>
<splitter orient="vertical" id="vertical-pinned-tabs-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
@@ -32,7 +32,7 @@ index 68c24f730d56f548cf1e286198a04f8363529378..eb9aa5e77cf549062d8d3770f8057cea
<hbox class="tab-drop-indicator" hidden="true"/>
<arrowscrollbox id="tabbrowser-arrowscrollbox" orient="horizontal" flex="1" clicktoscroll="" scrolledtostart="" scrolledtoend="">
<tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="" fadein=""/>
@@ -81,6 +83,7 @@
@@ -81,6 +84,7 @@
tooltip="dynamic-shortcut-tooltip"
data-l10n-id="tabs-toolbar-new-tab"/>
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
@@ -40,8 +40,8 @@ index 68c24f730d56f548cf1e286198a04f8363529378..eb9aa5e77cf549062d8d3770f8057cea
</tabs>
<toolbarbutton id="new-tab-button"
@@ -106,9 +109,10 @@
#include private-browsing-indicator.inc.xhtml
@@ -114,9 +118,10 @@
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
-#include titlebar-items.inc.xhtml

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index d9fbd3a9a78c993c89efa75be9e2ffc975158aba..e64382b32580c2d113774e76e3587002ce0aebad 100644
index 90c8d48fa992ca5ac125fa2998741db79264de4a..a598431671e42b9ede23b0595790564202408a8e 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -371,6 +371,9 @@ export class nsContextMenu {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 57a37b5c0d1982ecfff8d94e05fea89895713a58..062dcb0d1de00982bd777c3dc5d62a88a304bc68 100644
index 2152327b42c884456785ef065422e3ca6cc8c50b..932150495d23c0a63987abf14b3dc8a12eb42d6c 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -601,6 +601,28 @@ nsBrowserContentHandler.prototype = {
@@ -603,6 +603,28 @@ nsBrowserContentHandler.prototype = {
}
}
@@ -31,7 +31,7 @@ index 57a37b5c0d1982ecfff8d94e05fea89895713a58..062dcb0d1de00982bd777c3dc5d62a88
var searchParam = cmdLine.handleFlagWithParam("search", false);
if (searchParam) {
doSearch(searchParam, cmdLine);
@@ -670,6 +692,7 @@ nsBrowserContentHandler.prototype = {
@@ -672,6 +694,7 @@ nsBrowserContentHandler.prototype = {
" --new-window <url> Open <url> in a new window.\n" +
" --new-tab <url> Open <url> in a new tab.\n" +
" --private-window [<url>] Open <url> in a new private window.\n";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index 8acc1e5a97f769dc76d30ca0534f28b0a4511ab5..bd54169f976d3abe7d122b0efc0fa0d0626179eb 100644
index 33a0f6b7e5cfe087388483fefa55b927e3e3f4a3..65135c6904b5e9523f77689dfc572aefe11b0961 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 8acc1e5a97f769dc76d30ca0534f28b0a4511ab5..bd54169f976d3abe7d122b0efc0fa0d0
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
@@ -1452,7 +1453,7 @@ BrowserGlue.prototype = {
@@ -1455,7 +1456,7 @@ BrowserGlue.prototype = {
windowcount++;
let tabbrowser = win.gBrowser;
if (tabbrowser) {
@@ -19,7 +19,7 @@ index 8acc1e5a97f769dc76d30ca0534f28b0a4511ab5..bd54169f976d3abe7d122b0efc0fa0d0
}
}
@@ -1617,6 +1618,8 @@ BrowserGlue.prototype = {
@@ -1620,6 +1621,8 @@ BrowserGlue.prototype = {
} else if (profileDataVersion < APP_DATA_VERSION) {
lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/controlcenter/content/identityPanel.inc.xhtml b/browser/components/controlcenter/content/identityPanel.inc.xhtml
index 8e23aad8ca0bb686a669b11e1d78b7906f5f38d0..cf4873cc6165b5f77091c056d7e275e0f3d36769 100644
index d7f214f471f70de3805e0f5b3b2d77f49a06c4f1..555b55089368e1782cf0266415fb3040b269d3a5 100644
--- a/browser/components/controlcenter/content/identityPanel.inc.xhtml
+++ b/browser/components/controlcenter/content/identityPanel.inc.xhtml
@@ -28,7 +28,7 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index d016811caa6c1ecc947fd705f6e1b27e3b5a12a5..89f2a9ec9ebd80e744ed0118e1b3c164151cf2b8 100644
index 1c696a11d831ea25b4b01689e9b23bda8a754900..fed5576c05aeffd87022565580ce085cb81fe70c 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -619,10 +619,12 @@ const PanelUI = {
@@ -627,10 +627,12 @@ const PanelUI = {
if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
this.navbar.setAttribute("nonemptyoverflow", "true");
this.overflowPanel.setAttribute("hasfixeditems", "true");
@@ -15,7 +15,7 @@ index d016811caa6c1ecc947fd705f6e1b27e3b5a12a5..89f2a9ec9ebd80e744ed0118e1b3c164
}
},
@@ -970,7 +972,7 @@ const PanelUI = {
@@ -978,7 +980,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id");
});

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index bff93996b42aa1f88f1bfcbd813c3af4a5806f13..1252727b4811248e138cf7a38f8d1fd422576d28 100644
index 7e32fc3f3c325b7317533acf5142bb912556fdbe..04bbe6bece881a05d2eadf81411bd4df2b745017 100644
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -501,6 +501,7 @@ this.tabs = class extends ExtensionAPIPersistent {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 5e53352fdbd25d2aed40d0117c3ad7072b9acf8c..0f400864ba7cc850d212ddeeefb71a06376e845f 100644
index f06aaedc681cac4dc26d8e168d47991098477424..db2e81338793f99d9f034555abb1f6ef28bb1ae9 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -42,3 +42,5 @@ browser.jar:
@@ -46,3 +46,5 @@ browser.jar:
content/browser/preferences/widgets/sync-device-name.mjs (widgets/sync-device-name/sync-device-name.mjs)
content/browser/preferences/widgets/sync-engines-list.mjs (widgets/sync-engine-list/sync-engines-list.mjs)
content/browser/preferences/widgets/sync-engines-list.css (widgets/sync-engine-list/sync-engines-list.css)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index d218a04e0ab44e6a55e368566c97df95e939565b..59f038e59fe1a8554a8b112c5ac33e700b71c79c 100644
index 171021979f4783251db7f74d52a922d4bd244f08..cdc91ac91905956a82dfa3ed229146622d1d3d80 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -48,7 +48,8 @@
@@ -49,7 +49,8 @@
<!-- Browser layout -->
<groupbox data-category="paneGeneral"
data-subcategory="layout"
@@ -12,7 +12,7 @@ index d218a04e0ab44e6a55e368566c97df95e939565b..59f038e59fe1a8554a8b112c5ac33e70
<label><html:h2 data-l10n-id="browser-layout-header"/></label>
<radiogroup id="browserLayoutRadioGroup" preference="sidebar.verticalTabs">
<radio id="browserLayoutHorizontalTabs" data-l10n-id="browser-layout-horizontal-tabs" value="false"/>
@@ -253,6 +254,7 @@
@@ -210,6 +211,7 @@
languages-customize-add.label,
" />
</hbox>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 6f99cbf973d414ffd4036d17740abe963629db37..520dcce0adb06c5ebfee8c76f72f7d7b40e106da 100644
index 3720de145e6aa3fa2fb13f8480155d9472edaa8b..f04808d58b29611f4058d9fc52ab8bc20a34825a 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -1729,6 +1729,11 @@ SettingGroupManager.registerGroups({
@@ -2190,6 +2190,11 @@ SettingGroupManager.registerGroups({
id: "browserRestoreSession",
l10nId: "startup-restore-windows-and-tabs",
},
@@ -14,7 +14,7 @@ index 6f99cbf973d414ffd4036d17740abe963629db37..520dcce0adb06c5ebfee8c76f72f7d7b
{
id: "windowsLaunchOnLogin",
l10nId: "windows-launch-on-login",
@@ -3133,7 +3138,7 @@ function getBundleForLocales(newLocales) {
@@ -4606,7 +4611,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 7d6835b8636f771943b8081b7d56f579812026c2..97227eec4baeffd39b23ed6194ce7fa108c3b862 100644
index 7a279d4655523156ff259c9f6bcb2a0def9d1749..de71cec7693d1fe3bf34017ab76027b83631830a 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -124,6 +124,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
@@ -121,6 +121,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {
styleSheets: [
"chrome://browser/skin/preferences/dialog.css",
"chrome://browser/skin/preferences/preferences.css",
@@ -10,7 +10,7 @@ index 7d6835b8636f771943b8081b7d56f579812026c2..97227eec4baeffd39b23ed6194ce7fa1
],
resizeCallback: async ({ title, frame }) => {
// Search within main document and highlight matched keyword.
@@ -344,6 +345,10 @@ function init_all() {
@@ -350,6 +351,10 @@ function init_all() {
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db4388456b97f02c 100644
index 0dd43c76f947e593a9be5edae936f1af17f9b627..df026b3e164da92536adef72ee0388386cb9708b 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -46,6 +46,8 @@
@@ -42,6 +42,8 @@
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-pane.css" />
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-control.css" />
@@ -11,7 +11,7 @@ index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db438845
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -115,6 +117,11 @@
@@ -111,6 +113,11 @@
<hbox flex="1">
<vbox class="navigation">
@@ -23,7 +23,7 @@ index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db438845
<!-- category list -->
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
<richlistitem id="category-general"
@@ -127,6 +134,50 @@
@@ -123,6 +130,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
@@ -74,7 +74,7 @@ index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db438845
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -242,11 +293,6 @@
@@ -248,11 +299,6 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox>
</hbox>
@@ -86,7 +86,7 @@ index a1aec823d6266d69ff02aa8523d2da999a0871b9..559f2ea12e53dd19f24e7953db438845
</hbox>
</hbox>
<vbox id="mainPrefPane">
@@ -260,6 +306,10 @@
@@ -265,6 +311,10 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/sync.inc.xhtml b/browser/components/preferences/sync.inc.xhtml
index 4ecdbdb129577165ed0df619577327f7610e138f..761a4d4f26a21ba555b7af180e8a6030615db500 100644
index 86053cbf35ef1b004185ee54e9d7b9f2e2b8d550..a8fe2db034ffe99e01fd0f92d629151df7f708a8 100644
--- a/browser/components/preferences/sync.inc.xhtml
+++ b/browser/components/preferences/sync.inc.xhtml
@@ -223,6 +223,10 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/screenshots/overlay/overlay.css b/browser/components/screenshots/overlay/overlay.css
index 43a5d2109ad107ce1c79eef7cb8635bc1fa813f7..c1e5648d0e71826119bda1bc18c5d16886bab8fd 100644
index 94d87522bfaaf59b9138ec5ca960be0a0ea31339..ab3fa41cefdfc1d93edeb8a2d626bd9b1e07344b 100644
--- a/browser/components/screenshots/overlay/overlay.css
+++ b/browser/components/screenshots/overlay/overlay.css
@@ -196,6 +196,9 @@
@@ -200,6 +200,9 @@
pointer-events: none;
position: absolute;
z-index: var(--screenshots-high-layer);
@@ -12,11 +12,11 @@ index 43a5d2109ad107ce1c79eef7cb8635bc1fa813f7..c1e5648d0e71826119bda1bc18c5d168
}
#top-background {
@@ -214,7 +217,7 @@
@@ -218,7 +221,7 @@
}
.bghighlight {
- background-color: rgba(0, 0, 0, 0.7);
- background-color: var(--background-color-overlay);
+ background-color: rgba(0, 0, 0, 0.5);
position: absolute;
overflow: clip;

View File

@@ -1,13 +1,12 @@
diff --git a/browser/components/search/SearchUIUtils.sys.mjs b/browser/components/search/SearchUIUtils.sys.mjs
index 65daa1402a52e252360386e60471f726c1387bb3..be8f588316a8a4d7f33a324bf11f9e1f19def32d 100644
index 22680c91da251adc21bb46debc73b3dbf6cdf08c..80d465e698c9900a6495d3f17ca2e66a25ff4021 100644
--- a/browser/components/search/SearchUIUtils.sys.mjs
+++ b/browser/components/search/SearchUIUtils.sys.mjs
@@ -444,7 +444,7 @@ export var SearchUIUtils = {
triggeringSearchEngine: engine.name,
@@ -445,6 +445,7 @@ export var SearchUIUtils = {
},
});
-
+ window.gZenGlanceManager?.onSearchSelectCommand(where);
return { engine, url: submission.uri };
},
+ window.gZenGlanceManager?.onSearchSelectCommand(where);
lazy.BrowserSearchTelemetry.recordSearch(
window.gBrowser.selectedBrowser,
engine,

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5fbefff5ce 100644
index f066bc7a9cca1788080d088141030c225a733931..accb078ebbc23f9a823ae6c277f1e1bf06644d92 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -127,6 +127,9 @@ const TAB_EVENTS = [
@@ -12,7 +12,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
];
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
@@ -196,6 +199,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -198,6 +201,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
TabStateCache: "resource:///modules/sessionstore/TabStateCache.sys.mjs",
TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.sys.mjs",
setTimeout: "resource://gre/modules/Timer.sys.mjs",
@@ -21,7 +21,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
});
ChromeUtils.defineLazyGetter(lazy, "blankURI", () => {
@@ -1261,10 +1266,7 @@ var SessionStoreInternal = {
@@ -1263,10 +1268,7 @@ var SessionStoreInternal = {
*/
get willAutoRestore() {
return (
@@ -33,7 +33,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
);
},
@@ -1934,6 +1936,9 @@ var SessionStoreInternal = {
@@ -1940,6 +1942,9 @@ var SessionStoreInternal = {
case "TabPinned":
case "TabUnpinned":
case "SwapDocShells":
@@ -43,7 +43,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
this.saveStateDelayed(win);
break;
case "TabGroupCreate":
@@ -2044,6 +2049,10 @@ var SessionStoreInternal = {
@@ -2050,6 +2055,10 @@ var SessionStoreInternal = {
this._windows[aWindow.__SSi].isTaskbarTab = true;
}
@@ -51,10 +51,10 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
+ this._windows[aWindow.__SSi].isZenUnsynced = true;
+ }
+
let tabbrowser = aWindow.gBrowser;
// add tab change listeners to all already existing tabs
@@ -2076,7 +2085,7 @@ var SessionStoreInternal = {
if (lazy.AIWindow.isAIWindowActiveAndEnabled(aWindow)) {
this._windows[aWindow.__SSi].isAIWindow = true;
}
@@ -2086,7 +2095,7 @@ var SessionStoreInternal = {
let isTaskbarTab = this._windows[aWindow.__SSi].isTaskbarTab;
// A regular window is not a private window, taskbar tab window, or popup window
let isRegularWindow =
@@ -63,7 +63,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// perform additional initialization when the first window is loading
if (lazy.RunState.isStopped) {
@@ -2088,7 +2097,7 @@ var SessionStoreInternal = {
@@ -2098,7 +2107,7 @@ var SessionStoreInternal = {
// to disk to NOW() to enforce a full interval before the next write.
lazy.SessionSaver.updateLastSaveTime();
@@ -72,7 +72,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
this._log.debug(
"initializeWindow, the window is private or a web app. Saving SessionStartup.state for possibly restoring later"
);
@@ -2131,6 +2140,7 @@ var SessionStoreInternal = {
@@ -2141,6 +2150,7 @@ var SessionStoreInternal = {
null,
"sessionstore-one-or-no-tab-restored"
);
@@ -80,7 +80,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
this._deferredAllWindowsRestored.resolve();
}
// this window was opened by _openWindowWithState
@@ -2175,7 +2185,6 @@ var SessionStoreInternal = {
@@ -2190,7 +2200,6 @@ var SessionStoreInternal = {
if (closedWindowState) {
let newWindowState;
if (
@@ -88,7 +88,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
!lazy.SessionStartup.willRestore()
) {
// We want to split the window up into pinned tabs and unpinned tabs.
@@ -2211,6 +2220,7 @@ var SessionStoreInternal = {
@@ -2226,6 +2235,7 @@ var SessionStoreInternal = {
}
if (newWindowState) {
@@ -96,7 +96,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// Ensure that the window state isn't hidden
this._restoreCount = 1;
let state = { windows: [newWindowState] };
@@ -2239,6 +2249,15 @@ var SessionStoreInternal = {
@@ -2254,6 +2264,15 @@ var SessionStoreInternal = {
});
this._shouldRestoreLastSession = false;
}
@@ -112,7 +112,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
if (this._restoreLastWindow && aWindow.toolbar.visible) {
// always reset (if not a popup window)
@@ -2383,7 +2402,7 @@ var SessionStoreInternal = {
@@ -2404,7 +2423,7 @@ var SessionStoreInternal = {
var tabbrowser = aWindow.gBrowser;
@@ -121,7 +121,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
TAB_EVENTS.forEach(function (aEvent) {
tabbrowser.tabContainer.removeEventListener(aEvent, this, true);
@@ -2434,7 +2453,7 @@ var SessionStoreInternal = {
@@ -2455,7 +2474,7 @@ var SessionStoreInternal = {
let isLastRegularWindow =
Object.values(this._windows).filter(
@@ -130,7 +130,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
).length == 1;
this._log.debug(
`onClose, closing window isLastRegularWindow? ${isLastRegularWindow}`
@@ -2491,8 +2510,8 @@ var SessionStoreInternal = {
@@ -2512,8 +2531,8 @@ var SessionStoreInternal = {
// 2) Flush the window.
// 3) When the flush is complete, revisit our decision to store the window
// in _closedWindows, and add/remove as necessary.
@@ -141,7 +141,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
}
completionPromise = lazy.TabStateFlusher.flushWindow(aWindow).then(() => {
@@ -2512,8 +2531,9 @@ var SessionStoreInternal = {
@@ -2533,8 +2552,9 @@ var SessionStoreInternal = {
// Save non-private windows if they have at
// least one saveable tab or are the last window.
@@ -153,7 +153,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
if (!isLastWindow && winData.closedId > -1) {
this._addClosedAction(
@@ -2589,7 +2609,7 @@ var SessionStoreInternal = {
@@ -2610,7 +2630,7 @@ var SessionStoreInternal = {
* to call this method again asynchronously (for example, after
* a window flush).
*/
@@ -162,7 +162,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// Make sure SessionStore is still running, and make sure that we
// haven't chosen to forget this window.
if (
@@ -2606,6 +2626,7 @@ var SessionStoreInternal = {
@@ -2627,6 +2647,7 @@ var SessionStoreInternal = {
// _closedWindows from a previous call to this function.
let winIndex = this._closedWindows.indexOf(winData);
let alreadyStored = winIndex != -1;
@@ -170,7 +170,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
let shouldStore = hasSaveableTabs || isLastWindow;
@@ -3408,7 +3429,7 @@ var SessionStoreInternal = {
@@ -3429,7 +3450,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -179,7 +179,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
return;
}
@@ -4129,6 +4150,12 @@ var SessionStoreInternal = {
@@ -4150,6 +4171,12 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -192,7 +192,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4565,6 +4592,8 @@ var SessionStoreInternal = {
@@ -4586,6 +4613,8 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -201,7 +201,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5055,9 +5084,10 @@ var SessionStoreInternal = {
@@ -5087,9 +5116,10 @@ var SessionStoreInternal = {
if (activePageData.title && activePageData.title != activePageData.url) {
win.gBrowser.setInitialTabTitle(tab, activePageData.title, {
isContentTitle: true,
@@ -213,7 +213,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
}
}
@@ -5414,7 +5444,7 @@ var SessionStoreInternal = {
@@ -5446,7 +5476,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -222,7 +222,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
removableTabs.push(tab);
}
}
@@ -5525,7 +5555,7 @@ var SessionStoreInternal = {
@@ -5559,7 +5589,7 @@ var SessionStoreInternal = {
// collect the data for all windows
for (ix in this._windows) {
@@ -231,7 +231,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// window data is still in _statesToRestore
continue;
}
@@ -5668,11 +5698,12 @@ var SessionStoreInternal = {
@@ -5702,11 +5732,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -245,7 +245,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5683,6 +5714,9 @@ var SessionStoreInternal = {
@@ -5717,6 +5748,9 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -255,7 +255,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5695,7 +5729,7 @@ var SessionStoreInternal = {
@@ -5729,7 +5763,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) {
@@ -264,7 +264,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -5810,8 +5844,8 @@ var SessionStoreInternal = {
@@ -5844,8 +5878,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -275,7 +275,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -5833,6 +5867,7 @@ var SessionStoreInternal = {
@@ -5867,6 +5901,7 @@ var SessionStoreInternal = {
if (overwriteTabs) {
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
if (!tabbrowser.tabs[i].selected) {
@@ -283,7 +283,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
tabbrowser.removeTab(tabbrowser.tabs[i]);
}
}
@@ -5866,6 +5901,12 @@ var SessionStoreInternal = {
@@ -5900,6 +5935,12 @@ var SessionStoreInternal = {
savedTabGroup => !openTabGroupIdsInWindow.has(savedTabGroup.id)
);
}
@@ -296,7 +296,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// Move the originally open tabs to the end.
if (initialTabs) {
@@ -6419,6 +6460,25 @@ var SessionStoreInternal = {
@@ -6453,6 +6494,25 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -322,7 +322,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
if (tabData.pinned) {
tabbrowser.pinTab(tab);
@@ -6567,6 +6627,9 @@ var SessionStoreInternal = {
@@ -6601,6 +6661,9 @@ var SessionStoreInternal = {
aWindow.gURLBar.readOnly = false;
}
}
@@ -332,7 +332,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
let promiseParts = Promise.withResolvers();
aWindow.setTimeout(() => {
@@ -7343,7 +7406,7 @@ var SessionStoreInternal = {
@@ -7389,7 +7452,7 @@ var SessionStoreInternal = {
let groupsToSave = new Map();
for (let tIndex = 0; tIndex < window.tabs.length; ) {
@@ -341,7 +341,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..53465df6060e6765e1e4564d340bba5f
// Adjust window.selected
if (tIndex + 1 < window.selected) {
window.selected -= 1;
@@ -7358,7 +7421,7 @@ var SessionStoreInternal = {
@@ -7404,7 +7467,7 @@ var SessionStoreInternal = {
);
// We don't want to increment tIndex here.
continue;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index bd6db85732e6e99ca51ce9c4c1a7d469199cf8cb..6c7859c1014baf4e343714ef797cf558d065e189 100644
index 86a74b2abfe9b49d71ce61fefc636b865bef83a9..7c18fcf15d127d79febb03ca15f0193dd6263604 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -793,7 +793,7 @@ var SidebarController = {
@@ -799,7 +799,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
index 3330dc133c120e7fbeecd2a36c71f9dfba60b3fb..0243cdfe67e5eb3f68fc7cde66bb3809e79bd6c3 100644
index b435917892ac77fb433ea709f2524db2f2347a1d..fcbfeb92f3ae4effbfd3333514ed4d412e3063c6 100644
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
@@ -252,7 +252,8 @@ var ctrlTab = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/drag-and-drop.js b/browser/components/tabbrowser/content/drag-and-drop.js
index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a1ef240b5 100644
index 730190d845f5312736f437cdc654c1693241ce56..d0404c46955fa16103a6f83e410f4f8ad7e78655 100644
--- a/browser/components/tabbrowser/content/drag-and-drop.js
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
@@ -35,6 +35,9 @@
@@ -12,7 +12,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
if (isTab(element) || isSplitViewWrapper(element)) {
return element;
}
@@ -115,6 +118,9 @@
@@ -118,6 +121,9 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
@@ -22,18 +22,18 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
if (
(dropEffect == "move" || dropEffect == "copy") &&
document == draggedTab.ownerDocument &&
@@ -133,10 +139,6 @@
@@ -136,10 +142,6 @@
// Pinned tabs in expanded vertical mode are on a grid format and require
// different logic to drag and drop.
- if (this._isContainerVerticalPinnedGrid(draggedTab)) {
- if (this._tabbrowserTabs.isContainerVerticalPinnedGrid(draggedTab)) {
- this._animateExpandedPinnedTabMove(event);
- return;
- }
this._animateTabMove(event);
return;
}
@@ -269,6 +271,10 @@
@@ -272,6 +274,10 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
@@ -44,7 +44,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
if (draggedTab && dropEffect == "copy") {
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -294,8 +300,9 @@
@@ -297,8 +303,9 @@
let translateOffsetY = oldTranslateY % tabHeight;
let newTranslateX = oldTranslateX - translateOffsetX;
let newTranslateY = oldTranslateY - translateOffsetY;
@@ -54,9 +54,9 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
if (this._isContainerVerticalPinnedGrid(draggedTab)) {
if (this._tabbrowserTabs.isContainerVerticalPinnedGrid(draggedTab)) {
// Update both translate axis for pinned vertical expanded tabs
@@ -311,9 +318,12 @@
@@ -314,9 +321,12 @@
}
} else {
let tabs = this._tabbrowserTabs.dragAndDropElements.slice(
@@ -71,7 +71,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
let size = this._tabbrowserTabs.verticalMode ? "height" : "width";
let screenAxis = this._tabbrowserTabs.verticalMode
? "screenY"
@@ -365,11 +375,13 @@
@@ -368,11 +378,13 @@
this._dragToPinPromoCard,
];
let shouldPin =
@@ -85,7 +85,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
isTab(draggedTab) &&
draggedTab.pinned &&
this._tabbrowserTabs.arrowScrollbox.contains(event.target);
@@ -432,6 +444,7 @@
@@ -436,6 +448,7 @@
}
}
@@ -93,7 +93,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
if (shouldTranslate) {
let translationPromises = [];
for (let item of movingTabs) {
@@ -443,7 +456,7 @@
@@ -447,7 +460,7 @@
item.removeAttribute("tabdrop-samewindow");
resolve();
};
@@ -102,7 +102,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -513,7 +526,7 @@
@@ -521,7 +534,7 @@
if (tab.selected) {
selectedTab = tab;
indexForSelectedTab = newIndex;
@@ -111,7 +111,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
const newTab = gBrowser.adoptTab(tab, {
elementIndex: newIndex,
selectTab: tab == draggedTab,
@@ -523,7 +536,7 @@
@@ -531,7 +544,7 @@
}
}
}
@@ -120,7 +120,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
const newTab = gBrowser.adoptTab(selectedTab, {
elementIndex: indexForSelectedTab,
selectTab: selectedTab == draggedTab,
@@ -534,10 +547,6 @@
@@ -542,10 +555,6 @@
}
// Restore tab selection
@@ -131,7 +131,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
} else {
// Pass true to disallow dropping javascript: or data: urls
let links;
@@ -584,6 +593,7 @@
@@ -592,6 +601,7 @@
let nextItem = this._tabbrowserTabs.dragAndDropElements[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
@@ -139,7 +139,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -621,7 +631,16 @@
@@ -629,7 +639,16 @@
this._expandGroupOnDrop(draggedTab);
}
this._resetTabsAfterDrop(draggedTab.ownerDocument);
@@ -157,11 +157,15 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
@@ -825,7 +844,10 @@
@@ -833,11 +852,10 @@
_getDragTarget(event, { ignoreSides = false } = {}) {
let { target } = event;
while (target) {
- if (isTab(target) || isTabGroupLabel(target)) {
- if (
- isTab(target) ||
- isTabGroupLabel(target) ||
- isSplitViewWrapper(target)
- ) {
+ if (isTab(target) || isTabGroupLabel(target) || target?.classList?.contains("tab-group-label-container")) {
+ if (target.classList?.contains("tab-group-label-container")) {
+ target = target.querySelector(".tab-group-label");
@@ -169,7 +173,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
break;
}
target = target.parentNode;
@@ -842,14 +864,17 @@
@@ -854,6 +872,9 @@
return null;
}
}
@@ -179,17 +183,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
return target;
}
_isContainerVerticalPinnedGrid(tab) {
return (
this._tabbrowserTabs.verticalMode &&
- tab.pinned &&
- this._tabbrowserTabs.hasAttribute("expanded") &&
+ tab.hasAttribute("zen-essential") &&
+ (this._tabbrowserTabs.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
!this._tabbrowserTabs.expandOnHover
);
}
@@ -880,7 +905,8 @@
@@ -883,7 +904,8 @@
isTabGroupLabel(draggedTab) &&
draggedTab._dragData?.expandGroupOnDrop
) {
@@ -199,7 +193,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
}
}
@@ -1058,7 +1084,6 @@
@@ -1061,7 +1083,6 @@
// using updateDragImage. On Linux, we can use a panel.
if (platform == "win" || platform == "macosx") {
captureListener = function () {
@@ -207,7 +201,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
};
} else {
// Create a panel to use it in setDragImage
@@ -1096,7 +1121,6 @@
@@ -1099,7 +1120,6 @@
);
dragImageOffset = dragImageOffset * scale;
}
@@ -215,7 +209,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
// _dragData.offsetX/Y give the coordinates that the mouse should be
// positioned relative to the corner of the new window created upon
@@ -1115,7 +1139,7 @@
@@ -1118,7 +1138,7 @@
let dropEffect = this.getDropEffectForTabDrag(event);
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
let collapseTabGroupDuringDrag =
@@ -224,7 +218,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
tab._dragData = {
offsetX: this._tabbrowserTabs.verticalMode
@@ -1125,7 +1149,7 @@
@@ -1128,7 +1148,7 @@
? event.screenY - window.screenY - tabOffset
: event.screenY - window.screenY,
scrollPos:
@@ -233,7 +227,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
? this._tabbrowserTabs.pinnedTabsContainer.scrollPosition
: this._tabbrowserTabs.arrowScrollbox.scrollPosition,
screenX: event.screenX,
@@ -1152,6 +1176,7 @@
@@ -1155,6 +1175,7 @@
if (collapseTabGroupDuringDrag) {
tab.group.collapsed = true;
@@ -241,7 +235,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
}
}
}
@@ -1176,6 +1201,7 @@
@@ -1179,6 +1200,7 @@
if (tabStripItemElement.hasAttribute("dragtarget")) {
return;
}
@@ -249,7 +243,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
let isPinned = tab.pinned;
let numPinned = gBrowser.pinnedTabCount;
let dragAndDropElements = this._tabbrowserTabs.dragAndDropElements;
@@ -1601,7 +1627,6 @@
@@ -1604,7 +1626,6 @@
for (let item of this._tabbrowserTabs.dragAndDropElements) {
item = elementToMove(item);
@@ -257,7 +251,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
item.removeAttribute("multiselected-move-together");
delete item._moveTogetherSelectedTabsData;
}
@@ -2429,7 +2454,6 @@
@@ -2432,7 +2453,6 @@
for (let item of this._tabbrowserTabs.dragAndDropElements) {
this._resetGroupTarget(item);
item = elementToMove(item);
@@ -265,7 +259,7 @@ index 57800333445ec7850742145527e04ae8d504b0bb..a13875436a72f89178455a09c8665b9a
}
this._tabbrowserTabs.removeAttribute("movingtab-group");
this._tabbrowserTabs.removeAttribute("movingtab-ungroup");
@@ -2460,17 +2484,14 @@
@@ -2463,17 +2483,14 @@
tab.style.left = "";
tab.style.top = "";
tab.style.maxWidth = "";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index 6528da245d922e2ccdb59cbf8106055bc34d1e74..b5d5ac633c06d7d9c909ec9456a5f3c165a6b925 100644
index 836bee14d2b63604688ebe477a5d915a5e99b305..a2aca4443ee1c909149739d002028c6c481aa62a 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -21,6 +21,7 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b54fc684d9 100644
index d7765e0adb37216d35f2125abf96025cbb150bab..27202066cef98d9826884806f71e70812457bd78 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -398,6 +398,7 @@
@@ -405,6 +405,7 @@
* @type {MozBrowser[]}
*/
get splitViewBrowsers() {
@@ -10,7 +10,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
const browsers = [];
if (this.#activeSplitView) {
for (const tab of this.#activeSplitView.tabs) {
@@ -462,15 +463,66 @@
@@ -469,15 +470,66 @@
return this.tabContainer.visibleTabs;
}
@@ -79,7 +79,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
set selectedTab(val) {
if (
gSharedTabWarning.willShowSharedTabWarning(val) ||
@@ -546,6 +598,10 @@
@@ -553,6 +605,10 @@
userContextId = parseInt(tabArgument.getAttribute("usercontextid"), 10);
}
@@ -90,7 +90,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (tabArgument && tabArgument.linkedBrowser) {
remoteType = tabArgument.linkedBrowser.remoteType;
initialBrowsingContextGroupId =
@@ -625,6 +681,8 @@
@@ -645,6 +701,8 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
@@ -99,7 +99,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -912,13 +970,18 @@
@@ -932,13 +990,18 @@
}
this.showTab(aTab);
@@ -119,7 +119,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
aTab.setAttribute("pinned", "true");
this._updateTabBarForPinnedTabs();
@@ -931,11 +994,19 @@
@@ -951,11 +1014,19 @@
}
this.#handleTabMove(aTab, () => {
@@ -140,7 +140,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
});
aTab.style.marginInlineStart = "";
@@ -1112,6 +1183,9 @@
@@ -1132,6 +1203,9 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -150,7 +150,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (
aIconURL &&
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
@@ -1121,6 +1195,9 @@
@@ -1141,6 +1215,9 @@
);
return;
}
@@ -160,7 +160,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1393,7 +1470,6 @@
@@ -1422,7 +1499,6 @@
// Preview mode should not reset the owner
if (!this._previewMode && !oldTab.selected) {
@@ -168,7 +168,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
let lastRelatedTab = this._lastRelatedTabMap.get(oldTab);
@@ -1484,6 +1560,7 @@
@@ -1513,6 +1589,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -176,7 +176,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1636,6 +1713,9 @@
@@ -1665,6 +1742,9 @@
}
let activeEl = document.activeElement;
@@ -186,7 +186,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1958,7 +2038,12 @@
@@ -1987,7 +2067,12 @@
return this._setTabLabel(aTab, aLabel);
}
@@ -200,7 +200,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (!aLabel || aLabel.includes("about:reader?")) {
return false;
}
@@ -2067,7 +2152,7 @@
@@ -2096,7 +2181,7 @@
newIndex = this.selectedTab._tPos + 1;
}
@@ -209,7 +209,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2342,6 +2427,7 @@
@@ -2371,6 +2456,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -217,17 +217,17 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2415,8 +2501,7 @@
@@ -2444,8 +2530,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
-
- if (this._allowTransparentBrowser) {
- if (AIWindow.isAIWindowActive(window) || this._allowTransparentBrowser) {
+ if (this._allowTransparentBrowser || _forZenEmptyTab) {
b.setAttribute("transparent", "true");
}
@@ -2581,7 +2666,7 @@
@@ -2610,7 +2695,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -236,7 +236,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2640,8 +2725,8 @@
@@ -2670,8 +2755,8 @@
// If we transitioned from one browser to two browsers, we need to set
// hasSiblings=false on both the existing browser and the new browser.
if (this.tabs.length == 2) {
@@ -247,7 +247,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2828,7 +2913,6 @@
@@ -2858,7 +2943,6 @@
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
tabIndex: tab._tPos + 1,
userContextId: tab.userContextId,
@@ -255,7 +255,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
focusUrlBar: true,
});
resolve(this.selectedBrowser);
@@ -2938,6 +3022,9 @@
@@ -2968,6 +3052,9 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -265,7 +265,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -2948,10 +3035,17 @@
@@ -2978,10 +3065,17 @@
);
}
@@ -283,7 +283,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// If we're opening a foreground tab, set the owner by default.
ownerTab ??= inBackground ? null : this.selectedTab;
@@ -2959,6 +3053,7 @@
@@ -2989,6 +3083,7 @@
if (this.selectedTab.owner) {
this.selectedTab.owner = null;
}
@@ -291,7 +291,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Find the tab that opened this one, if any. This is used for
// determining positioning, and inherited attributes such as the
@@ -3011,6 +3106,22 @@
@@ -3041,6 +3136,22 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -314,7 +314,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (insertTab) {
// Insert the tab into the tab container in the correct position.
this.#insertTabAtIndex(t, {
@@ -3019,6 +3130,7 @@
@@ -3049,6 +3160,7 @@
ownerTab,
openerTab,
pinned,
@@ -322,7 +322,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
bulkOrderedOpen,
tabGroup: tabGroup ?? openerTab?.group,
});
@@ -3037,6 +3149,7 @@
@@ -3067,6 +3179,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -330,7 +330,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}));
if (focusUrlBar) {
@@ -3161,6 +3274,12 @@
@@ -3191,6 +3304,12 @@
}
}
@@ -343,7 +343,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Additionally send pinned tab events
if (pinned) {
this.#notifyPinnedStatus(t);
@@ -3375,6 +3494,7 @@
@@ -3426,6 +3545,7 @@
isAdoptingGroup = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
@@ -351,7 +351,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} = {}
) {
if (
@@ -3385,9 +3505,6 @@
@@ -3436,9 +3556,6 @@
!this.isSplitViewWrapper(tabOrSplitView)
)
) {
@@ -361,7 +361,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
if (!color) {
@@ -3408,9 +3525,14 @@
@@ -3459,9 +3576,14 @@
label,
isAdoptingGroup
);
@@ -378,7 +378,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
);
group.addTabs(tabsAndSplitViews);
@@ -3531,7 +3653,7 @@
@@ -3582,7 +3704,7 @@
}
this.#handleTabMove(tab, () =>
@@ -387,7 +387,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
);
}
@@ -3599,6 +3721,7 @@
@@ -3666,6 +3788,7 @@
color: group.color,
insertBefore: newTabs[0],
isAdoptingGroup: true,
@@ -395,7 +395,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
});
}
@@ -3746,6 +3869,7 @@
@@ -3856,6 +3979,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
@@ -403,7 +403,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
) {
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3815,6 +3939,7 @@
@@ -3925,6 +4049,7 @@
openWindowInfo,
name,
skipLoad,
@@ -411,7 +411,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
});
}
@@ -4003,7 +4128,7 @@
@@ -4122,7 +4247,7 @@
// Add a new tab if needed.
if (!tab) {
let createLazyBrowser =
@@ -420,7 +420,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
let url = "about:blank";
if (tabData.entries?.length) {
@@ -4040,8 +4165,10 @@
@@ -4159,8 +4284,10 @@
insertTab: false,
skipLoad: true,
preferredRemoteType,
@@ -432,7 +432,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (select) {
tabToSelect = tab;
}
@@ -4053,7 +4180,8 @@
@@ -4172,7 +4299,8 @@
this.pinTab(tab);
// Then ensure all the tab open/pinning information is sent.
this._fireTabOpen(tab, {});
@@ -442,7 +442,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -4067,7 +4195,10 @@
@@ -4186,7 +4314,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -454,7 +454,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -4112,9 +4243,23 @@
@@ -4231,9 +4362,23 @@
// to remove the old selected tab.
if (tabToSelect) {
let leftoverTab = this.selectedTab;
@@ -470,15 +470,15 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
+ gZenWorkspaces._initialTab._shouldRemove = true;
+ }
+ }
}
+ }
+ else {
+ gZenWorkspaces._tabToRemoveForEmpty = this.selectedTab;
+ }
}
+ this._hasAlreadyInitializedZenSessionStore = true;
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -4305,11 +4450,14 @@
@@ -4424,11 +4569,14 @@
if (ownerTab) {
tab.owner = ownerTab;
}
@@ -494,7 +494,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -4321,7 +4469,7 @@
@@ -4440,7 +4588,7 @@
let lastRelatedTab =
openerTab && this._lastRelatedTabMap.get(openerTab);
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
@@ -503,7 +503,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
tabGroup = previousTab.group;
}
if (
@@ -4337,7 +4485,7 @@
@@ -4456,7 +4604,7 @@
previousTab.splitview
) + 1;
} else if (previousTab.visible) {
@@ -512,7 +512,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} else if (previousTab == FirefoxViewHandler.tab) {
elementIndex = 0;
}
@@ -4365,14 +4513,14 @@
@@ -4484,14 +4632,14 @@
}
// Ensure index is within bounds.
if (tab.pinned) {
@@ -531,7 +531,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (pinned && !itemAfter?.pinned) {
itemAfter = null;
@@ -4385,7 +4533,7 @@
@@ -4504,7 +4652,7 @@
this.tabContainer._invalidateCachedTabs();
@@ -540,7 +540,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (
(this.isTab(itemAfter) && itemAfter.group == tabGroup) ||
this.isSplitViewWrapper(itemAfter)
@@ -4416,7 +4564,11 @@
@@ -4535,7 +4683,11 @@
const tabContainer = pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -552,7 +552,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
if (tab.group?.collapsed) {
@@ -4431,6 +4583,7 @@
@@ -4550,6 +4702,7 @@
if (pinned) {
this._updateTabBarForPinnedTabs();
}
@@ -560,7 +560,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
TabBarVisibility.update();
}
@@ -4983,6 +5136,7 @@
@@ -5102,6 +5255,7 @@
telemetrySource,
} = {}
) {
@@ -568,7 +568,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -5072,6 +5226,7 @@
@@ -5191,6 +5345,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -576,7 +576,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} catch (e) {
console.error(e);
}
@@ -5110,6 +5265,12 @@
@@ -5229,6 +5384,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
}
@@ -589,7 +589,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -5124,6 +5285,9 @@
@@ -5243,6 +5404,9 @@
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
let isLastTab = this.#isLastTabInWindow(aTab);
@@ -599,7 +599,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -5172,7 +5336,13 @@
@@ -5291,7 +5455,13 @@
// We're not animating, so we can cancel the animation stopwatch.
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
aTab._closeTimeAnimTimerId = null;
@@ -614,7 +614,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
return;
}
@@ -5306,7 +5476,7 @@
@@ -5425,7 +5595,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
@@ -623,7 +623,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -5330,6 +5500,7 @@
@@ -5449,6 +5619,7 @@
newTab = true;
}
@@ -631,7 +631,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -5370,13 +5541,7 @@
@@ -5489,13 +5660,7 @@
aTab._mouseleave();
if (newTab) {
@@ -646,7 +646,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} else {
TabBarVisibility.update();
}
@@ -5509,6 +5674,7 @@
@@ -5628,6 +5793,7 @@
this.tabs[i]._tPos = i;
}
@@ -654,7 +654,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (!this._windowIsClosing) {
// update tab close buttons state
this.tabContainer._updateCloseButtons();
@@ -5732,6 +5898,7 @@
@@ -5851,6 +6017,7 @@
}
let excludeTabs = new Set(aExcludeTabs);
@@ -662,7 +662,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// If this tab has a successor, it should be selectable, since
// hiding or closing a tab removes that tab as a successor.
@@ -5744,15 +5911,22 @@
@@ -5863,15 +6030,22 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -687,7 +687,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
let tab = this.tabContainer.findNextTab(aTab, {
direction: 1,
filter: _tab => remainingTabs.includes(_tab),
@@ -5766,7 +5940,7 @@
@@ -5885,7 +6059,7 @@
}
if (tab) {
@@ -696,7 +696,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5787,7 +5961,7 @@
@@ -5906,7 +6080,7 @@
});
}
@@ -705,7 +705,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
_blurTab(aTab) {
@@ -5798,7 +5972,7 @@
@@ -5917,7 +6091,7 @@
* @returns {boolean}
* False if swapping isn't permitted, true otherwise.
*/
@@ -714,7 +714,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Do not allow transfering a private tab to a non-private window
// and vice versa.
if (
@@ -5852,6 +6026,7 @@
@@ -5971,6 +6145,7 @@
// fire the beforeunload event in the process. Close the other
// window if this was its last tab.
if (
@@ -722,7 +722,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
!remoteBrowser._beginRemoveTab(aOtherTab, {
adoptedByTab: aOurTab,
closeWindowWithLastTab: true,
@@ -5863,7 +6038,7 @@
@@ -5982,7 +6157,7 @@
// If this is the last tab of the window, hide the window
// immediately without animation before the docshell swap, to avoid
// about:blank being painted.
@@ -731,7 +731,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (closeWindow) {
let win = aOtherTab.ownerGlobal;
win.windowUtils.suppressAnimation(true);
@@ -5987,11 +6162,13 @@
@@ -6110,11 +6285,13 @@
}
// Finish tearing down the tab that's going away.
@@ -745,7 +745,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
this.setTabTitle(aOurTab);
@@ -6193,10 +6370,10 @@
@@ -6316,10 +6493,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -758,7 +758,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -6254,7 +6431,8 @@
@@ -6377,7 +6554,8 @@
*
* @param {MozTabbrowserTab|MozTabbrowserTabGroup|MozTabbrowserTabGroup.labelElement} aTab
*/
@@ -768,7 +768,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (this.tabs.length == 1) {
return null;
}
@@ -6278,12 +6456,14 @@
@@ -6401,12 +6579,14 @@
}
// tell a new window to take the "dropped" tab
@@ -784,7 +784,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
/**
@@ -6388,7 +6568,7 @@
@@ -6511,7 +6691,7 @@
* `true` if element is a `<tab-group>`
*/
isTabGroup(element) {
@@ -793,7 +793,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
/**
@@ -6473,8 +6653,8 @@
@@ -6596,8 +6776,8 @@
}
// Don't allow mixing pinned and unpinned tabs.
@@ -804,7 +804,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -6500,10 +6680,16 @@
@@ -6623,10 +6803,16 @@
this.#handleTabMove(
element,
() => {
@@ -823,7 +823,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element);
} else {
@@ -6561,23 +6747,31 @@
@@ -6684,23 +6870,31 @@
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
if (this.isTabGroupLabel(targetElement)) {
targetElement = targetElement.group;
@@ -861,7 +861,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
} else if (!element.pinned && targetElement && targetElement.pinned) {
// If the caller asks to move an unpinned element next to a pinned
// tab, move the unpinned element to be the first unpinned element
@@ -6590,14 +6784,38 @@
@@ -6713,14 +6907,38 @@
// 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.
@@ -901,7 +901,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
element.pinned
? this.tabContainer.pinnedTabsContainer
: this.tabContainer;
@@ -6606,11 +6824,15 @@
@@ -6729,11 +6947,15 @@
element,
() => {
if (moveBefore) {
@@ -918,7 +918,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
}
},
metricsContext
@@ -6676,10 +6898,10 @@
@@ -6799,10 +7021,10 @@
* @param {TabMetricsContext} [metricsContext]
*/
moveTabToExistingGroup(aTab, aGroup, metricsContext) {
@@ -931,7 +931,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -6751,6 +6973,7 @@
@@ -6874,6 +7096,7 @@
let state = {
tabIndex: tab._tPos,
@@ -939,7 +939,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
};
if (tab.visible) {
state.elementIndex = tab.elementIndex;
@@ -6777,7 +7000,7 @@
@@ -6903,7 +7126,7 @@
let changedTabGroup =
previousTabState.tabGroupId != currentTabState.tabGroupId;
@@ -948,7 +948,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
tab.dispatchEvent(
new CustomEvent("TabMove", {
bubbles: true,
@@ -6818,6 +7041,10 @@
@@ -6942,6 +7165,10 @@
moveActionCallback();
@@ -959,7 +959,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -6868,7 +7095,22 @@
@@ -6992,7 +7219,22 @@
* @returns {object}
* The new tab in the current window, null if the tab couldn't be adopted.
*/
@@ -983,16 +983,16 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
// Swap the dropped tab with a new one we create and then close
// it in the other window (making it seem to have moved between
// windows). We also ensure that the tab we create to swap into has
@@ -6910,6 +7152,8 @@
params.userContextId = aTab.getAttribute("usercontextid");
@@ -7035,6 +7277,8 @@
}
params.skipLoad = true;
let newTab = this.addWebTab("about:blank", params);
+ newTab._zenContentsVisible = true;
+ newTab.zenStaticLabel = aTab.zenStaticLabel;
let newBrowser = this.getBrowserForTab(newTab);
aTab.container.tabDragAndDrop.finishAnimateTabMove();
@@ -7718,7 +7962,7 @@
@@ -7837,7 +8081,7 @@
// preventDefault(). It will still raise the window if appropriate.
break;
}
@@ -1001,7 +1001,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
window.focus();
aEvent.preventDefault();
break;
@@ -7735,7 +7979,6 @@
@@ -7854,7 +8098,6 @@
}
case "TabGroupCollapse":
aEvent.target.tabs.forEach(tab => {
@@ -1009,7 +1009,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
});
break;
case "TabGroupCreateByUser":
@@ -7895,7 +8138,9 @@
@@ -8014,7 +8257,9 @@
let filter = this._tabFilters.get(tab);
if (filter) {
@@ -1019,7 +1019,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
let listener = this._tabListeners.get(tab);
if (listener) {
@@ -8698,6 +8943,7 @@
@@ -8817,6 +9062,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -1027,7 +1027,7 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -8778,6 +9024,7 @@
@@ -8897,6 +9143,7 @@
// known defaults. Note we use the original URL since about:newtab
// redirects to a prerendered page.
const shouldRemoveFavicon =
@@ -1035,7 +1035,21 @@ index 0eaca7a58e0026237b71b2ad515efe84d9e8c779..41cbe295b29abd014cc0425972be45b5
!this.mBrowser.mIconURL &&
!ignoreBlank &&
!(originalLocation.spec in FAVICON_DEFAULTS);
@@ -9803,7 +10050,7 @@ var TabContextMenu = {
@@ -9071,13 +9318,6 @@
this.mBrowser.originalURI = aRequest.originalURI;
}
- if (!gBrowser._allowTransparentBrowser) {
- this.mBrowser.toggleAttribute(
- "transparent",
- AIWindow.isAIWindowActive(window) &&
- AIWindow.isAIWindowContentPage(aLocation)
- );
- }
}
let userContextId = this.mBrowser.getAttribute("usercontextid") || 0;
@@ -9941,7 +10181,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
index 9abf115062e7c86196d7cb6b8ac82a9bb63b5a65..9a38d7dc10403c1ee721b6abf33d525a4aa1f821 100644
index ebcc072abca51ba9936d0e6d97bbd329427c0231..62e8209bbc38fb209340279e5ed3e2cc2441c48c 100644
--- a/browser/components/tabbrowser/content/tabgroup.js
+++ b/browser/components/tabbrowser/content/tabgroup.js
@@ -14,11 +14,11 @@
@@ -201,7 +201,7 @@ index 9abf115062e7c86196d7cb6b8ac82a9bb63b5a65..9a38d7dc10403c1ee721b6abf33d525a
}
/**
@@ -560,7 +640,6 @@
@@ -569,7 +649,6 @@
);
} else {
if (tabOrSplitView.pinned) {
@@ -209,7 +209,7 @@ index 9abf115062e7c86196d7cb6b8ac82a9bb63b5a65..9a38d7dc10403c1ee721b6abf33d525a
}
let tabToMove =
this.ownerGlobal === tabOrSplitView.ownerGlobal
@@ -625,7 +704,7 @@
@@ -634,7 +713,7 @@
*/
on_click(event) {
let isToggleElement =
@@ -218,7 +218,7 @@ index 9abf115062e7c86196d7cb6b8ac82a9bb63b5a65..9a38d7dc10403c1ee721b6abf33d525a
event.target === this.#overflowCountLabel;
if (isToggleElement && event.button === 0) {
event.preventDefault();
@@ -696,5 +775,6 @@
@@ -705,5 +784,6 @@
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0da1d59be3 100644
index 2760f6700056e2ae9b6a6fdad006c5b679a97233..9661404c030e6815ded926a6d91d4f24f4139f9e 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -240,7 +240,7 @@
@@ -244,7 +244,7 @@
true
)
? new window.TabStacking(this)
@@ -11,7 +11,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
this.tabDragAndDrop.init();
}
@@ -453,7 +453,7 @@
@@ -450,7 +450,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -20,7 +20,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -534,7 +534,6 @@
@@ -531,7 +531,6 @@
});
}
} else if (isTabGroupLabel(event.target)) {
@@ -28,7 +28,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
} else if (
event.originalTarget.closest("scrollbox") &&
!Services.prefs.getBoolPref(
@@ -570,6 +569,9 @@
@@ -567,6 +566,9 @@
}
on_keydown(event) {
@@ -38,7 +38,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
let { altKey, shiftKey } = event;
let [accel, nonAccel] =
AppConstants.platform == "macosx"
@@ -764,7 +766,6 @@
@@ -761,7 +763,6 @@
this._updateCloseButtons();
if (!this.#animatingGroups.size) {
@@ -46,7 +46,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
}
document
@@ -825,7 +826,7 @@
@@ -822,7 +823,7 @@
}
get newTabButton() {
@@ -55,7 +55,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
}
get verticalMode() {
@@ -841,6 +842,7 @@
@@ -838,6 +839,7 @@
}
get overflowing() {
@@ -63,7 +63,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
return this.hasAttribute("overflow");
}
@@ -854,29 +856,56 @@
@@ -851,29 +853,56 @@
if (pinnedChildren?.at(-1)?.id == "pinned-tabs-container-periphery") {
pinnedChildren.pop();
}
@@ -130,7 +130,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
}
/**
@@ -944,29 +973,28 @@
@@ -941,29 +970,28 @@
return this.#focusableItems;
}
@@ -170,7 +170,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
this.#focusableItems = focusableItems;
return this.#focusableItems;
@@ -979,6 +1007,7 @@
@@ -976,6 +1004,7 @@
* focusable (ex, we don't want the splitview container to be focusable, only its children).
*/
get dragAndDropElements() {
@@ -178,7 +178,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
if (this.#dragAndDropElements) {
return this.#dragAndDropElements;
}
@@ -1050,6 +1079,7 @@
@@ -1046,6 +1075,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -186,7 +186,17 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
}
_invalidateCachedVisibleTabs() {
@@ -1154,7 +1184,7 @@
@@ -1065,7 +1095,8 @@
isContainerVerticalPinnedGrid(tab) {
return (
- tab.pinned &&
+ tab.hasAttribute("zen-essential") &&
+ (this._tabbrowserTabs.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
this.verticalMode &&
this.hasAttribute("expanded") &&
!this.expandOnHover
@@ -1159,7 +1190,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -195,7 +205,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
}
node.before(tab);
@@ -1252,7 +1282,7 @@
@@ -1257,7 +1288,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.
@@ -204,7 +214,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1353,8 +1383,10 @@
@@ -1358,8 +1389,10 @@
*/
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -215,7 +225,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
selectedTab._notselectedsinceload = false;
}
@@ -1363,7 +1395,7 @@
@@ -1368,7 +1401,7 @@
* @param {boolean} [shouldScrollInstantly=false]
*/
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
@@ -224,7 +234,7 @@ index a61b4e7af40f1404bf3555a7011c6211de917635..69e3e360b3040dfcb4541bda57e88b0d
if (arrowScrollbox?.overflowing) {
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
}
@@ -1496,7 +1528,7 @@
@@ -1501,7 +1534,7 @@
}
_notifyBackgroundTab(aTab) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index dc8ca021feff9e5c623dd2e9b3e3a8d6f55aa461..b6382bdcfef0cf6c2975fdb6f1a3c9b5c53f81af 100644
index 2dff3603fda9d70d875367fc2b9a05ea5f8eb8c9..0ed283c65f69f00236957aefcb608209e35a3f7c 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -302,7 +302,6 @@ export class UrlbarController {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
index c12d875172650dddfe7de623a776149517c83302..de24df54f510c44acda8c64584bf483a2cb5650a 100644
index 000a00f3e56c2f1d3bf4eec8c4924228de1cb418..f91f8cf38f0ba9c403bc284a7cdaaee17435b258 100644
--- a/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
+++ b/browser/components/urlbar/UrlbarMuxerStandard.sys.mjs
@@ -849,11 +849,16 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -839,11 +839,16 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
result.providerName == "UrlbarProviderHeuristicFallback" &&
state.context.heuristicResult?.providerName !=
"UrlbarProviderHeuristicFallback"
@@ -19,7 +19,7 @@ index c12d875172650dddfe7de623a776149517c83302..de24df54f510c44acda8c64584bf483a
// Discard the result if a tab-to-search result was added already.
if (!state.canAddTabToSearch) {
return false;
@@ -1500,7 +1505,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
@@ -1490,7 +1495,9 @@ class MuxerUnifiedComplete extends UrlbarMuxer {
usedLimits.maxResultCount++;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index 41e8aa0ee37fef0d24d41f2c4e776c39ed3895f6..293e993175bbbd67fa1541db6b9419b687de7fcd 100644
index e09c9b6007c29ea31005a69cf458ce502b0df361..5846f943c03b2b36a36c1e4a8dbbd9a80ff10fe0 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -759,6 +759,7 @@ function makeResultGroups({ showSearchSuggestionsFirst }) {
@@ -760,6 +760,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
*/
let rootGroup = {
children: [

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs b/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
index 7a60a871022df44c0d26745f0035fce988cc5f92..0b89f9b66573d4c5ffb67983d728bb593e5cb524 100644
index 1e159d12ffdc39be87046689b05022813ea925ac..cba7168eeffa54d2c576982927f096b21e039c83 100644
--- a/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
@@ -75,22 +75,26 @@ export class UrlbarProviderHeuristicFallback extends UrlbarProvider {
@@ -77,22 +77,26 @@ export class UrlbarProviderHeuristicFallback extends UrlbarProvider {
// Since we can't tell if this is a real URL and whether the user wants
// to visit or search for it, we provide an alternative searchengine
// match if the string looks like an alphanumeric origin or an e-mail.

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarResult.sys.mjs b/browser/components/urlbar/UrlbarResult.sys.mjs
index 99f331b2c6e4f8eda1bda02cbc6bc6d3f9f4a572..d504632a3f689aefb7d22b863649cb1a8bb3c6a4 100644
index e6eccc010ed3b4595c0aabb1e7d528b20ce1be9b..b71466ebfad0edecb8d7b78ffbe20a95cd69df98 100644
--- a/browser/components/urlbar/UrlbarResult.sys.mjs
+++ b/browser/components/urlbar/UrlbarResult.sys.mjs
@@ -179,6 +179,10 @@ export class UrlbarResult {
@@ -178,6 +178,10 @@ export class UrlbarResult {
return this.#heuristic;
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index a4ed35032c0c60f230d95f451b3f615232784cad..2c92860acb2ddc9829eef006d93431e871241c3a 100644
index caceb63a04fe282d7c906e27a6a2cfebc1ec8cda..74e395e649dd2cbe84683cb583d641b5596082d4 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -81,6 +81,7 @@ export var UrlbarUtils = {
@@ -18,7 +18,7 @@ index a4ed35032c0c60f230d95f451b3f615232784cad..2c92860acb2ddc9829eef006d93431e8
}),
// Per-result exposure telemetry.
@@ -552,6 +554,8 @@ export var UrlbarUtils = {
@@ -561,6 +563,8 @@ export var UrlbarUtils = {
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
case "UrlbarProviderHistoryUrlHeuristic":
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index 6d6cc27e203a5799683a4e6eae1007ff30a69cd0..953c5cd09bcfd832d8ad11016977509f55935eb7 100644
index cba492223601a8aa4656d9dc60a09faeda9f2313..a40bd5d46912389ef7208c4c7b481027444400fd 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -618,7 +618,7 @@ export class UrlbarView {
@@ -11,7 +11,7 @@ index 6d6cc27e203a5799683a4e6eae1007ff30a69cd0..953c5cd09bcfd832d8ad11016977509f
// 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.
@@ -2852,6 +2852,8 @@ export class UrlbarView {
@@ -2871,6 +2871,8 @@ export class UrlbarView {
if (row?.hasAttribute("row-selectable")) {
row?.toggleAttribute("selected", true);
}
@@ -20,7 +20,7 @@ index 6d6cc27e203a5799683a4e6eae1007ff30a69cd0..953c5cd09bcfd832d8ad11016977509f
if (element != row) {
row?.toggleAttribute("descendant-selected", true);
}
@@ -3336,7 +3338,7 @@ export class UrlbarView {
@@ -3359,7 +3361,7 @@ export class UrlbarView {
}
#enableOrDisableRowWrap() {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dce857e122 100644
index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..7462aa0fa72092524d5206d9b2c776ccdfad65c3 100644
--- a/browser/components/urlbar/content/UrlbarInput.mjs
+++ b/browser/components/urlbar/content/UrlbarInput.mjs
@@ -68,6 +68,13 @@ const lazy = XPCOMUtils.declareLazy({
@@ -16,7 +16,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
const UNLIMITED_MAX_RESULTS = 99;
let getBoundsWithoutFlushing = element =>
@@ -630,7 +637,16 @@ export class UrlbarInput extends HTMLElement {
@@ -649,7 +656,16 @@ export class UrlbarInput extends HTMLElement {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -33,7 +33,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
this._suppressPrimaryAdjustment = false;
}
@@ -704,6 +720,10 @@ export class UrlbarInput extends HTMLElement {
@@ -723,6 +739,10 @@ export class UrlbarInput extends HTMLElement {
hideSearchTerms = false,
isSameDocument = false,
} = {}) {
@@ -44,7 +44,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (!this.#isAddressbar) {
throw new Error(
"Cannot set URI for UrlbarInput that is not an address bar"
@@ -985,8 +1005,16 @@ export class UrlbarInput extends HTMLElement {
@@ -1012,8 +1032,16 @@ export class UrlbarInput extends HTMLElement {
return;
}
}
@@ -62,7 +62,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
}
/**
@@ -1405,7 +1433,11 @@ export class UrlbarInput extends HTMLElement {
@@ -1432,7 +1460,11 @@ export class UrlbarInput extends HTMLElement {
}
if (!this.#providesSearchMode(result)) {
@@ -75,7 +75,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
}
if (isCanonized) {
@@ -2529,6 +2561,32 @@ export class UrlbarInput extends HTMLElement {
@@ -2598,6 +2630,32 @@ export class UrlbarInput extends HTMLElement {
await this.#updateLayoutBreakoutDimensions();
}
@@ -108,7 +108,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2543,6 +2601,13 @@ export class UrlbarInput extends HTMLElement {
@@ -2612,6 +2670,13 @@ export class UrlbarInput extends HTMLElement {
this.setAttribute("breakout-extend", "true");
@@ -122,7 +122,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
// 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")) {
@@ -2562,6 +2627,27 @@ export class UrlbarInput extends HTMLElement {
@@ -2631,6 +2696,27 @@ export class UrlbarInput extends HTMLElement {
return;
}
@@ -150,7 +150,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2592,7 +2678,7 @@ export class UrlbarInput extends HTMLElement {
@@ -2661,7 +2747,7 @@ export class UrlbarInput extends HTMLElement {
forceUnifiedSearchButtonAvailable = false
) {
let prevState = this.getAttribute("pageproxystate");
@@ -159,7 +159,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
this.setAttribute("pageproxystate", state);
this._inputContainer.setAttribute("pageproxystate", state);
this._identityBox?.setAttribute("pageproxystate", state);
@@ -2846,10 +2932,12 @@ export class UrlbarInput extends HTMLElement {
@@ -2915,10 +3001,12 @@ export class UrlbarInput extends HTMLElement {
return;
}
this.style.top = px(
@@ -172,7 +172,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
);
}
@@ -2908,9 +2996,10 @@ export class UrlbarInput extends HTMLElement {
@@ -2977,9 +3065,10 @@ export class UrlbarInput extends HTMLElement {
return;
}
@@ -184,7 +184,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
);
this.style.setProperty(
"--urlbar-height",
@@ -3344,6 +3433,7 @@ export class UrlbarInput extends HTMLElement {
@@ -3413,6 +3502,7 @@ export class UrlbarInput extends HTMLElement {
}
_toggleActionOverride(event) {
@@ -192,7 +192,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
event.keyCode == KeyEvent.DOM_VK_ALT ||
@@ -3447,8 +3537,8 @@ export class UrlbarInput extends HTMLElement {
@@ -3516,8 +3606,8 @@ export class UrlbarInput extends HTMLElement {
if (!this.#isAddressbar) {
return val;
}
@@ -203,7 +203,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3754,6 +3844,7 @@ export class UrlbarInput extends HTMLElement {
@@ -3824,6 +3914,7 @@ export class UrlbarInput extends HTMLElement {
resultDetails = null,
browser = this.window.gBrowser.selectedBrowser
) {
@@ -211,7 +211,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (this.#isAddressbar) {
this.#prepareAddressbarLoad(
url,
@@ -3861,6 +3952,10 @@ export class UrlbarInput extends HTMLElement {
@@ -3935,6 +4026,10 @@ export class UrlbarInput extends HTMLElement {
}
reuseEmpty = true;
}
@@ -222,7 +222,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (
where == "tab" &&
reuseEmpty &&
@@ -3868,6 +3963,9 @@ export class UrlbarInput extends HTMLElement {
@@ -3942,6 +4037,9 @@ export class UrlbarInput extends HTMLElement {
) {
where = "current";
}
@@ -232,7 +232,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
return where;
}
@@ -4122,6 +4220,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4196,6 +4294,7 @@ export class UrlbarInput extends HTMLElement {
this.setResultForCurrentValue(null);
this.handleCommand();
this.controller.clearLastQueryContextCache();
@@ -240,7 +240,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
this._suppressStartQuery = false;
});
@@ -4129,7 +4228,6 @@ export class UrlbarInput extends HTMLElement {
@@ -4203,7 +4302,6 @@ export class UrlbarInput extends HTMLElement {
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.
@@ -248,7 +248,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4239,7 +4337,11 @@ export class UrlbarInput extends HTMLElement {
@@ -4319,7 +4417,11 @@ export class UrlbarInput extends HTMLElement {
if (!engineName && !source && !this.hasAttribute("searchmode")) {
return;
}
@@ -261,7 +261,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (this._searchModeIndicatorTitle) {
this._searchModeIndicatorTitle.textContent = "";
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
@@ -4549,6 +4651,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4629,6 +4731,7 @@ export class UrlbarInput extends HTMLElement {
this.document.l10n.setAttributes(
this.inputField,
@@ -269,7 +269,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
l10nId,
l10nId == "urlbar-placeholder-with-name"
? { name: engineName }
@@ -4662,6 +4765,11 @@ export class UrlbarInput extends HTMLElement {
@@ -4742,6 +4845,11 @@ export class UrlbarInput extends HTMLElement {
}
_on_click(event) {
@@ -281,7 +281,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
switch (event.target) {
case this.inputField:
case this._inputContainer:
@@ -4740,7 +4848,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4820,7 +4928,7 @@ export class UrlbarInput extends HTMLElement {
}
}
@@ -290,7 +290,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -4780,9 +4888,16 @@ export class UrlbarInput extends HTMLElement {
@@ -4860,9 +4968,16 @@ export class UrlbarInput extends HTMLElement {
}
_on_mousedown(event) {
@@ -308,7 +308,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
if (
event.composedTarget != this.inputField &&
event.composedTarget != this._inputContainer
@@ -4792,6 +4907,10 @@ export class UrlbarInput extends HTMLElement {
@@ -4872,6 +4987,10 @@ export class UrlbarInput extends HTMLElement {
this.focusedViaMousedown = !this.focused;
this._preventClickSelectsAll = this.focused;
@@ -319,7 +319,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
// Keep the focus status, since the attribute may be changed
// upon calling this.focus().
@@ -4827,7 +4946,7 @@ export class UrlbarInput extends HTMLElement {
@@ -4907,7 +5026,7 @@ export class UrlbarInput extends HTMLElement {
}
// 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.
@@ -328,7 +328,7 @@ index edb0482f0bfb22c70a585b0770e5b0437983779e..109e9eb18b90c650caff1287caef04dc
break;
}
@@ -5155,7 +5274,7 @@ export class UrlbarInput extends HTMLElement {
@@ -5235,7 +5354,7 @@ export class UrlbarInput extends HTMLElement {
// When we are in actions search mode we can show more results so
// increase the limit.
let maxResults =

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index 0f73c33c3237413131a2f4d2d1f3be857e533437..d7e9fcadc7744651fbe14952589df4603e7db592 100644
index 5e182ead8a17ef2e8e3e1701fe227f279d0506ff..7fc7cba4152c2682dd8ef90c35ab1a3a92e04529 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -295,7 +295,7 @@ export const PREFS_CONFIG = new Map([
@@ -288,7 +288,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,5 +1,5 @@
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
index e877b4b8a8cc6fc233025d0b58de50a68ecb9fd9..9d7d9064d0b4c62a3de3b81e852b2b49170bf8a3 100755
index 74bfc36cb6e370b7dbf9fff6697a469c207f10d6..c5cdc832a430752340b33655d010c0348183b601 100755
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -836,7 +836,7 @@ Section "-InstallEndCleanup"

View File

@@ -1,16 +1,16 @@
diff --git a/browser/modules/BrowserWindowTracker.sys.mjs b/browser/modules/BrowserWindowTracker.sys.mjs
index 0cd9e9630fff20d71dc1dd7367ae6af4f7a53f71..7212c5f4745f3c93c1ede932af1b0e85580aa679 100644
index 0f2f66e4bbc27785d53e262001f2ad7f9a1b3216..ed8b600fd2093428e01489d7dc4aa1f5365b645e 100644
--- a/browser/modules/BrowserWindowTracker.sys.mjs
+++ b/browser/modules/BrowserWindowTracker.sys.mjs
@@ -326,6 +326,7 @@ export const BrowserWindowTracker = {
args = null,
remote = undefined,
fission = undefined,
@@ -331,6 +331,7 @@ export const BrowserWindowTracker = {
args = null,
remote = undefined,
fission = undefined,
+ zenSyncedWindow = true,
} = {}) {
let windowFeatures = "chrome,dialog=no";
if (all) {
@@ -382,6 +383,12 @@ export const BrowserWindowTracker = {
} = options;
args = lazy.AIWindow.handleAIWindowOptions(options);
@@ -390,6 +391,12 @@ export const BrowserWindowTracker = {
windowFeatures,
args
);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
index 646cf238ebfbd5ac1826cf47f578f66aa020199f..ba5a1950f683c4d8cb836ee9cd466c0b446f2241 100644
index e6ef8578b460282eeb473f78c71addc43192e228..2c7418f6eb416a58166287e2c6a37c22ee12d6ea 100644
--- a/browser/themes/linux/browser.css
+++ b/browser/themes/linux/browser.css
@@ -14,7 +14,6 @@
@@ -10,7 +10,7 @@ index 646cf238ebfbd5ac1826cf47f578f66aa020199f..ba5a1950f683c4d8cb836ee9cd466c0b
}
}
}
@@ -43,7 +42,8 @@
@@ -58,7 +57,8 @@
-moz-default-appearance: -moz-window-decorations;
appearance: auto;
@@ -20,7 +20,7 @@ index 646cf238ebfbd5ac1826cf47f578f66aa020199f..ba5a1950f683c4d8cb836ee9cd466c0b
dialog::backdrop {
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
@@ -51,13 +51,11 @@
@@ -66,13 +66,11 @@
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css
index 63d9641c7107c1444cb74f1536193246106f5cae..4298760fab4862e64ec74df23e00b373c5745605 100644
index aceda010e08cd20dcfb5eb2e6f253314ea087849..9b0b4af4fded24be573d59b62b9905d15e1e2dd6 100644
--- a/browser/themes/shared/browser-shared.css
+++ b/browser/themes/shared/browser-shared.css
@@ -103,7 +103,7 @@ body {
@@ -104,7 +104,7 @@ body {
--toolbarbutton-border-radius: var(--button-border-radius);
--identity-box-margin-inline: 4px;
--urlbar-min-height: max(32px, 1.4em);
@@ -11,7 +11,7 @@ index 63d9641c7107c1444cb74f1536193246106f5cae..4298760fab4862e64ec74df23e00b373
/* This should be used for icons and chiclets inside the input field, as well
as result rows. It makes the gap around them more uniform when they are
@@ -172,8 +172,6 @@ body {
@@ -173,8 +173,6 @@ body {
*/
&.fullscreen-with-menubar {
z-index: var(--browser-area-z-index-toolbox-while-animating);
@@ -20,7 +20,7 @@ index 63d9641c7107c1444cb74f1536193246106f5cae..4298760fab4862e64ec74df23e00b373
}
/* Themes define a set of toolbox foreground and background colors which we
@@ -282,13 +280,13 @@ body {
@@ -283,13 +281,13 @@ body {
@media (-moz-platform: macos) and (not (-moz-mac-rtl)) {
&:-moz-locale-dir(ltr) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/identity-block/identity-block.css b/browser/themes/shared/identity-block/identity-block.css
index e9f0ea328cde3631ef856f44d47abb9c5cec5ee1..66ec2bc8bb716ad9e87f88f3d93f9516c9eb8052 100644
index 3996a050162f4baa3a3ed3d09bc6b7bd0c3a1404..ba432205acde344dfec9f98333df2d4dd85c14ba 100644
--- a/browser/themes/shared/identity-block/identity-block.css
+++ b/browser/themes/shared/identity-block/identity-block.css
@@ -7,7 +7,7 @@

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
index ab8601e76409ad1a026763379a395dd52f503f27..3b32198dfa770d29f4e2f2b0faed5f3ff735c664 100644
index ccae208d64af19d15b85f72a4a38ea95448ed9e9..5c184a33c1d3416d9c16e3edf1353174aea3ed03 100644
--- a/browser/themes/shared/jar.inc.mn
+++ b/browser/themes/shared/jar.inc.mn
@@ -326,3 +326,5 @@
@@ -328,3 +328,5 @@
skin/classic/browser/illustrations/market-opt-in.svg (../shared/illustrations/market-opt-in.svg)
skin/classic/browser/illustrations/yelpRealtime-opt-in.svg (../shared/illustrations/yelpRealtime-opt-in.svg)

View File

@@ -1,8 +1,8 @@
diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css
index b00139d7af878326ff303c08d5ddd47501b8c7db..7361a5e98d6ea372f6fdc583d90044d276cfb81b 100644
index 7fbe572527a702f35434ad73ad6cda41c5c082c0..ccf7c8c5f408cec50e562a9821767ea3e22b7e3c 100644
--- a/browser/themes/shared/tabbrowser/content-area.css
+++ b/browser/themes/shared/tabbrowser/content-area.css
@@ -90,7 +90,6 @@
@@ -89,7 +89,6 @@
min-height: 0;
/* We want to be able to show the frame color behind the clipped radiused corner */
@@ -18,20 +18,20 @@ index b00139d7af878326ff303c08d5ddd47501b8c7db..7361a5e98d6ea372f6fdc583d90044d2
}
browser[type="content"] {
@@ -392,7 +390,7 @@ split-view-footer {
@@ -423,7 +421,7 @@ split-view-footer {
.dialogStack {
z-index: var(--browser-stack-z-index-dialog-stack);
- position: absolute;
+ position: fixed;
inset: 0;
/* Hide tab-modal dialogs when a window-modal one is up. */
@@ -553,7 +551,7 @@ split-view-footer {
/* --browser-with-dialog set on browser[tabDialogShowing], we want to position the overlay
only on the top of the <browser> element so it doesn't overlap the DevTools toolbox */
@@ -590,7 +588,7 @@ split-view-footer {
.dialogOverlay[topmost="true"],
#window-modal-dialog::backdrop {
- background-color: var(--dialog-backdrop-color);
- background-color: var(--background-color-overlay);
+ background-color: light-dark(rgba(255, 255, 255, .3), rgba(0, 0, 0, .3));
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/ctrlTab.css b/browser/themes/shared/tabbrowser/ctrlTab.css
index ffda4922c675f6159c825334cba9d49658d316ba..7b3d4d2b5c6d732a1d0074e05cc48131fe57c630 100644
index 6a7d295bfaed7f0429a8ff5ac9b8a2db4ee911e3..d1a3a8d44bc06102adaef294dc72f8f404be17dc 100644
--- a/browser/themes/shared/tabbrowser/ctrlTab.css
+++ b/browser/themes/shared/tabbrowser/ctrlTab.css
@@ -11,6 +11,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dccdf3b11fc 100644
index dff30e3f3f800e3fb499aa84450d3571e705820f..57a97e8955f3a6c9b0b8b6a9a15addd343204691 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -21,7 +21,7 @@
@@ -23,7 +23,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
--tab-selected-bgcolor: var(--toolbar-bgcolor);
--tab-selected-color-scheme: var(--toolbar-color-scheme);
&[lwt-tab-selected="light"] {
@@ -293,7 +293,6 @@
@@ -294,7 +294,6 @@ tab-split-view-wrapper[dragtarget] {
}
:root:not([uidensity="compact"], [sidebar-expand-on-hover]) &[pinned] {
@@ -31,7 +31,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
}
&:is([selected], [multiselected]) {
@@ -307,6 +306,7 @@
@@ -308,6 +307,7 @@ tab-split-view-wrapper[dragtarget] {
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -39,7 +39,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&::before {
position: absolute;
@@ -506,10 +506,6 @@
@@ -507,10 +507,6 @@ tab-split-view-wrapper[dragtarget] {
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutUnloadedTabs") {
&[pending] {
@@ -50,7 +50,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -526,10 +522,6 @@
@@ -527,10 +523,6 @@ tab-split-view-wrapper[dragtarget] {
/* stylelint-disable-next-line media-query-no-invalid */
@media -moz-pref("browser.tabs.fadeOutExplicitlyUnloadedTabs") {
&[pending][discarded] {
@@ -61,7 +61,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
opacity: 0.5;
/* Fade the favicon out */
transition-property: filter, opacity;
@@ -598,7 +590,7 @@
@@ -599,7 +591,7 @@ tab-split-view-wrapper[dragtarget] {
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient="vertical"] & {
@@ -70,7 +70,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
}
&[crashed] {
@@ -606,7 +598,7 @@
@@ -607,7 +599,7 @@ tab-split-view-wrapper[dragtarget] {
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -79,7 +79,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -663,7 +655,7 @@
@@ -664,7 +656,7 @@ tab-split-view-wrapper[dragtarget] {
}
}
@@ -88,7 +88,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&[crashed] {
display: revert;
}
@@ -830,7 +822,7 @@
@@ -831,7 +823,7 @@ tab-split-view-wrapper[dragtarget] {
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]),
@@ -97,7 +97,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: flex;
}
@@ -1521,7 +1513,7 @@ tab-group {
@@ -1529,7 +1521,7 @@ tab-group {
}
#tabbrowser-tabs[orient="vertical"][expanded] {
@@ -106,7 +106,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) {
margin-inline-start: var(--space-medium);
}
@@ -1999,7 +1991,7 @@ tab-group {
@@ -2036,7 +2028,7 @@ tab-group {
}
}
@@ -115,7 +115,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -2010,7 +2002,7 @@ tab-group {
@@ -2047,7 +2039,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -124,7 +124,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
}
&:hover {
@@ -2034,7 +2026,7 @@ tab-group {
@@ -2071,7 +2063,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.
*/
@@ -133,7 +133,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
margin-block: var(--tab-block-margin);
}
@@ -2222,7 +2214,6 @@ tab-group {
@@ -2259,7 +2251,6 @@ tab-group {
&:not([expanded]) {
.tabbrowser-tab[pinned] {
@@ -141,7 +141,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
}
.tab-background {
@@ -2262,8 +2253,8 @@ tab-group {
@@ -2299,8 +2290,8 @@ tab-group {
display: block;
position: absolute;
inset: auto;
@@ -152,7 +152,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
&:-moz-window-inactive {
background-image:
@@ -2348,9 +2339,6 @@ tab-group {
@@ -2385,9 +2376,6 @@ tab-group {
:root:not([privatebrowsingmode]) :is(toolbarbutton, toolbarpaletteitem) ~ #tabbrowser-tabs,
:root[privatebrowsingmode] :is(toolbarbutton:not(#firefox-view-button), toolbarpaletteitem:not(#wrapper-firefox-view-button)) ~ #tabbrowser-tabs {
@@ -162,7 +162,7 @@ index 310e7866b942df5c3c34815f4612a2a2ad8c42a6..d4931a0184209951ced288c894613dcc
}
:root[privatebrowsingmode] :is(#firefox-view-button, #menu_openFirefoxView) {
@@ -2382,7 +2370,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -2419,7 +2407,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
index e2b8a7cae70ed2bd3c80ee4214a09dbdb68a0d01..ab1b50a06b68cc6941789b31494b44da6aecdb19 100644
index f681decf193605b633f1cffa493ac3b000b542bd..21ee9ce2594308aba0ae6d86e4f82bef6ef95b6d 100644
--- a/browser/themes/shared/toolbarbuttons.css
+++ b/browser/themes/shared/toolbarbuttons.css
@@ -44,20 +44,6 @@

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
index edfe3e05a1b4517a4de6e09221ebdcfb5d8f1fe5..5986f88babf2b8d48ec8a5c0724787b13275aeff 100644
index 78a2c85af51f90958b445eac53a540b382163102..7509b28c6d868a6f1c34f36330e695c163e12788 100644
--- a/browser/themes/shared/urlbar-searchbar.css
+++ b/browser/themes/shared/urlbar-searchbar.css
@@ -9,7 +9,7 @@
@@ -11,16 +11,16 @@ index edfe3e05a1b4517a4de6e09221ebdcfb5d8f1fe5..5986f88babf2b8d48ec8a5c0724787b1
--urlbar-container-border-padding: calc(var(--urlbar-container-border-width) + var(--urlbar-container-padding));
--urlbar-margin-inline: 5px;
--urlbar-padding-block: 4px;
@@ -52,7 +52,7 @@
#urlbar[usertyping] > .urlbar-input-container > #page-action-buttons > #urlbar-zoom-button,
.urlbar:is(:not([usertyping]), :not([focused])) > .urlbar-input-container > .urlbar-go-button,
.urlbar-revert-button-container {
@@ -54,7 +54,7 @@ toolbar[inactive="true"] .urlbar,
.urlbar:not([usertyping]) > .urlbar-input-container > .urlbar-go-button,
.urlbar:not(#searchbar-new, [focused]) > .urlbar-input-container > .urlbar-go-button,
#urlbar-revert-button-container {
- display: none;
+ display: none !important;
}
/* When rich suggestions are enabled the urlbar identity icon is given extra padding to
@@ -323,10 +323,14 @@
@@ -325,10 +325,14 @@ toolbar[inactive="true"] .urlbar,
.urlbar[breakout][breakout-extend] {
height: auto;

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
index 1ba5a570cb1fe690cf88396643baba02f9265095..312891b41e1c62b4ed53f5cbd63bd3280dde7512 100644
index 1af12e42c529481ff87539a84db20a1d6016d63a..7060711042a72c9df54c98ceb2c3ba3c850f9295 100644
--- a/browser/themes/shared/urlbarView.css
+++ b/browser/themes/shared/urlbarView.css
@@ -20,7 +20,7 @@

View File

@@ -1,16 +1,16 @@
diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css
index b114781254018a27cd559c28d5d469fbab8673b5..79e6e21dd6e0a63237850bd315558540f050793c 100644
index a0ffa8cac5a4d7ec220e7ee5dd7d70dba81e9026..766d69d1a2c41f3de7de9b05ef096fcccaa5c2a0 100644
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -39,7 +39,6 @@
/* stylelint-disable-next-line media-query-no-invalid */
@@ -41,7 +41,6 @@
@media -moz-pref("widget.windows.mica.toplevel-backdrop", 2) {
/* For acrylic, do the same we do for popups to guarantee some contrast */
- background-color: light-dark(rgba(255, 255, 255, 0.6), rgba(0, 0, 0, 0.6));
/* stylelint-disable-next-line stylelint-plugin-mozilla/use-design-tokens, stylelint-plugin-mozilla/no-base-design-tokens */
- background-color: light-dark(var(--color-white-alpha-60), var(--color-black-alpha-60));
}
/* Using a semitransparent background preserves the tinting from the backdrop.
@@ -68,14 +67,13 @@
@@ -70,14 +69,13 @@
}
/* This is needed for Windows 10, see bug 1961257 */

View File

@@ -1,12 +1,14 @@
diff --git a/devtools/startup/DevToolsStartup.sys.mjs b/devtools/startup/DevToolsStartup.sys.mjs
index 40926f9620bfe8ecc1d295026b219f5b7f83860c..6811d0681c9c9b8555f0c7f72d6cd3cd42a0b1bd 100644
index d6428524107325bc6680947f45a890991936cad4..9dd68c54b72ee17ba2cc998634b38b6155b8b388 100644
--- a/devtools/startup/DevToolsStartup.sys.mjs
+++ b/devtools/startup/DevToolsStartup.sys.mjs
@@ -835,6 +835,7 @@ DevToolsStartup.prototype = {
@@ -836,6 +836,9 @@ export class DevToolsStartup {
// account (see bug 832984).
const mainKeyset = doc.getElementById("mainKeyset");
mainKeyset.parentNode.insertBefore(keyset, mainKeyset);
+ window.dispatchEvent(new window.Event("zen-devtools-keyset-added"));
},
+ mainKeyset.ownerGlobal.setTimeout(() => {
+ window.dispatchEvent(new window.Event("zen-devtools-keyset-added"));
+ }, 0);
}
/**

View File

@@ -1,5 +1,5 @@
diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
index 49779b7cc79a602e764c8346e17a02310808aab8..1b1000cf7177bd83ca6d6c484a1c3b48c7216fc9 100644
index d6720d69cb123ab7cdc53671e49d27a8970d9607..b83748e2f6b5bb4623db709a6ac8803644c6d56a 100644
--- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp
@@ -117,7 +117,7 @@ static const RedirEntry kRedirMap[] = {

View File

@@ -1,8 +1,8 @@
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
index 7bbbaf6fb936eda9cf87f164f93f4a96a50cf733..b1a50d8b4932f60f882b7f60c7d65ce3a9fde99d 100644
index d9917d78b93d3200cbe15a1ee316cf01c0ad88de..4d7e4f9d57f0d121c717758ead06e554e01aea91 100644
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -461,6 +461,7 @@
@@ -462,6 +462,7 @@
#include "prtime.h"
#include "prtypes.h"
#include "xpcpublic.h"
@@ -10,7 +10,7 @@ index 7bbbaf6fb936eda9cf87f164f93f4a96a50cf733..b1a50d8b4932f60f882b7f60c7d65ce3
// clang-format off
#include "mozilla/Encoding.h"
@@ -3446,6 +3447,10 @@ void Document::FillStyleSetUserAndUASheets() {
@@ -3327,6 +3328,10 @@ void Document::FillStyleSetUserAndUASheets() {
for (StyleSheet* sheet : *sheetService->UserStyleSheets()) {
styleSet.AppendStyleSheet(*sheet);
}

View File

@@ -1,8 +1,8 @@
diff --git a/gfx/wr/webrender/src/picture.rs b/gfx/wr/webrender/src/picture.rs
index 79e062a40ed097fa6614abc6b5201f868c447733..91c10d17f0dca55eafec522ddc94b91bf4cd2cfb 100644
index ba0885e8af7043e0939a61bab1574c59e7e99d01..43e6476c59cee2477f011f2014052e3fe9f7da02 100644
--- a/gfx/wr/webrender/src/picture.rs
+++ b/gfx/wr/webrender/src/picture.rs
@@ -8121,7 +8121,12 @@ fn get_relative_scale_offset(
@@ -1540,7 +1540,12 @@ pub fn get_relative_scale_offset(
CoordinateSpaceMapping::Local => ScaleOffset::identity(),
CoordinateSpaceMapping::ScaleOffset(scale_offset) => scale_offset,
CoordinateSpaceMapping::Transform(m) => {

View File

@@ -1,8 +1,8 @@
diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp
index 2c4aca4a5984fc3201a2c643f8d26b8c4f4ef3bd..4c21cee90e5442d45cdb2bcf3f91200f0441218f 100644
index 67ae256038fae1d61824d58f5e544f65505a1ed5..b6e70376f1d9230df9beb01216092969e9322c8f 100644
--- a/layout/generic/nsIFrame.cpp
+++ b/layout/generic/nsIFrame.cpp
@@ -11956,6 +11956,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
@@ -11973,6 +11973,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms(
uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel));

View File

@@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.cpp b/layout/style/nsStyleStruct.cpp
index 25357c6a506b969c5049190c29e4e411ee5f4c31..bef909ddfc28d084cf87cae3fbd050bbde21468d 100644
index e5883b377afee44626a2928a97205382e6d07e40..57ae3b0567fbd7afbcfb60a2cd662f611339e5ad 100644
--- a/layout/style/nsStyleStruct.cpp
+++ b/layout/style/nsStyleStruct.cpp
@@ -3270,6 +3270,9 @@ nsStyleUIReset::nsStyleUIReset()
@@ -3287,6 +3287,9 @@ nsStyleUIReset::nsStyleUIReset()
mWindowShadow(StyleWindowShadow::Auto),
mWindowOpacity(1.0),
mMozWindowInputRegionMargin(StyleLength::Zero()),
@@ -12,7 +12,7 @@ index 25357c6a506b969c5049190c29e4e411ee5f4c31..bef909ddfc28d084cf87cae3fbd050bb
mTransitions(
nsStyleAutoArray<StyleTransition>::WITH_SINGLE_INITIAL_ELEMENT),
mTransitionTimingFunctionCount(1),
@@ -3314,6 +3317,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
@@ -3331,6 +3334,7 @@ nsStyleUIReset::nsStyleUIReset(const nsStyleUIReset& aSource)
mWindowOpacity(aSource.mWindowOpacity),
mMozWindowInputRegionMargin(aSource.mMozWindowInputRegionMargin),
mMozWindowTransform(aSource.mMozWindowTransform),

View File

@@ -1,5 +1,5 @@
diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h
index ca11ab168761a6da23811d802a87f6c31af6cca9..cb74679626620a12d37fb1671c373ea9793ae004 100644
index 14c24446880b7342f6c194bb068f5fd54657ec85..8a0067b2694029242a0fbe6d806b1dd0153f1715 100644
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -2094,6 +2094,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {

View File

@@ -1,8 +1,8 @@
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index 0986e53121fdb821bca4a7c30ff707bfdf2dbad7..2a1865098a00282aa1839df245cb472cdd64fdec 100644
index b34b34d6f94525dc97c9e7008e689b2069862845..d56f4daccbfb3cf316dafb68d50dbd572d297fad 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -19748,6 +19748,7 @@
@@ -19786,6 +19786,7 @@
mirror: always
#endif

View File

@@ -1,8 +1,8 @@
diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs
index 26871fb68d4eae54c750b7fcc4db2cf73f9bb9c9..cca3546d0a25aa34be578427ced241856c6a63a7 100644
index 9db79f86868edd798177bc04a8520025c4cf4568..fe0e74f9a047fd101d8e510eda3abf690b33f41f 100644
--- a/servo/components/style/gecko/media_features.rs
+++ b/servo/components/style/gecko/media_features.rs
@@ -13,6 +13,9 @@ use crate::values::computed::{CSSPixelLength, Context, Ratio, Resolution};
@@ -15,6 +15,9 @@ use crate::values::computed::{CSSPixelLength, Context, Ratio, Resolution};
use crate::values::specified::color::ForcedColors;
use app_units::Au;
use euclid::default::Size2D;
@@ -12,7 +12,7 @@ index 26871fb68d4eae54c750b7fcc4db2cf73f9bb9c9..cca3546d0a25aa34be578427ced24185
fn device_size(device: &Device) -> Size2D<Au> {
let mut width = 0;
@@ -609,6 +612,13 @@ fn eval_scripting(context: &Context, query_value: Option<Scripting>) -> bool {
@@ -617,6 +620,13 @@ fn eval_scripting(context: &Context, query_value: Option<Scripting>) -> bool {
fn eval_moz_overlay_scrollbars(context: &Context) -> bool {
unsafe { bindings::Gecko_MediaFeatures_UseOverlayScrollbars(context.device().document()) }
}
@@ -26,7 +26,7 @@ index 26871fb68d4eae54c750b7fcc4db2cf73f9bb9c9..cca3546d0a25aa34be578427ced24185
fn eval_moz_mac_rtl(context: &Context) -> bool {
unsafe { bindings::Gecko_MediaFeatures_MacRTL(context.device().document()) }
@@ -652,7 +662,13 @@ macro_rules! lnf_int_feature {
@@ -660,7 +670,13 @@ macro_rules! lnf_int_feature {
/// to support new types in these entries and (2) ensuring that either
/// nsPresContext::MediaFeatureValuesChanged is called when the value that
/// would be returned by the evaluator function could change.

View File

@@ -1,16 +1,16 @@
diff --git a/servo/components/style/queries/feature.rs b/servo/components/style/queries/feature.rs
index 1414dd624e0761d269f7e3b1c64ed4bb6576a6e3..f0204c2ee3e8c3527750a26788b5fb7cdf8dfc67 100644
index beb8656bc51044343c8ce42892d03178edd2dff1..d886bdecb37761badc534dc31e29cee43549c352 100644
--- a/servo/components/style/queries/feature.rs
+++ b/servo/components/style/queries/feature.rs
@@ -6,6 +6,7 @@
@@ -7,6 +7,7 @@
use crate::derives::*;
use crate::parser::ParserContext;
use crate::values::computed::{self, CSSPixelLength, Ratio, Resolution};
+use crate::values::AtomString;
use crate::Atom;
use cssparser::Parser;
use selectors::kleene_value::KleeneValue;
@@ -44,6 +45,7 @@ pub enum Evaluator {
@@ -45,6 +46,7 @@ pub enum Evaluator {
OptionalNumberRatio(QueryFeatureGetter<Option<Ratio>>),
/// A resolution.
Resolution(QueryFeatureGetter<Resolution>),

View File

@@ -1,8 +1,8 @@
diff --git a/servo/components/style/queries/feature_expression.rs b/servo/components/style/queries/feature_expression.rs
index e0787193559ccd32b214272f1a0560cb058e3729..4388de8e2bcba9c3610dfc791fb751d916820e6f 100644
index 17490c8b1d8efee96d7894262d3e25b91cea7506..fa7b32bcd4f3a5490c481ac7c8203b164b851e22 100644
--- a/servo/components/style/queries/feature_expression.rs
+++ b/servo/components/style/queries/feature_expression.rs
@@ -11,7 +11,7 @@ use crate::parser::{Parse, ParserContext};
@@ -12,7 +12,7 @@ use crate::parser::{Parse, ParserContext};
use crate::str::{starts_with_ignore_ascii_case, string_as_ascii_lowercase};
use crate::values::computed::{self, Ratio, ToComputedValue};
use crate::values::specified::{Integer, Length, Number, Resolution};
@@ -11,7 +11,7 @@ index e0787193559ccd32b214272f1a0560cb058e3729..4388de8e2bcba9c3610dfc791fb751d9
use crate::{Atom, Zero};
use cssparser::{Parser, Token};
use selectors::kleene_value::KleeneValue;
@@ -623,6 +623,10 @@ impl QueryFeatureExpression {
@@ -624,6 +624,10 @@ impl QueryFeatureExpression {
.map(|v| *expect!(Enumerated, v));
return evaluator(context, computed);
},
@@ -22,7 +22,7 @@ index e0787193559ccd32b214272f1a0560cb058e3729..4388de8e2bcba9c3610dfc791fb751d9
Evaluator::BoolInteger(eval) => {
let computed = self
.kind
@@ -661,6 +665,7 @@ pub enum QueryExpressionValue {
@@ -662,6 +666,7 @@ pub enum QueryExpressionValue {
/// An enumerated value, defined by the variant keyword table in the
/// feature's `mData` member.
Enumerated(KeywordDiscriminant),
@@ -30,7 +30,7 @@ index e0787193559ccd32b214272f1a0560cb058e3729..4388de8e2bcba9c3610dfc791fb751d9
}
impl QueryExpressionValue {
@@ -679,6 +684,7 @@ impl QueryExpressionValue {
@@ -680,6 +685,7 @@ impl QueryExpressionValue {
Evaluator::Enumerated { serializer, .. } => dest.write_str(&*serializer(value)),
_ => unreachable!(),
},
@@ -38,7 +38,7 @@ index e0787193559ccd32b214272f1a0560cb058e3729..4388de8e2bcba9c3610dfc791fb751d9
}
}
@@ -716,6 +722,9 @@ impl QueryExpressionValue {
@@ -717,6 +723,9 @@ impl QueryExpressionValue {
Evaluator::Resolution(..) => {
QueryExpressionValue::Resolution(Resolution::parse(context, input)?)
},

View File

@@ -1,5 +1,5 @@
diff --git a/testing/mochitest/browser-test.js b/testing/mochitest/browser-test.js
index a687d271a91207f3e4a7b9afdf67031f8d9385d1..ebbf2e0cbf5e9eeca472c4c2a5963c290be8897d 100644
index 1e1fa8146450e3e09706180b85633cc87ddf6269..acbcefa6533d6bf909a767899b280592d3b0efda 100644
--- a/testing/mochitest/browser-test.js
+++ b/testing/mochitest/browser-test.js
@@ -442,10 +442,10 @@ Tester.prototype = {
@@ -15,16 +15,16 @@ index a687d271a91207f3e4a7b9afdf67031f8d9385d1..ebbf2e0cbf5e9eeca472c4c2a5963c29
let lastTab = gBrowser.tabs[gBrowser.tabs.length - 1];
if (!lastTab.closing) {
// Report the stale tab as an error only when they're not closing.
@@ -480,12 +480,6 @@ Tester.prototype = {
// Replace the last tab with a fresh one
if (window.gBrowser) {
- gBrowser.addTab("about:blank", {
- skipAnimation: true,
- triggeringPrincipal:
- Services.scriptSecurityManager.getSystemPrincipal(),
- });
- gBrowser.removeTab(gBrowser.selectedTab, { skipPermitUnload: true });
gBrowser.stop();
}
@@ -1151,12 +1151,6 @@ Tester.prototype = {
// test_end is logged, otherwise the new windows created by addTab will be
// tracked by ShutdownLeaks as belonging to the test and cause false leak reports.
if (window.gBrowser) {
- gBrowser.addTab("about:blank", {
- skipAnimation: true,
- triggeringPrincipal:
- Services.scriptSecurityManager.getSystemPrincipal(),
- });
- gBrowser.removeTab(gBrowser.selectedTab, { skipPermitUnload: true });
gBrowser.stop();
}

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs
index 36652b2d70fd5131d56710a27e7cba350d032da8..13ebbf99b5517b635272d02db740bd3aee1b9ce4 100644
index c768bf13f6736062fcbf0972cdb750c8d8f6e93b..9d5d9debe73457ff25ffa4efda1f420968743c52 100644
--- a/toolkit/actors/PictureInPictureChild.sys.mjs
+++ b/toolkit/actors/PictureInPictureChild.sys.mjs
@@ -296,6 +296,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {
@@ -295,6 +295,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {
if (
video &&
PictureInPictureChild.videoIsPlaying(video) &&

View File

@@ -0,0 +1,28 @@
diff --git a/toolkit/components/asyncshutdown/AsyncShutdown.sys.mjs b/toolkit/components/asyncshutdown/AsyncShutdown.sys.mjs
index 2aaef80411b2cef9563c49f23d36b08222b06b03..7bd15ebb0d9d09da57a287b47beb1f0e2e17d229 100644
--- a/toolkit/components/asyncshutdown/AsyncShutdown.sys.mjs
+++ b/toolkit/components/asyncshutdown/AsyncShutdown.sys.mjs
@@ -492,6 +492,23 @@ function getPhase(topic) {
}
return undefined;
},
+
+ /**
+ * Reset the phase after a call to _trigger().
+ * For testing purposes only.
+ */
+ get _reset() {
+ let accepted = Services.prefs.getBoolPref(
+ "toolkit.asyncshutdown.testing",
+ false
+ );
+ if (accepted) {
+ return () => {
+ spinner = new Spinner(topic);
+ };
+ }
+ return undefined;
+ },
});
gPhases.set(topic, phase);
return phase;

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/components/downloads/DownloadList.sys.mjs b/toolkit/components/downloads/DownloadList.sys.mjs
index ef84be4cfd8194a99e2b2019360b780c700d8d42..3979c03670902ea3ae8bd344612612b20bec6176 100644
index 8e6d1987c359c9388ae73aeeb57ec6c94be033e5..0162a3f3033e97be95d1230852d38c9fe0c524a1 100644
--- a/toolkit/components/downloads/DownloadList.sys.mjs
+++ b/toolkit/components/downloads/DownloadList.sys.mjs
@@ -50,6 +50,7 @@ const FILE_EXTENSIONS = [

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/components/extensions/parent/ext-downloads.js b/toolkit/components/extensions/parent/ext-downloads.js
index 4665c05116908133382be99ebeefd3546205750d..ba7cee3800e72f0fbd9b735c064cb6e61b4b4d28 100644
index b58256216d5f79ee87bbbd79142c080e211f94fa..7ed34100a34223b78660f1cad18afd72e90380b2 100644
--- a/toolkit/components/extensions/parent/ext-downloads.js
+++ b/toolkit/components/extensions/parent/ext-downloads.js
@@ -87,6 +87,7 @@ const FILTER_IMAGES_EXTENSIONS = [

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/components/extensions/parent/ext-tabs-base.js b/toolkit/components/extensions/parent/ext-tabs-base.js
index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b973983072 100644
index 1db6abb2b8dc4051ad5ed452b6f42e1511a4a39c..91c9f1b358ca84278bee933d75111673d3a4721d 100644
--- a/toolkit/components/extensions/parent/ext-tabs-base.js
+++ b/toolkit/components/extensions/parent/ext-tabs-base.js
@@ -1942,6 +1942,7 @@ class TabManagerBase {
@@ -1951,6 +1951,7 @@ class TabManagerBase {
*/
addActiveTabPermission(nativeTab) {
let tab = this.getWrapper(nativeTab);
@@ -10,7 +10,7 @@ index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b9
if (
this.extension.hasPermission("activeTab") ||
(this.extension.originControls &&
@@ -1963,7 +1964,9 @@ class TabManagerBase {
@@ -1972,7 +1973,9 @@ class TabManagerBase {
* The native tab for which to revoke permissions.
*/
revokeActiveTabPermission(nativeTab) {
@@ -21,7 +21,7 @@ index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b9
}
/**
@@ -1976,7 +1979,9 @@ class TabManagerBase {
@@ -1985,7 +1988,9 @@ class TabManagerBase {
* True if the extension has activeTab permissions for this tab.
*/
hasActiveTabPermission(nativeTab) {
@@ -32,7 +32,7 @@ index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b9
}
/**
@@ -1987,6 +1992,7 @@ class TabManagerBase {
@@ -1996,6 +2001,7 @@ class TabManagerBase {
*/
activateScripts(nativeTab) {
let tab = this.getWrapper(nativeTab);
@@ -40,7 +40,7 @@ index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b9
if (
this.extension.originControls &&
!tab.matchesHostPermission &&
@@ -2019,7 +2025,9 @@ class TabManagerBase {
@@ -2028,7 +2034,9 @@ class TabManagerBase {
* True if the extension has permissions for this tab.
*/
hasTabPermission(nativeTab) {
@@ -51,7 +51,7 @@ index d3c2d62406d17a14b0288752c34b6dd4350f032a..2f970d41b8ada9a13fc18b8d2a6607b9
}
/**
@@ -2066,7 +2074,9 @@ class TabManagerBase {
@@ -2075,7 +2083,9 @@ class TabManagerBase {
* @returns {object}
*/
convert(nativeTab, fallbackTabSize = null) {

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/browser-custom-element.mjs b/toolkit/content/widgets/browser-custom-element.mjs
index bd950fab1b2382738297dff429ad9e6cc68e1ddb..dfda3b7cffec5c3ff35079761283c9baa43951ce 100644
index 44f3d5f5875fbd83f54a0a06d4881ded95e396e5..43f107b2a8231f4a0994afd724ff66a5e1e1a0e8 100644
--- a/toolkit/content/widgets/browser-custom-element.mjs
+++ b/toolkit/content/widgets/browser-custom-element.mjs
@@ -495,11 +495,11 @@ export class MozBrowser extends MozElements.MozElementMixin(XULFrameElement) {

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js
index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7cbafb10b2 100644
index 344984211e70c67bcc65fbbee54495f381da2b9f..1346ab8b820ae60b13511f6e35b713060b2453d7 100644
--- a/toolkit/content/widgets/tabbox.js
+++ b/toolkit/content/widgets/tabbox.js
@@ -11,6 +11,23 @@
@@ -35,7 +35,7 @@ index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7c
this._selectedPanel?.classList.add("deck-selected");
}
this.setAttribute("selectedIndex", val);
@@ -718,7 +735,7 @@
@@ -736,7 +753,7 @@
if (!tab) {
return;
}
@@ -44,7 +44,7 @@ index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7c
if (otherTab != tab && otherTab.selected) {
otherTab._selected = false;
}
@@ -754,6 +771,7 @@
@@ -772,6 +789,7 @@
* @param {MozTab|null} [val]
*/
set selectedItem(val) {
@@ -52,7 +52,7 @@ index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7c
if (val && !val.selected) {
// The selectedIndex setter ignores invalid values
// such as -1 if |val| isn't one of our child nodes.
@@ -931,7 +949,7 @@
@@ -949,7 +967,7 @@
if (tab == startTab) {
return null;
}
@@ -61,7 +61,7 @@ index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7c
return tab;
}
}
@@ -993,13 +1011,30 @@
@@ -1011,13 +1029,30 @@
* @param {boolean} [aWrap]
*/
advanceSelectedTab(aDir, aWrap) {
@@ -93,7 +93,7 @@ index 7f6e075c818a6aefdcbdfb8ab04df8daa07499d5..9e2d05a9ce02630b8305d5642b6c0d7c
// Handle keyboard navigation for a hidden tab that can be selected, like the Firefox View tab,
// which has a random placement in this.allTabs.
if (startTab.hidden) {
@@ -1012,7 +1047,7 @@
@@ -1030,7 +1065,7 @@
newTab = this.findNextTab(startTab, {
direction: aDir,
wrap: aWrap,

View File

@@ -1,10 +1,10 @@
diff --git a/toolkit/content/xul.css b/toolkit/content/xul.css
index 57dd6042d2620dd64c55e0e966913047a6c3502f..40d016a0a13596439046e2bbcfa59daa30f10b2d 100644
index d881606aa72ba8c703ff83f23c265189ccc648a0..637a384dbe9367f9914ee593afbbc4e5594c81c5 100644
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -463,7 +463,8 @@ deck > *|*:not(:-moz-native-anonymous) {
tabpanels > .deck-selected,
tabpanels > .split-view-panel,
tabpanels > .split-view-panel-active,
tabpanels > .split-view-splitter,
-deck > .deck-selected {
+deck > .deck-selected,

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/modules/LightweightThemeConsumer.sys.mjs b/toolkit/modules/LightweightThemeConsumer.sys.mjs
index c12ba1cd3891dab6ccf07e0ee069d44cc11f3c8f..d7e35aa2dc93629f74e62d6437e3a064242e8974 100644
index c62ad0b054296d0302aaeb60d78a30eba257647e..68f5ff2761ab4ded10cd98fb12e5668ece511e14 100644
--- a/toolkit/modules/LightweightThemeConsumer.sys.mjs
+++ b/toolkit/modules/LightweightThemeConsumer.sys.mjs
@@ -32,7 +32,7 @@ const toolkitVariableMap = [
@@ -34,7 +34,7 @@ const toolkitVariableMap = [
lwtProperty: "accentcolor",
processColor(rgbaChannels) {
if (!rgbaChannels || rgbaChannels.a == 0) {
@@ -11,7 +11,7 @@ index c12ba1cd3891dab6ccf07e0ee069d44cc11f3c8f..d7e35aa2dc93629f74e62d6437e3a064
}
// Remove the alpha channel
const { r, g, b } = rgbaChannels;
@@ -320,7 +320,7 @@ LightweightThemeConsumer.prototype = {
@@ -347,7 +347,7 @@ LightweightThemeConsumer.prototype = {
let forcedColorsThemeOverride =
this.FORCED_COLORS_OVERRIDE_ENABLED &&
this.forcedColorsMediaQuery?.matches;

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/modules/UpdateUtils.sys.mjs b/toolkit/modules/UpdateUtils.sys.mjs
index 2c8a093013d40623aa16864eca18945887add7c8..592f8a77665f8e8b4c2f64fe6ae44f3f1f3935e1 100644
index 11ef622a5be94b729670da5a00d6799d3493d20d..3ff35b9614bdb2ed361af58e0db03d8e0cbdadbb 100644
--- a/toolkit/modules/UpdateUtils.sys.mjs
+++ b/toolkit/modules/UpdateUtils.sys.mjs
@@ -81,7 +81,7 @@ export var UpdateUtils = {

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
index 114a8c3e2e36e57cb2334a893a11f1619831a6e7..9c9ae37b6462d00c93d8f3319cea2960b3cd9816 100644
index fec07181bc5ee7c9086d0d273d9355f3ce76a969..2deab6b10c67898e7383b194b0f949ba970b639e 100644
--- a/toolkit/modules/moz.build
+++ b/toolkit/modules/moz.build
@@ -281,6 +281,7 @@ for var in (
@@ -286,6 +286,7 @@ for var in (
"DLL_SUFFIX",
"DEBUG_JS_MODULES",
"OMNIJAR_NAME",

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs
index 4fe6aaa127d12bfebb9b246cf1bcaeb78aeef506..879831ff1f979f38c677b941fae447f876999d35 100644
index ed5f2525b1c7e8c31107e63adbefe2b1d3db82b0..ce79802f2f8f801b66806ee53c9203bf14fad441 100644
--- a/toolkit/mozapps/extensions/AddonManager.sys.mjs
+++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs
@@ -1278,12 +1278,12 @@ var AddonManagerInternal = {
@@ -1271,12 +1271,12 @@ var AddonManagerInternal = {
ITEM_VERSION: aAddon.version,
ITEM_STATUS: addonStatus,
APP_ID: Services.appinfo.ID,

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp
index c9f742dc4588a21db5011b3386999a5832defd33..4a4a6fc28822200c3e254d682d303b38d10d9c67 100644
index 474f55e5662da51a3783fbaef4d9c76422210513..90afd653f6989334bc9a0fa3789338ebc07cb762 100644
--- a/toolkit/profile/nsToolkitProfileService.cpp
+++ b/toolkit/profile/nsToolkitProfileService.cpp
@@ -83,6 +83,8 @@ using namespace mozilla;
@@ -11,7 +11,7 @@ index c9f742dc4588a21db5011b3386999a5832defd33..4a4a6fc28822200c3e254d682d303b38
struct KeyValue {
KeyValue(const char* aKey, const char* aValue) : key(aKey), value(aValue) {}
@@ -1369,7 +1371,7 @@ nsresult nsToolkitProfileService::CreateDefaultProfile(
@@ -1370,7 +1372,7 @@ nsresult nsToolkitProfileService::CreateDefaultProfile(
if (mUseDevEditionProfile) {
name.AssignLiteral(DEV_EDITION_NAME);
} else if (mUseDedicatedProfile) {

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/design-system/dist/tokens-shared.css b/toolkit/themes/shared/design-system/dist/tokens-shared.css
index 8ab12bd5ede2ab7aded356cd9dd94b0fecf34520..bddee8387dcf217109b227539b92cbe87014fd02 100644
index b941f3dcfb24afa182800521d92795e69505e82c..cac0d1f72bb29b93313d21075846dd2afa315432 100644
--- a/toolkit/themes/shared/design-system/dist/tokens-shared.css
+++ b/toolkit/themes/shared/design-system/dist/tokens-shared.css
@@ -5,6 +5,8 @@

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/themes/shared/in-content/common-shared.css b/toolkit/themes/shared/in-content/common-shared.css
index c1acf2d6ab3c9a260e73d43af027f34a807e01dc..223afae5c36c98d3b09c001f91e07e90b0b0887a 100644
index 6d2bfbfed592d91b383cd2e307b635393932329f..25ddc2660f4c43129d783769b9eee4e208512c3a 100644
--- a/toolkit/themes/shared/in-content/common-shared.css
+++ b/toolkit/themes/shared/in-content/common-shared.css
@@ -63,7 +63,7 @@
@@ -58,7 +58,7 @@
* this in forced colors mode, as we should be using system colours then.
*/
:root[dialogroot] {
@@ -11,7 +11,7 @@ index c1acf2d6ab3c9a260e73d43af027f34a807e01dc..223afae5c36c98d3b09c001f91e07e90
}
}
@@ -177,7 +177,7 @@ xul|menulist {
@@ -169,7 +169,7 @@ xul|menulist {
border-radius: var(--button-border-radius);
background-color: var(--button-background-color);
font-weight: normal;
@@ -20,7 +20,7 @@ index c1acf2d6ab3c9a260e73d43af027f34a807e01dc..223afae5c36c98d3b09c001f91e07e90
text-decoration: none;
margin: 4px 8px;
/* Ensure font-size isn't overridden by widget styling (e.g. in forms.css) */
@@ -696,7 +696,7 @@ html|*#categories[last-input-type="mouse"] > html|button.category:focus-visible
@@ -688,7 +688,7 @@ html|*#categories[last-input-type="mouse"] > html|button.category:focus-visible
fill-opacity: 1;
}
@@ -29,7 +29,7 @@ index c1acf2d6ab3c9a260e73d43af027f34a807e01dc..223afae5c36c98d3b09c001f91e07e90
:root {
--in-content-sidebar-width: 118px;
}
@@ -1078,7 +1078,7 @@ xul|*.sidebar-footer-link {
@@ -1070,7 +1070,7 @@ xul|*.sidebar-footer-link {
user-select: none;
}

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/themes/shared/tree/tree.css b/toolkit/themes/shared/tree/tree.css
index ee8c5fc6399092cbb45657bb3ee49178f797349e..f30ff2db77854fb4acca6279369e313da0a6a4e2 100644
index cb973533858e82a7c57097343b9a21083eba4b1c..35331dde1d6ee56932c0142a489151d1a4dc4635 100644
--- a/toolkit/themes/shared/tree/tree.css
+++ b/toolkit/themes/shared/tree/tree.css
@@ -12,6 +12,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
index 5eae0bca990fea9e995bd2edf5e879361f89391c..3f8bfedb83ddae07b1e82715fc7f6b2109a39e33 100644
index f60d1ab57e2fdf522744381ca43b953c3270122d..0c7ac9541821f169e4fb5bbf43cdc932390860a3 100644
--- a/toolkit/xre/nsXREDirProvider.cpp
+++ b/toolkit/xre/nsXREDirProvider.cpp
@@ -1322,9 +1322,11 @@ nsresult nsXREDirProvider::AppendFromAppData(nsIFile* aFile, bool aIsDotted) {

View File

@@ -1,5 +1,5 @@
diff --git a/tools/signing/macos/mach_commands.py b/tools/signing/macos/mach_commands.py
index 3bd0fa80c18b903e9828d2f61be3cfb71e2132e0..4d0fdd64d19cb429c19701ea008e02dc16489834 100644
index 4227363da7f07b02b9a37ef7e6e4bdae5b159554..af9f6baebda3ab4895af8e5933176691e375efb5 100644
--- a/tools/signing/macos/mach_commands.py
+++ b/tools/signing/macos/mach_commands.py
@@ -37,7 +37,6 @@ from mozbuild.base import MachCommandConditions as conditions
@@ -10,7 +10,7 @@ index 3bd0fa80c18b903e9828d2f61be3cfb71e2132e0..4d0fdd64d19cb429c19701ea008e02dc
)
@CommandArgument(
"-v",
@@ -342,6 +341,10 @@ def macos_sign(
@@ -343,6 +342,10 @@ def macos_sign(
cs_reset_cmd = ["find", app, "-exec", "codesign", "--remove-signature", "{}", ";"]
run(command_context, cs_reset_cmd, capture_output=not verbose_arg)
@@ -21,7 +21,7 @@ index 3bd0fa80c18b903e9828d2f61be3cfb71e2132e0..4d0fdd64d19cb429c19701ea008e02dc
if use_rcodesign_arg is True:
sign_with_rcodesign(
command_context,
@@ -613,7 +616,7 @@ def sign_with_rcodesign(
@@ -614,7 +617,7 @@ def sign_with_rcodesign(
# input path and its options are specified as standard arguments.
ctx.log(logging.INFO, "macos-sign", {}, "Signing with rcodesign")

View File

@@ -1,5 +1,5 @@
diff --git a/widget/cocoa/nsDragService.mm b/widget/cocoa/nsDragService.mm
index f1614b823a859ff8fbc74982f205bb1f2ef29beb..897c24846a97c132babe3ad79da12ebfcec90484 100644
index fb01c7e5ec5ce0f10a3f5c4c842d8a272665190d..b59cc2f5fd07c24b741cce63515c3fd0288152b4 100644
--- a/widget/cocoa/nsDragService.mm
+++ b/widget/cocoa/nsDragService.mm
@@ -23,6 +23,7 @@
@@ -10,7 +10,7 @@ index f1614b823a859ff8fbc74982f205bb1f2ef29beb..897c24846a97c132babe3ad79da12ebf
#include "nsIContent.h"
#include "nsCocoaUtils.h"
#include "mozilla/gfx/2D.h"
@@ -148,6 +149,10 @@
@@ -144,6 +145,10 @@
bitsPerPixel:32];
uint8_t* dest = [imageRep bitmapData];
@@ -21,7 +21,7 @@ index f1614b823a859ff8fbc74982f205bb1f2ef29beb..897c24846a97c132babe3ad79da12ebf
for (uint32_t i = 0; i < height; ++i) {
uint8_t* src = map.mData + i * map.mStride;
for (uint32_t j = 0; j < width; ++j) {
@@ -155,15 +160,15 @@
@@ -151,15 +156,15 @@
// is premultipled here. Also, Quartz likes RGBA, so do that translation
// as well.
#ifdef IS_BIG_ENDIAN

View File

@@ -1,8 +1,8 @@
diff --git a/xpfe/appshell/AppWindow.cpp b/xpfe/appshell/AppWindow.cpp
index 43b1546c4f4e4a2cba57c69ffb414c0b26c21ddd..0989f74f2f2e219162298d6ad7ea5c68ca9491a1 100644
index 001e5db59cf4c6f6f156fcddc080c72725d9e883..d9e5ba63ab799b9a2c92eed0ecf8e5c3aaa4bb57 100644
--- a/xpfe/appshell/AppWindow.cpp
+++ b/xpfe/appshell/AppWindow.cpp
@@ -1879,7 +1879,7 @@ nsresult AppWindow::MaybeSaveEarlyWindowPersistentValues(
@@ -1849,7 +1849,7 @@ nsresult AppWindow::MaybeSaveEarlyWindowPersistentValues(
}
}

View File

@@ -1308,11 +1308,6 @@ window.gZenKeyboardShortcutsManager = {
const keyset = this.getZenKeyset(browser);
keyset.innerHTML = "";
// We dont check this anymore since we are skiping internal keys
//if (mainKeyset.children.length > 0) {
// throw new Error('Child list not empty');
//}
for (let key of this._currentShortcutList) {
if (key.isInternal()) {
continue;

View File

@@ -620,15 +620,9 @@ class nsZenWindowSync {
this.log(`Cannot swap browsers, other tab ${aOtherTab.id} is closing`);
return;
}
let promise = this.#maybeFlushTabState(aOtherTab);
await this.#styleSwapedBrowsers(
aOurTab,
aOtherTab,
() => {
this.#swapBrowserDocShellsInner(aOurTab, aOtherTab);
},
promise
);
await this.#styleSwapedBrowsers(aOurTab, aOtherTab, () => {
this.#swapBrowserDocShellsInner(aOurTab, aOtherTab);
});
}
/**
@@ -708,28 +702,23 @@ class nsZenWindowSync {
);
return null;
}
// See https://github.com/zen-browser/desktop/issues/11851, swapping the browsers
// don't seem to update the state's cache properly, leading to issues when restoring
// the session later on.
let tabStateEntries = this.#getTabEntriesFromCache(aOtherTab);
const setStateToTab = () => {
if (!tabStateEntries?.entries.length) {
this.log(`Error: No tab state entries found for tab ${aOurTab.id} during swap`);
return;
}
lazy.TabStateCache.update(aOurTab.linkedBrowser.permanentKey, {
history: Cu.cloneInto(tabStateEntries, {}),
});
};
// Running `swapBrowsersAndCloseOther` doesn't expect us to use the tab after
// the operation, so it doesn't really care about cleaning up the other tab.
// We need to make a new tab progress listener for the other tab after the swap.
this.#withRestoreTabProgressListener(
aOtherTab,
() => {
setStateToTab();
this.log(`Swapping docshells between windows for tab ${aOurTab.id}`);
aOurTab.ownerGlobal.gBrowser.swapBrowsersAndCloseOther(aOurTab, aOtherTab, false);
// Swap permanent keys
const ourPermanentKey = aOurTab.linkedBrowser.permanentKey;
const otherPermanentKey = aOtherTab.linkedBrowser.permanentKey;
aOurTab.linkedBrowser.permanentKey = otherPermanentKey;
aOtherTab.linkedBrowser.permanentKey = ourPermanentKey;
aOurTab.permanentKey = otherPermanentKey;
aOtherTab.permanentKey = ourPermanentKey;
// Since we are moving progress listeners around, there's a chance that we
// trigger a load while making the switch, and since we remove the previous
// tab's listeners, the other browser window will never get the 'finish load' event
@@ -745,11 +734,7 @@ class nsZenWindowSync {
// We do need to do this though instead of just unloading the browser because
// firefox doesn't expect an unloaded + selected tab, so we need to get
// around this limitation somehow.
if (
!onClose &&
(aOtherTab.linkedBrowser?.currentURI.spec !== "about:blank" ||
aOtherTab.hasAttribute("busy"))
) {
if (!onClose) {
this.log(`Loading about:blank in our tab ${aOtherTab.id} before swap`);
aOtherTab.linkedBrowser.loadURI(Services.io.newURI("about:blank"), {
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
@@ -772,14 +757,6 @@ class nsZenWindowSync {
aOurTab.ownerGlobal.gBrowser._adjustFocusAfterTabSwitch(aOurTab);
aOurTab.linkedBrowser.docShellIsActive = true;
}
// Ensure the tab's state is flushed after the swap. By doing this,
// we can re-schedule another session store delayed process to fire.
// It's also important to note that if we don't flush the state here,
// we would start receiving invalid history changes from the the incorrect
// browser view that was just swapped out.
return this.#maybeFlushTabState(aOurTab).finally(() => {
setStateToTab();
});
}
/**
@@ -788,9 +765,8 @@ class nsZenWindowSync {
* @param {object} aOurTab - The tab in the current window.
* @param {object} aOtherTab - The tab in the other window.
* @param {Function|undefined} callback - The callback function to execute after styling.
* @param {Promise|null} promiseToWait - A promise to wait for before executing the callback.
*/
#styleSwapedBrowsers(aOurTab, aOtherTab, callback = undefined, promiseToWait = null) {
#styleSwapedBrowsers(aOurTab, aOtherTab, callback = undefined) {
const ourBrowser = aOurTab.linkedBrowser;
const otherBrowser = aOtherTab.linkedBrowser;
// eslint-disable-next-line no-async-promise-executor
@@ -817,8 +793,7 @@ class nsZenWindowSync {
};
});
let promise = this.#createPseudoImageForBrowser(otherBrowser, mySrc);
await Promise.all([promiseToWait, promise]);
await this.#createPseudoImageForBrowser(otherBrowser, mySrc);
callback();
lazy.setTimeout(() => {
otherBrowser.setAttribute("zen-pseudo-hidden", "true");
@@ -1006,7 +981,7 @@ class nsZenWindowSync {
* @returns {Promise} A promise that resolves when the operation is complete.
*/
#maybeFlushTabState(aTab) {
if (!aTab.linkedBrowser) {
if (!aTab.linkedBrowser || aTab.hasAttribute("pending")) {
return Promise.resolve();
}
return lazy.TabStateFlusher.flush(aTab.linkedBrowser);

View File

@@ -36,11 +36,23 @@ add_task(async function testNormalBrowsing() {
PREF_WHITELISTED_HOSTNAMES,
"example.com,www.ItIsaTrap.org,example.net"
);
await promiseTabLoadEvent(tab, TEST_PAGE, "load");
await BrowserTestUtils.loadURIString({
browser: tab.linkedBrowser,
uriString: TEST_PAGE,
});
testWhitelistedPage(tab.ownerGlobal);
info("Load a test page that's no longer whitelisted");
Services.prefs.setCharPref(PREF_WHITELISTED_HOSTNAMES, "");
await promiseTabLoadEvent(tab, TEST_PAGE, "AboutBlockedLoaded");
// Wait for AboutBlockedLoaded event
let blockedLoaded = BrowserTestUtils.waitForContentEvent(
tab.linkedBrowser,
"AboutBlockedLoaded",
true,
undefined,
true
);
BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, TEST_PAGE);
await blockedLoaded;
testBlockedPage(tab.ownerGlobal);
});

View File

@@ -2,54 +2,6 @@
const PHISH_TABLE = "moztest-phish-simple";
const PHISH_URL = "https://www.itisatrap.org/firefox/its-a-trap.html";
/**
* Waits for a load (or custom) event to finish in a given tab. If provided
* load an uri into the tab.
*
* @param tab
* The tab to load into.
* @param [optional] url
* The url to load, or the current url.
* @param [optional] event
* The load event type to wait for. Defaults to "load".
* @return {Promise} resolved when the event is handled.
* @resolves to the received event
* @rejects if a valid load event is not received within a meaningful interval
*/
function promiseTabLoadEvent(tab, url, eventType = "load") {
info(`Wait tab event: ${eventType}`);
function handle(loadedUrl) {
if (loadedUrl === "about:blank" || (url && loadedUrl !== url)) {
info(`Skipping spurious load event for ${loadedUrl}`);
return false;
}
info("Tab event received: load");
return true;
}
let loaded;
if (eventType === "load") {
loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser, false, handle);
} else {
// No need to use handle.
loaded = BrowserTestUtils.waitForContentEvent(
tab.linkedBrowser,
eventType,
true,
undefined,
true
);
}
if (url) {
BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, url);
}
return loaded;
}
// This function is mostly ported from classifierCommon.js
// under toolkit/components/url-classifier/tests/mochitest.
function waitForDBInit(callback) {

View File

@@ -682,6 +682,13 @@ async function testFileAccessWindowsOnly() {
let tests = [];
let extDir = GetPerUserExtensionDir();
// We used to unconditionally create this directory from Firefox, but that
// was dropped in bug 2001887. The value of this directory is questionable;
// the test was added in Firefox 56 (bug 1403744) to cover legacy add-ons,
// but legacy add-on support was discontinued in Firefox 57, and we stopped
// sideloading add-ons from this directory on all builds except ESR in
// Firefox 74 (bug 1602840).
await IOUtils.makeDirectory(extDir.path);
tests.push({
desc: "per-user extensions dir",
ok: true,

View File

@@ -22,6 +22,13 @@ add_setup(async function setup() {
const xdgConfigHome = Services.env.get("XDG_CONFIG_HOME");
Assert.greater(xdgConfigHome.length, 1, "XDG_CONFIG_HOME is defined");
// Verify the profile directory is inside XDG_CONFIG_HOME
const profileDir = Services.dirsvc.get("ProfD", Ci.nsIFile);
Assert.ok(
profileDir.path.startsWith(xdgConfigHome),
`Profile directory (${profileDir.path}) should be inside XDG_CONFIG_HOME (${xdgConfigHome})`
);
// If it is there, do actual testing
sanityChecks();
});

View File

@@ -12,11 +12,14 @@ support-files = [
"browser_content_sandbox_utils.js",
"browser_content_sandbox_fs_tests.js",
]
# .config needs to exists for the sandbox to properly add it
test-directories = ["/tmp/.xdg_default_test", "/tmp/.xdg_default_test/.config"]
test-directories = [
"/tmp/.xdg_default_test",
"/tmp/.xdg_default_test/.config/mozilla/firefox/xdg_default_profile",
]
environment = [
"HOME=/tmp/.xdg_default_test",
]
profile-path = "/tmp/.xdg_default_test/.config/mozilla/firefox/xdg_default_profile"
["browser_content_sandbox_fs_xdg_default.js"]
run-if = ["os == 'linux'"]

View File

@@ -12,12 +12,17 @@ support-files = [
"browser_content_sandbox_utils.js",
"browser_content_sandbox_fs_tests.js",
]
test-directories = ["/tmp/.xdg_mozLegacyHome_test/.config", "/tmp/.xdg_config_home_test"]
test-directories = [
"/tmp/.xdg_mozLegacyHome_test/.config",
"/tmp/.xdg_config_home_test",
"/tmp/.xdg_mozLegacyHome_test/.mozilla/firefox/xdg_mozLegacyHome_profile",
]
environment = [
"XDG_CONFIG_HOME=/tmp/.xdg_config_home_test",
"HOME=/tmp/.xdg_mozLegacyHome_test",
"MOZ_LEGACY_HOME=1",
]
profile-path = "/tmp/.xdg_mozLegacyHome_test/.mozilla/firefox/xdg_mozLegacyHome_profile"
["browser_content_sandbox_fs_xdg_mozLegacyHome.js"]
run-if = ["os == 'linux'"]

View File

@@ -11,11 +11,15 @@ support-files = [
"browser_content_sandbox_utils.js",
"browser_content_sandbox_fs_tests.js",
]
test-directories = "/tmp/.xdg_config_home_test"
test-directories = [
"/tmp/.xdg_config_home_test",
"/tmp/.xdg_config_home_test/mozilla/firefox/xdg_config_home_profile",
]
environment = [
"XDG_CONFIG_HOME=/tmp/.xdg_config_home_test",
"MOZ_LEGACY_HOME=0",
]
profile-path = "/tmp/.xdg_config_home_test/mozilla/firefox/xdg_config_home_profile"
["browser_content_sandbox_fs_xdg_xdgConfigHome.js"]
run-if = [

View File

@@ -34,7 +34,7 @@ export class nsZenSiteDataPanel {
this.window.gUnifiedExtensions._panel = this.unifiedPanel;
// Remove the old permissions dialog
this.document.getElementById("unified-extensions-panel-template").remove();
this.document.getElementById("unified-extensions-panel-template")?.remove();
} else {
this.extensionsPanel = this.#initExtensionsPanel();
}

View File

@@ -34,6 +34,89 @@ XPCOMUtils.defineLazyPreferenceGetter(
true
);
/**
* A convenience function that takes a payload annotated with
* UrlbarUtils.HIGHLIGHT enums and returns the payload and the payload's
* highlights. Use this function when the highlighting required by your
* payload is based on simple substring matching, as done by
* UrlbarUtils.getTokenMatches(). Pass the return values as the `payload` and
* `payloadHighlights` params of the UrlbarResult constructor.
* `payloadHighlights` is optional. If omitted, payload will not be
* highlighted.
*
* If the payload doesn't have a title or has an empty title, and it also has
* a URL, then this function also sets the title to the URL's domain.
*
* @param {Array} tokens The tokens that should be highlighted in each of the
* payload properties.
* @param {object} payloadInfo An object that looks like this:
* { payloadPropertyName: payloadPropertyInfo }
*
* Each payloadPropertyInfo may be either a string or an array. If
* it's a string, then the property value will be that string, and no
* highlighting will be applied to it. If it's an array, then it
* should look like this: [payloadPropertyValue, highlightType].
* payloadPropertyValue may be a string or an array of strings. If
* it's a string, then the payloadHighlights in the return value will
* be an array of match highlights as described in
* UrlbarUtils.getTokenMatches(). If it's an array, then
* payloadHighlights will be an array of arrays of match highlights,
* one element per element in payloadPropertyValue.
* @returns {{ payload: object, payloadHighlights: object }}
*/
function payloadAndSimpleHighlights(tokens, payloadInfo) {
let payload = {};
let highlightTypes = {};
for (let [name, valueOrValues] of Object.entries(payloadInfo)) {
if (Array.isArray(valueOrValues)) {
if (valueOrValues.length) {
payload[name] = valueOrValues[0];
let highlightType = valueOrValues[1];
if (highlightType) {
highlightTypes[name] = highlightType;
}
}
} else if (valueOrValues != undefined) {
payload[name] = valueOrValues;
}
}
if (!payload.title && !payload.fallbackTitle && payload.url && typeof payload.url == "string") {
// If there's no title, show the domain as the title. Not all valid URLs
// have a domain.
highlightTypes.title = UrlbarUtils.HIGHLIGHT.TYPED;
try {
payload.title = new URL(payload.url).URI.displayHostPort;
} catch (e) {}
}
if (payload.url) {
// For display purposes we need to unescape the url.
payload.displayUrl = UrlbarUtils.prepareUrlForDisplay(payload.url);
highlightTypes.displayUrl = highlightTypes.url;
}
// For performance reasons limit excessive string lengths, to reduce the
// amount of string matching we do here, and avoid wasting resources to
// handle long textruns that the user would never see anyway.
for (let prop of ["displayUrl", "title", "suggestion"]) {
let value = payload[prop];
if (typeof value == "string") {
payload[prop] = value.substring(0, UrlbarUtils.MAX_TEXT_LENGTH);
}
}
let payloadHighlights = {};
if (tokens) {
for (let [name, highlightType] of Object.entries(highlightTypes)) {
let value = payload[name];
let highlights = Array.isArray(value)
? value.map((subval) => UrlbarUtils.getTokenMatches(tokens, subval, highlightType))
: UrlbarUtils.getTokenMatches(tokens, value || "", highlightType);
if (highlights.length) {
payloadHighlights[name] = highlights;
}
}
}
return { payload, payloadHighlights };
}
/**
* A provider that lets the user view all available global actions for a query.
*/
@@ -252,7 +335,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
const ownerGlobal = lazy.BrowserWindowTracker.getTopWindow();
let finalResults = [];
for (const action of actionsResults) {
const { payload, payloadHighlights } = lazy.UrlbarResult.payloadAndSimpleHighlights([], {
const { payload, payloadHighlights } = payloadAndSimpleHighlights([], {
suggestion: action.label,
title: action.label,
zenCommand: action.command,
@@ -273,7 +356,7 @@ export class ZenUrlbarProviderGlobalActions extends UrlbarProvider {
type: UrlbarUtils.RESULT_TYPE.DYNAMIC,
source: UrlbarUtils.RESULT_SOURCE.ZEN_ACTIONS,
payload,
payloadHighlights,
highlights: payloadHighlights,
heuristic: shouldBePrioritized,
suggestedIndex: !shouldBePrioritized
? zenUrlbarResultsLearner.getDeprioritizeIndex(action.commandId)

View File

@@ -45,6 +45,8 @@
& .zen-workspace-icon {
pointer-events: none;
line-height: 0;
position: absolute;
font-size: 14px;
&:is(img) {
width: 14px;

Some files were not shown because too many files have changed in this diff Show More