mirror of
https://github.com/zen-browser/desktop
synced 2026-04-25 17:15:00 +02:00
no-bug: Update to Firefox 150.0 (gh-13281)
This commit is contained in:
@@ -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 `149.0.2`! 🚀
|
||||
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 149.0.2`!
|
||||
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 150.0`!
|
||||
|
||||
### Contributing
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
fc45ac45a16dd9312a3e678fdaef33aaa7e0e641
|
||||
11d1ba8e182db855a1aba82796e219c2abe8c3ac
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
# GTK-specific preferences
|
||||
- name: widget.gtk.rounded-bottom-corners.enabled
|
||||
# Disabled for https://github.com/zen-browser/desktop/issues/6302,
|
||||
# also see https://bugzilla.mozilla.org/show_bug.cgi?id=1979083
|
||||
value: false
|
||||
# See https://bugzilla.mozilla.org/show_bug.cgi?id=1979083
|
||||
# and https://bugzilla.mozilla.org/show_bug.cgi?id=1994267
|
||||
value: true
|
||||
condition: "defined(MOZ_WIDGET_GTK)"
|
||||
|
||||
- name: zen.widget.linux.transparency
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/.prettierignore b/.prettierignore
|
||||
index 3e562d74d744bb703c9ebb8ea2df496feb40f48a..3285ee51c32029ce80e8b22616389bc776345da4 100644
|
||||
index 4c6d186c501f7e1b029db186d387f73d97dfed1e..81d0f7dc7f412151256c13ed93bd34d7bd872681 100644
|
||||
--- a/.prettierignore
|
||||
+++ b/.prettierignore
|
||||
@@ -1804,3 +1804,12 @@ tools/ts/test/baselines/
|
||||
@@ -1806,3 +1806,12 @@ tools/ts/test/baselines/
|
||||
try_task_config.json
|
||||
xpcom/idl-parser/xpidl/fixtures/xpctest.d.json
|
||||
**/package-lock.json
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-addons.js b/browser/base/content/browser-addons.js
|
||||
index 737ccf0feff4910426f7f75a20ac20ec480461dc..177ab12f9478e1ce664b7b2c66b0e2c8bca63573 100644
|
||||
index 098cf2408bc462f61fb547716754a3af832ffa1e..d062d03f7d258b66740d785cc30abe7932eaea41 100644
|
||||
--- a/browser/base/content/browser-addons.js
|
||||
+++ b/browser/base/content/browser-addons.js
|
||||
@@ -1061,7 +1061,7 @@ var gXPInstallObserver = {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
|
||||
index 2faed30e09511c381051bc40910a883d1d7bc10d..959fa83f647a8919641c5b852a4cb8814fca9ab5 100644
|
||||
index d58fcdf99843d110b708f3fbf9fb317787fadfcf..ba37068c52b24c6ebcb835c59b43ca2f1621a001 100644
|
||||
--- a/browser/base/content/browser-box.inc.xhtml
|
||||
+++ b/browser/base/content/browser-box.inc.xhtml
|
||||
@@ -3,6 +3,9 @@
|
||||
@@ -25,7 +25,7 @@ index 2faed30e09511c381051bc40910a883d1d7bc10d..959fa83f647a8919641c5b852a4cb881
|
||||
+#include zen-tabbrowser-elements.inc.xhtml
|
||||
<tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/>
|
||||
</tabbox>
|
||||
<splitter id="ai-window-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="none" resizeafter="sibling" hidden="true"/>
|
||||
<splitter id="ai-window-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="none" resizeafter="sibling" collapsed="true"/>
|
||||
@@ -34,3 +43,5 @@
|
||||
</stack>
|
||||
</vbox>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-commands.js b/browser/base/content/browser-commands.js
|
||||
index 75ddd82c18979571f377dec94fe1883f1349cc16..129d78214db53fc8dbd17d23b4a5a042ec297a41 100644
|
||||
index e7f88f69fcc22efca4c7fc0363b9fe2729e1be6f..d7c4063d38576a34545b9af06c37937dc9090628 100644
|
||||
--- a/browser/base/content/browser-commands.js
|
||||
+++ b/browser/base/content/browser-commands.js
|
||||
@@ -14,6 +14,10 @@ var BrowserCommands = {
|
||||
@@ -13,7 +13,7 @@ index 75ddd82c18979571f377dec94fe1883f1349cc16..129d78214db53fc8dbd17d23b4a5a042
|
||||
try {
|
||||
gBrowser.goBack();
|
||||
} catch (ex) {}
|
||||
@@ -315,6 +319,10 @@ var BrowserCommands = {
|
||||
@@ -229,6 +233,10 @@ var BrowserCommands = {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ index 75ddd82c18979571f377dec94fe1883f1349cc16..129d78214db53fc8dbd17d23b4a5a042
|
||||
// A notification intended to be useful for modular peformance tracking
|
||||
// starting as close as is reasonably possible to the time when the user
|
||||
// expressed the intent to open a new tab. Since there are a lot of
|
||||
@@ -399,6 +407,14 @@ var BrowserCommands = {
|
||||
@@ -313,6 +321,14 @@ var BrowserCommands = {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ index 75ddd82c18979571f377dec94fe1883f1349cc16..129d78214db53fc8dbd17d23b4a5a042
|
||||
// Keyboard shortcuts that would close a tab that is pinned select the first
|
||||
// unpinned tab instead.
|
||||
if (
|
||||
@@ -406,8 +422,8 @@ var BrowserCommands = {
|
||||
@@ -320,8 +336,8 @@ var BrowserCommands = {
|
||||
(event.ctrlKey || event.metaKey || event.altKey) &&
|
||||
gBrowser.selectedTab.pinned
|
||||
) {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
diff --git a/browser/base/content/browser-fullScreenAndPointerLock.js b/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
index 38b4267c737ba247068e1001c12f1cb93cd248f7..f0d7002246645de48dd3ed24a84122d0bcc95b5a 100644
|
||||
index cd46701e9f4b672f392533c9ecc1c8570c3b2c5a..beb992702ea90e0b81f7bda4a6c0522932e84dfe 100644
|
||||
--- a/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
+++ b/browser/base/content/browser-fullScreenAndPointerLock.js
|
||||
@@ -461,8 +461,6 @@ var FullScreen = {
|
||||
gNavToolbox.classList.toggle("fullscreen-with-menubar", shiftSize > 0);
|
||||
|
||||
let transform = shiftSize > 0 ? `translateY(${shiftSize}px)` : "";
|
||||
- gNavToolbox.style.transform = transform;
|
||||
- gURLBar.style.transform = gURLBar.hasAttribute("breakout") ? transform : "";
|
||||
@@ -464,8 +464,6 @@ var FullScreen = {
|
||||
// don't need that kind of precision in our CSS.
|
||||
shiftSize = shiftSize.toFixed(2);
|
||||
let translate = shiftSize > 0 ? `0 ${shiftSize}px` : "";
|
||||
- document.body.style.translate = translate;
|
||||
- gURLBar.style.translate = gURLBar.hasAttribute("breakout") ? translate : "";
|
||||
let searchbar = document.getElementById("searchbar-new");
|
||||
if (searchbar) {
|
||||
searchbar.style.transform = searchbar.hasAttribute("breakout")
|
||||
searchbar.style.translate = searchbar.hasAttribute("breakout")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
|
||||
index dba83914d1131616ead67f48949bda74105b7d46..86294fe79cd30b2a24b20738c9cd1f5114e8e669 100644
|
||||
index b64d2f52ed1eb3d0b8aa86700bc082d3fc95152b..dd8636148d0646f6949d6279d70e20c09d8c7c17 100644
|
||||
--- a/browser/base/content/browser-init.js
|
||||
+++ b/browser/base/content/browser-init.js
|
||||
@@ -247,6 +247,7 @@ var gBrowserInit = {
|
||||
@@ -252,6 +252,7 @@ var gBrowserInit = {
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
@@ -10,7 +10,7 @@ index dba83914d1131616ead67f48949bda74105b7d46..86294fe79cd30b2a24b20738c9cd1f51
|
||||
gBrowser.addEventListener("DOMUpdateBlockedPopups", e =>
|
||||
PopupAndRedirectBlockerObserver.handleEvent(e)
|
||||
);
|
||||
@@ -444,6 +445,7 @@ var gBrowserInit = {
|
||||
@@ -446,6 +447,7 @@ var gBrowserInit = {
|
||||
|
||||
this._handleURIToLoad();
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
|
||||
index 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd86ad603de 100644
|
||||
index 942bb5688e98f66ad71560fb32e1ca26a8081edf..25ba741c35c49afbf4e6053df3a0a7296d3040d8 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 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd8
|
||||
DevToolsSocketStatus:
|
||||
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
|
||||
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
|
||||
@@ -814,7 +815,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
|
||||
@@ -816,7 +817,12 @@ function UpdateBackForwardCommands(aWebNavigation) {
|
||||
|
||||
var backDisabled = backCommand.hasAttribute("disabled");
|
||||
var forwardDisabled = forwardCommand.hasAttribute("disabled");
|
||||
@@ -24,7 +24,7 @@ index 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd8
|
||||
if (backDisabled) {
|
||||
backCommand.removeAttribute("disabled");
|
||||
} else {
|
||||
@@ -3820,7 +3826,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3830,7 +3836,7 @@ function warnAboutClosingWindow() {
|
||||
|
||||
if (!isPBWindow && !toolbar.visible) {
|
||||
return gBrowser.warnAboutClosingTabs(
|
||||
@@ -33,7 +33,7 @@ index 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd8
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
);
|
||||
}
|
||||
@@ -3860,7 +3866,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3870,7 +3876,7 @@ function warnAboutClosingWindow() {
|
||||
return (
|
||||
isPBWindow ||
|
||||
gBrowser.warnAboutClosingTabs(
|
||||
@@ -42,7 +42,7 @@ index 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd8
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
)
|
||||
);
|
||||
@@ -3885,7 +3891,7 @@ function warnAboutClosingWindow() {
|
||||
@@ -3895,7 +3901,7 @@ function warnAboutClosingWindow() {
|
||||
AppConstants.platform != "macosx" ||
|
||||
isPBWindow ||
|
||||
gBrowser.warnAboutClosingTabs(
|
||||
@@ -51,7 +51,7 @@ index 0ea3d82b88819c41ffd866ae9533ebb5a7bff957..3ed2fc4d08b20883e0587e4435daacd8
|
||||
gBrowser.closingTabsEnum.ALL
|
||||
)
|
||||
);
|
||||
@@ -4825,6 +4831,9 @@ var ConfirmationHint = {
|
||||
@@ -4835,6 +4841,9 @@ var ConfirmationHint = {
|
||||
}
|
||||
|
||||
document.l10n.setAttributes(this._message, messageId, options.l10nArgs);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser-sets.js b/browser/base/content/browser-sets.js
|
||||
index 2918f0c46f404cba1658d4da823c6ca41cba8ded..2cb8e8c1c9dd1059bee45911159bf392f3a86ee9 100644
|
||||
index d9ab2ad00b862d56ea7aa8e2469d050d8df7f5dc..2efb25ff9cfd3a224724fffadfa0aee693ddf47d 100644
|
||||
--- a/browser/base/content/browser-sets.js
|
||||
+++ b/browser/base/content/browser-sets.js
|
||||
@@ -272,7 +272,7 @@ document.addEventListener(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
|
||||
index a95ce8f0b28d98632c06f605b510b5ae3e98c4ed..275b3f5f30046a5e08d9ebceff0d2b91c865eb1b 100644
|
||||
index b42287485c2baeabe831b0d54c6f09330b0caabd..6426bb6742401470e4e48b4049cd365e2a5952e8 100644
|
||||
--- a/browser/base/content/browser.xhtml
|
||||
+++ b/browser/base/content/browser.xhtml
|
||||
@@ -19,6 +19,7 @@
|
||||
@@ -10,7 +10,7 @@ index a95ce8f0b28d98632c06f605b510b5ae3e98c4ed..275b3f5f30046a5e08d9ebceff0d2b91
|
||||
persist="screenX screenY width height sizemode"
|
||||
data-l10n-sync="true">
|
||||
<head>
|
||||
@@ -100,8 +101,10 @@
|
||||
@@ -101,8 +102,10 @@
|
||||
|
||||
<title data-l10n-id="browser-main-window-default-title"></title>
|
||||
|
||||
@@ -21,7 +21,7 @@ index a95ce8f0b28d98632c06f605b510b5ae3e98c4ed..275b3f5f30046a5e08d9ebceff0d2b91
|
||||
</head>
|
||||
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
# All sets except for popupsets (commands, keys, and stringbundles)
|
||||
@@ -134,9 +137,11 @@
|
||||
@@ -135,9 +138,11 @@
|
||||
</vbox>
|
||||
</html:template>
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/content/main-popupset.inc.xhtml b/browser/base/content/main-popupset.inc.xhtml
|
||||
index 0d73eb17b340001312a885ea10f5d6ad871f14d2..475824a0f9a4bbc15dc9bc7f1d2a09a51e58bc65 100644
|
||||
index 81b3d0a744b9f40358219696e0e52a8114c53e83..71eb93e50f19af1d8f44fb425970cc87416c84a3 100644
|
||||
--- a/browser/base/content/main-popupset.inc.xhtml
|
||||
+++ b/browser/base/content/main-popupset.inc.xhtml
|
||||
@@ -234,6 +234,10 @@
|
||||
@@ -235,6 +235,10 @@
|
||||
hidden="true"
|
||||
tabspecific="true"
|
||||
aria-labelledby="editBookmarkPanelTitle">
|
||||
@@ -13,7 +13,7 @@ index 0d73eb17b340001312a885ea10f5d6ad871f14d2..475824a0f9a4bbc15dc9bc7f1d2a09a5
|
||||
<box class="panel-header">
|
||||
<html:h1>
|
||||
<html:span id="editBookmarkPanelTitle"/>
|
||||
@@ -259,6 +263,7 @@
|
||||
@@ -260,6 +264,7 @@
|
||||
class="footer-button"/>
|
||||
</html:moz-button-group>
|
||||
</vbox>
|
||||
@@ -21,7 +21,7 @@ index 0d73eb17b340001312a885ea10f5d6ad871f14d2..475824a0f9a4bbc15dc9bc7f1d2a09a5
|
||||
</panel>
|
||||
</html:template>
|
||||
|
||||
@@ -678,6 +683,8 @@
|
||||
@@ -699,6 +704,8 @@
|
||||
|
||||
#include popup-notifications.inc.xhtml
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
index 3f7b85086de11923f9453c8f02afb517c49afa8b..5be31a0cb3c5a52ba90cd2cd7f333a0354d9f2af 100644
|
||||
index edeb473e46b3aa4b12eb4b59ce62e5ae48edd2a1..d2c6c8c150e732b77d65420520ca4905a9d3ea4d 100644
|
||||
--- a/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -2,7 +2,7 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
-<toolbox id="navigator-toolbox" class="browser-toolbox-background">
|
||||
+<toolbox id="navigator-toolbox" class="browser-toolbox-background" persist="width style">
|
||||
-<toolbox id="navigator-toolbox">
|
||||
+<toolbox id="navigator-toolbox" persist="width style">
|
||||
<script src="chrome://browser/content/navigator-toolbox.js" />
|
||||
|
||||
<!-- Menu -->
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
|
||||
index a929907fcaf893c00259f56815f202ba475e1e41..9e15f5b8f8eb3fa31fd463e383794acd18314767 100644
|
||||
index 5ee0ee4246d1c267b75328666a7f7f54e6f93246..ae778b88e1d295cdae2d0433d943ac467081b126 100644
|
||||
--- a/browser/base/content/nsContextMenu.sys.mjs
|
||||
+++ b/browser/base/content/nsContextMenu.sys.mjs
|
||||
@@ -377,6 +377,9 @@ export class nsContextMenu {
|
||||
this.initPDFItems();
|
||||
@@ -370,6 +370,9 @@ export class nsContextMenu {
|
||||
this.initTextFragmentItems();
|
||||
this.pdfjsContextMenu.initItems();
|
||||
|
||||
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
||||
+ this.showItem("context-zenOpenLinkInGlance", this.onLink && !this.onMailtoLink && !this.onTelLink);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
|
||||
index 22550debb8bba2a06bcd34ba9a21737105be5d92..fb4832243078c78926a66693f4ebe447c692b393 100644
|
||||
index 7eaca95f7e876809552da5a3af3449b7e7b1a34d..00f1e3047c59565c8830a40da3a85f3b228f7c93 100644
|
||||
--- a/browser/base/jar.mn
|
||||
+++ b/browser/base/jar.mn
|
||||
@@ -108,3 +108,5 @@ browser.jar:
|
||||
@@ -110,3 +110,5 @@ browser.jar:
|
||||
|
||||
# L10n resources and overrides.
|
||||
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
|
||||
index 938b7aa84266ad92b6654b4e44f7bca3dc315912..cb4f544e3cb9e035d17079c11420d72148db0d33 100644
|
||||
index 75cdab491d35dc30be6c0a4ec6ab88e6fb4239aa..9c26fb1d6032bdecd6c552bd25694f45e3822d50 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 938b7aa84266ad92b6654b4e44f7bca3dc315912..cb4f544e3cb9e035d17079c11420d721
|
||||
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
|
||||
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
|
||||
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
|
||||
@@ -1456,7 +1457,7 @@ BrowserGlue.prototype = {
|
||||
@@ -1457,7 +1458,7 @@ BrowserGlue.prototype = {
|
||||
windowcount++;
|
||||
let tabbrowser = win.gBrowser;
|
||||
if (tabbrowser) {
|
||||
@@ -19,7 +19,7 @@ index 938b7aa84266ad92b6654b4e44f7bca3dc315912..cb4f544e3cb9e035d17079c11420d721
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1621,6 +1622,8 @@ BrowserGlue.prototype = {
|
||||
@@ -1622,6 +1623,8 @@ BrowserGlue.prototype = {
|
||||
} else if (profileDataVersion < APP_DATA_VERSION) {
|
||||
lazy.ProfileDataUpgrader.upgrade(profileDataVersion, APP_DATA_VERSION);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css
|
||||
index 6952ca1c306aa8815f662d8c557d4dd6b79fce0f..ce420f1b2f57e3f23ef18cac20938662f3ecf1ae 100644
|
||||
index e5bbb4c217ae7b05a2da79b332d72cc5429f061f..ea44d83dd0825a3bc950f6005025498644c7fc67 100644
|
||||
--- a/browser/components/aboutwelcome/content/aboutwelcome.css
|
||||
+++ b/browser/components/aboutwelcome/content/aboutwelcome.css
|
||||
@@ -331,6 +331,11 @@ panel#feature-callout {
|
||||
@@ -14,7 +14,7 @@ index 6952ca1c306aa8815f662d8c557d4dd6b79fce0f..ce420f1b2f57e3f23ef18cac20938662
|
||||
}
|
||||
|
||||
panel#feature-callout::part(content) {
|
||||
@@ -517,6 +522,12 @@ div#feature-callout.hidden {
|
||||
@@ -518,6 +523,12 @@ div#feature-callout.hidden {
|
||||
width: 25em;
|
||||
gap: 16px;
|
||||
background: var(--fc-background);
|
||||
@@ -27,7 +27,7 @@ index 6952ca1c306aa8815f662d8c557d4dd6b79fce0f..ce420f1b2f57e3f23ef18cac20938662
|
||||
}
|
||||
#feature-callout .screen[pos=callout] .section-main .main-content .main-content-inner {
|
||||
gap: 12px;
|
||||
@@ -830,6 +841,10 @@ panel#feature-callout::part(content) {
|
||||
@@ -850,6 +861,10 @@ panel#feature-callout::part(content) {
|
||||
overflow: visible;
|
||||
transform: rotate(45deg);
|
||||
transform-style: preserve-3d;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
diff --git a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
|
||||
index 7338737a25c2b75f28c48f573a58b72ec326ad3b..7cf3aa1164d38bc9daaa010f27c567e0d9792bc6 100644
|
||||
index 4081f59d041e91291d5e6b6b8c9ad96db5b6b2dc..d420a2fe4ca552b7f24ce9fbefc5f7302d7f2c8e 100644
|
||||
--- a/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
|
||||
+++ b/browser/components/aiwindow/ui/modules/AIWindow.sys.mjs
|
||||
@@ -200,6 +200,7 @@ export const AIWindow = {
|
||||
@@ -269,6 +269,7 @@ export const AIWindow = {
|
||||
},
|
||||
|
||||
_updateWindowSwitcherPosition(win) {
|
||||
_updateToolbarButtonPositions(win, { isToggling = false } = {}) {
|
||||
+ return;
|
||||
const modeSwitcherButton = win.document.getElementById("ai-window-toggle");
|
||||
const hamburgerMenu = win.document.getElementById("PanelUI-button");
|
||||
|
||||
const targetToolbar = win.document.getElementById(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/asrouter/modules/FeatureCallout.sys.mjs b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
index a380e024e4ad6f77ad3ad74bb7a0784d7dfb6ff3..e990f8c2412f48ca5272a7741dcb7445a406462e 100644
|
||||
index f176498a3130b61ac5e75fce8208d1b9eaf13f81..d133526ab5bf3db53e459c36d5f9a7ff37ef972f 100644
|
||||
--- a/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
+++ b/browser/components/asrouter/modules/FeatureCallout.sys.mjs
|
||||
@@ -778,6 +778,7 @@ export class FeatureCallout {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
|
||||
index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885c6bde16d 100644
|
||||
index db617c65b89643015d91b0f6a20eab7d7a1b598f..9acef640800bdc75f477a8e14e73f08f535e9d9e 100644
|
||||
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
|
||||
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
|
||||
@@ -14,6 +14,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
@@ -127,7 +127,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
this.notifyDOMChange(aNode, aNextNode, aContainer, false, () => {
|
||||
this.setLocationAttributes(aNode, aAreaId);
|
||||
aContainer.insertBefore(aNode, aNextNode);
|
||||
@@ -4554,7 +4552,7 @@ var CustomizableUIInternal = {
|
||||
@@ -4565,7 +4563,7 @@ var CustomizableUIInternal = {
|
||||
* For all registered areas, builds those areas to reflect the current
|
||||
* placement state of all widgets.
|
||||
*/
|
||||
@@ -136,7 +136,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
for (let [areaId, areaNodes] of gBuildAreas) {
|
||||
let placements = gPlacements.get(areaId);
|
||||
let isFirstChangedToolbar = true;
|
||||
@@ -4565,7 +4563,7 @@ var CustomizableUIInternal = {
|
||||
@@ -4576,7 +4574,7 @@ var CustomizableUIInternal = {
|
||||
if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) {
|
||||
let defaultCollapsed = area.get("defaultCollapsed");
|
||||
let win = areaNode.ownerGlobal;
|
||||
@@ -145,7 +145,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
win.setToolbarVisibility(
|
||||
areaNode,
|
||||
typeof defaultCollapsed == "string"
|
||||
@@ -5856,6 +5854,7 @@ export var CustomizableUI = {
|
||||
@@ -5867,6 +5865,7 @@ export var CustomizableUI = {
|
||||
unregisterArea(aName, aDestroyPlacements) {
|
||||
CustomizableUIInternal.unregisterArea(aName, aDestroyPlacements);
|
||||
},
|
||||
@@ -153,7 +153,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
/**
|
||||
* Add a widget to an area.
|
||||
* If the area to which you try to add is not known to CustomizableUI,
|
||||
@@ -7819,7 +7818,9 @@ class OverflowableToolbar {
|
||||
@@ -7830,7 +7829,9 @@ class OverflowableToolbar {
|
||||
);
|
||||
|
||||
if (webExtList && CustomizableUI.isWebExtensionWidget(child.id)) {
|
||||
@@ -163,7 +163,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
webExtList.insertBefore(child, webExtList.firstElementChild);
|
||||
} else {
|
||||
child.setAttribute("cui-anchorid", this.#defaultListButton.id);
|
||||
@@ -7879,7 +7880,7 @@ class OverflowableToolbar {
|
||||
@@ -7890,7 +7891,7 @@ class OverflowableToolbar {
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
@@ -172,7 +172,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
if (child != aExceptChild) {
|
||||
sum += getInlineSize(child);
|
||||
}
|
||||
@@ -7903,11 +7904,11 @@ class OverflowableToolbar {
|
||||
@@ -7914,11 +7915,11 @@ class OverflowableToolbar {
|
||||
parseFloat(style.paddingLeft) -
|
||||
parseFloat(style.paddingRight) -
|
||||
toolbarChildrenWidth;
|
||||
@@ -186,7 +186,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
});
|
||||
|
||||
lazy.log.debug(
|
||||
@@ -7922,7 +7923,14 @@ class OverflowableToolbar {
|
||||
@@ -7933,7 +7934,14 @@ class OverflowableToolbar {
|
||||
Math.max(targetWidth, targetChildrenWidth)
|
||||
);
|
||||
totalAvailWidth = Math.ceil(totalAvailWidth);
|
||||
@@ -202,7 +202,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
return { isOverflowing, targetContentWidth, totalAvailWidth };
|
||||
}
|
||||
|
||||
@@ -7983,7 +7991,11 @@ class OverflowableToolbar {
|
||||
@@ -7994,7 +8002,11 @@ class OverflowableToolbar {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -215,7 +215,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
lazy.log.debug(
|
||||
`Need ${minSize} but width is ${totalAvailWidth} so bailing`
|
||||
);
|
||||
@@ -8016,7 +8028,7 @@ class OverflowableToolbar {
|
||||
@@ -8027,7 +8039,7 @@ class OverflowableToolbar {
|
||||
}
|
||||
}
|
||||
if (!inserted) {
|
||||
@@ -224,7 +224,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
}
|
||||
child.removeAttribute("cui-anchorid");
|
||||
child.removeAttribute("overflowedItem");
|
||||
@@ -8142,6 +8154,9 @@ class OverflowableToolbar {
|
||||
@@ -8153,6 +8165,9 @@ class OverflowableToolbar {
|
||||
* if no such list exists.
|
||||
*/
|
||||
get #webExtList() {
|
||||
@@ -234,7 +234,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
if (!this.#webExtListRef) {
|
||||
let targetID = this.#toolbar.getAttribute("addon-webext-overflowtarget");
|
||||
if (!targetID) {
|
||||
@@ -8153,6 +8168,9 @@ class OverflowableToolbar {
|
||||
@@ -8164,6 +8179,9 @@ class OverflowableToolbar {
|
||||
let win = this.#toolbar.ownerGlobal;
|
||||
let { panel } = win.gUnifiedExtensions;
|
||||
this.#webExtListRef = panel.querySelector(`#${targetID}`);
|
||||
@@ -244,7 +244,7 @@ index 4aca0aa0c90603e09b58395debb62875c018a8cf..400ad196c846083001b36d27edec6885
|
||||
}
|
||||
return this.#webExtListRef;
|
||||
}
|
||||
@@ -8361,7 +8379,7 @@ class OverflowableToolbar {
|
||||
@@ -8372,7 +8390,7 @@ class OverflowableToolbar {
|
||||
break;
|
||||
}
|
||||
case "mousedown": {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
|
||||
index e21e54525d197ca5e4c1a62999f9c34c5b4eda7d..3a57749000ba3f04c0dbd034f89e1458f5fa355e 100644
|
||||
index 5056ff7fba62f8340c58cbaa30833aad12b4fc70..32dbd206cbc8576ec5a5f958f43670fa90c050b8 100644
|
||||
--- a/browser/components/customizableui/content/panelUI.js
|
||||
+++ b/browser/components/customizableui/content/panelUI.js
|
||||
@@ -627,10 +627,12 @@ const PanelUI = {
|
||||
@@ -647,10 +647,12 @@ const PanelUI = {
|
||||
if (hasKids && !this.navbar.hasAttribute("nonemptyoverflow")) {
|
||||
this.navbar.setAttribute("nonemptyoverflow", "true");
|
||||
this.overflowPanel.setAttribute("hasfixeditems", "true");
|
||||
@@ -15,7 +15,7 @@ index e21e54525d197ca5e4c1a62999f9c34c5b4eda7d..3a57749000ba3f04c0dbd034f89e1458
|
||||
}
|
||||
},
|
||||
|
||||
@@ -978,7 +980,7 @@ const PanelUI = {
|
||||
@@ -998,7 +1000,7 @@ const PanelUI = {
|
||||
el.removeAttribute("data-lazy-l10n-id");
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
|
||||
index 019aa2ef81f76ce4921e261fd4c65c11a28c4149..4848aa4d7d4ad6b11a64abff65d2637de09bd9a5 100644
|
||||
index ae004ad48e86aae9d13fc6aa5f77f3095763f829..1e3d14a5c6fcbebbc677e0e57ef2b2176a141a3c 100644
|
||||
--- a/browser/components/extensions/parent/ext-tabs.js
|
||||
+++ b/browser/components/extensions/parent/ext-tabs.js
|
||||
@@ -516,6 +516,7 @@ this.tabs = class extends ExtensionAPIPersistent {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
|
||||
index bd094a48b418b8ff1e28ebbe722877262868d750..47f026b74f75329406fe021402124d5307cf6e32 100644
|
||||
index b2d65603ec714b49249789d0e48b0b677c9eaea6..6cea34be90e2f181fd3e5770f7e2fd99c483b8d8 100644
|
||||
--- a/browser/components/preferences/jar.mn
|
||||
+++ b/browser/components/preferences/jar.mn
|
||||
@@ -49,3 +49,5 @@ browser.jar:
|
||||
@@ -51,3 +51,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)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
|
||||
index f23beeb5c793bc7a6cbea4512a5f2cd379ec98c7..09617b8fbbd01e87b97e323cb3f7ca055bc06778 100644
|
||||
index 7d6bbc54d21bf149dd1b99a38ca803654e6908eb..4da0e5fc921bb0ee24ace443c0c119fdd2707fc9 100644
|
||||
--- a/browser/components/preferences/main.inc.xhtml
|
||||
+++ b/browser/components/preferences/main.inc.xhtml
|
||||
@@ -96,6 +96,7 @@
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
|
||||
index a5f2e4258942010ee61ed7a86497f51793366fcd..f01524a09512ec6cd1972a9fdb173ff427a0d753 100644
|
||||
index 8f8da3c4cabb4a05b50431b1feeff8f1f1abcf6e..97c651cb3728353b9a0d09d1aaa9ba87f8c05b57 100644
|
||||
--- a/browser/components/preferences/main.js
|
||||
+++ b/browser/components/preferences/main.js
|
||||
@@ -2652,6 +2652,11 @@ SettingGroupManager.registerGroups({
|
||||
@@ -2658,6 +2658,11 @@ function createStartupConfig(hidden = false) {
|
||||
id: "browserRestoreSession",
|
||||
l10nId: "startup-restore-windows-and-tabs",
|
||||
},
|
||||
@@ -14,7 +14,7 @@ index a5f2e4258942010ee61ed7a86497f51793366fcd..f01524a09512ec6cd1972a9fdb173ff4
|
||||
{
|
||||
id: "windowsLaunchOnLogin",
|
||||
l10nId: "windows-launch-on-login",
|
||||
@@ -5277,7 +5282,7 @@ function getBundleForLocales(newLocales) {
|
||||
@@ -5174,7 +5179,7 @@ function getBundleForLocales(newLocales) {
|
||||
])
|
||||
);
|
||||
return new Localization(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
|
||||
index 3c60cc9f199ba5836ea1233fbbeb74a6dd63b0c0..252966bca1c8c915885b6c6391360fb6cd90f5ba 100644
|
||||
index 2d6cba7fac0c7de6d7c4a819f2c7ad20ce10bb33..15434dac6b501cf6f7a6968c6363c59288043c3e 100644
|
||||
--- a/browser/components/preferences/preferences.js
|
||||
+++ b/browser/components/preferences/preferences.js
|
||||
@@ -119,6 +119,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 3c60cc9f199ba5836ea1233fbbeb74a6dd63b0c0..252966bca1c8c915885b6c6391360fb6
|
||||
],
|
||||
resizeCallback: async ({ title, frame }) => {
|
||||
// Search within main document and highlight matched keyword.
|
||||
@@ -359,6 +360,10 @@ function init_all() {
|
||||
@@ -324,6 +325,10 @@ function init_all() {
|
||||
register_module("paneSearch", gSearchPane);
|
||||
register_module("panePrivacy", gPrivacyPane);
|
||||
register_module("paneContainers", gContainersPane);
|
||||
@@ -19,5 +19,5 @@ index 3c60cc9f199ba5836ea1233fbbeb74a6dd63b0c0..252966bca1c8c915885b6c6391360fb6
|
||||
+ register_module("paneZenCKS", gZenCKSSettings);
|
||||
+ register_module("paneZenMarketplace", gZenMarketplaceManager);
|
||||
|
||||
for (let [id, config] of Object.entries(CONFIG_PANES)) {
|
||||
SettingPaneManager.registerPane(id, config);
|
||||
let redesignEnabled = Services.prefs.getBoolPref(
|
||||
"browser.settings-redesign.enabled"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
|
||||
index b006d5e5e64c418fbf930c010401e4ea3a3647a3..27886c04258e40f7c6ec444320a9a2a1cf960db0 100644
|
||||
index b006d5e5e64c418fbf930c010401e4ea3a3647a3..ed75c48a2cdf47dd957b0598282fb211ca2fb1b5 100644
|
||||
--- a/browser/components/preferences/preferences.xhtml
|
||||
+++ b/browser/components/preferences/preferences.xhtml
|
||||
@@ -42,6 +42,8 @@
|
||||
@@ -11,19 +11,7 @@ index b006d5e5e64c418fbf930c010401e4ea3a3647a3..27886c04258e40f7c6ec444320a9a2a1
|
||||
<link rel="localization" href="branding/brand.ftl"/>
|
||||
<link rel="localization" href="browser/browser.ftl"/>
|
||||
<!-- Used by fontbuilder.js -->
|
||||
@@ -112,6 +114,11 @@
|
||||
<hbox flex="1">
|
||||
|
||||
<vbox class="navigation">
|
||||
+ <html:moz-input-search
|
||||
+ id="searchInput"
|
||||
+ data-l10n-id="search-input-box2"
|
||||
+ data-l10n-attrs="placeholder, style"
|
||||
+ />
|
||||
<!-- category list -->
|
||||
<richlistbox id="categories" data-l10n-id="category-list" data-l10n-attrs="aria-label">
|
||||
<richlistitem id="category-general"
|
||||
@@ -124,6 +131,50 @@
|
||||
@@ -124,6 +126,50 @@
|
||||
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
|
||||
</richlistitem>
|
||||
|
||||
@@ -74,18 +62,6 @@ index b006d5e5e64c418fbf930c010401e4ea3a3647a3..27886c04258e40f7c6ec444320a9a2a1
|
||||
<richlistitem id="category-home"
|
||||
class="category"
|
||||
value="paneHome"
|
||||
@@ -249,11 +300,6 @@
|
||||
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
|
||||
</hbox>
|
||||
</hbox>
|
||||
- <html:moz-input-search
|
||||
- id="searchInput"
|
||||
- data-l10n-id="search-input-box2"
|
||||
- data-l10n-attrs="placeholder, style"
|
||||
- />
|
||||
</hbox>
|
||||
</hbox>
|
||||
<vbox id="mainPrefPane">
|
||||
@@ -266,6 +312,10 @@
|
||||
#include sync.inc.xhtml
|
||||
#include experimental.inc.xhtml
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/preferences/sync.inc.xhtml b/browser/components/preferences/sync.inc.xhtml
|
||||
index d473643ccf12b1f1116acaed2d5541622982ee6e..2e3496c24533f4c663c9b07bf689d18c1ed11b95 100644
|
||||
index b889d42301de3c4f845105bf09d19b052dca9eae..015b751bd46f2499a93e328c903475ce2d60d079 100644
|
||||
--- a/browser/components/preferences/sync.inc.xhtml
|
||||
+++ b/browser/components/preferences/sync.inc.xhtml
|
||||
@@ -223,6 +223,10 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/screenshots/overlay/overlay.css b/browser/components/screenshots/overlay/overlay.css
|
||||
index 94d87522bfaaf59b9138ec5ca960be0a0ea31339..ab3fa41cefdfc1d93edeb8a2d626bd9b1e07344b 100644
|
||||
index a2cd691cfcfa7f54f275fcafbb3c6d1a5ef78f0d..bee7703d32404ce3b882e02aa4e60bdad6d43c7f 100644
|
||||
--- a/browser/components/screenshots/overlay/overlay.css
|
||||
+++ b/browser/components/screenshots/overlay/overlay.css
|
||||
@@ -200,6 +200,9 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33dd2846bb 100644
|
||||
index 71921cec2b6aa0f103856c31254fd6c4affefccb..fbb44402e3201a00eb37765d60829828d40e70ea 100644
|
||||
--- a/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
|
||||
@@ -129,6 +129,9 @@ const TAB_EVENTS = [
|
||||
@@ -12,7 +12,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
];
|
||||
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
@@ -200,6 +203,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
||||
@@ -199,6 +202,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 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
});
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazy, "blankURI", () => {
|
||||
@@ -1292,10 +1297,7 @@ var SessionStoreInternal = {
|
||||
@@ -1291,10 +1296,7 @@ var SessionStoreInternal = {
|
||||
*/
|
||||
get willAutoRestore() {
|
||||
return (
|
||||
@@ -33,7 +33,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
);
|
||||
},
|
||||
|
||||
@@ -1972,6 +1974,9 @@ var SessionStoreInternal = {
|
||||
@@ -1970,6 +1972,9 @@ var SessionStoreInternal = {
|
||||
case "TabPinned":
|
||||
case "TabUnpinned":
|
||||
case "SwapDocShells":
|
||||
@@ -43,7 +43,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
this.saveStateDelayed(win);
|
||||
break;
|
||||
case "TabGroupCreate":
|
||||
@@ -2085,6 +2090,10 @@ var SessionStoreInternal = {
|
||||
@@ -2083,6 +2088,10 @@ var SessionStoreInternal = {
|
||||
this._windows[aWindow.__SSi].isTaskbarTab = true;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
if (lazy.AIWindow.isAIWindowActiveAndEnabled(aWindow)) {
|
||||
this._windows[aWindow.__SSi].isAIWindow = true;
|
||||
}
|
||||
@@ -2121,7 +2130,7 @@ var SessionStoreInternal = {
|
||||
@@ -2119,7 +2128,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 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
// perform additional initialization when the first window is loading
|
||||
if (lazy.RunState.isStopped) {
|
||||
@@ -2133,7 +2142,7 @@ var SessionStoreInternal = {
|
||||
@@ -2131,7 +2140,7 @@ var SessionStoreInternal = {
|
||||
// to disk to NOW() to enforce a full interval before the next write.
|
||||
lazy.SessionSaver.updateLastSaveTime();
|
||||
|
||||
@@ -72,7 +72,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
this._log.debug(
|
||||
"initializeWindow, the window is private or a web app. Saving SessionStartup.state for possibly restoring later"
|
||||
);
|
||||
@@ -2176,6 +2185,7 @@ var SessionStoreInternal = {
|
||||
@@ -2173,6 +2182,7 @@ var SessionStoreInternal = {
|
||||
null,
|
||||
"sessionstore-one-or-no-tab-restored"
|
||||
);
|
||||
@@ -80,7 +80,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
this._deferredAllWindowsRestored.resolve();
|
||||
}
|
||||
// this window was opened by _openWindowWithState
|
||||
@@ -2225,7 +2235,6 @@ var SessionStoreInternal = {
|
||||
@@ -2222,7 +2232,6 @@ var SessionStoreInternal = {
|
||||
if (closedWindowState) {
|
||||
let newWindowState;
|
||||
if (
|
||||
@@ -88,7 +88,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
!lazy.SessionStartup.willRestore()
|
||||
) {
|
||||
// We want to split the window up into pinned tabs and unpinned tabs.
|
||||
@@ -2261,6 +2270,7 @@ var SessionStoreInternal = {
|
||||
@@ -2258,6 +2267,7 @@ var SessionStoreInternal = {
|
||||
}
|
||||
|
||||
if (newWindowState) {
|
||||
@@ -96,7 +96,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
// Ensure that the window state isn't hidden
|
||||
this._restoreCount = 1;
|
||||
let state = { windows: [newWindowState] };
|
||||
@@ -2289,6 +2299,15 @@ var SessionStoreInternal = {
|
||||
@@ -2286,6 +2296,15 @@ var SessionStoreInternal = {
|
||||
});
|
||||
this._shouldRestoreLastSession = false;
|
||||
}
|
||||
@@ -112,7 +112,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
if (this._restoreLastWindow && aWindow.toolbar.visible) {
|
||||
// always reset (if not a popup window)
|
||||
@@ -2439,7 +2458,7 @@ var SessionStoreInternal = {
|
||||
@@ -2436,7 +2455,7 @@ var SessionStoreInternal = {
|
||||
|
||||
var tabbrowser = aWindow.gBrowser;
|
||||
|
||||
@@ -121,7 +121,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
TAB_EVENTS.forEach(function (aEvent) {
|
||||
tabbrowser.tabContainer.removeEventListener(aEvent, this, true);
|
||||
@@ -2490,7 +2509,7 @@ var SessionStoreInternal = {
|
||||
@@ -2487,7 +2506,7 @@ var SessionStoreInternal = {
|
||||
|
||||
let isLastRegularWindow =
|
||||
Object.values(this._windows).filter(
|
||||
@@ -130,7 +130,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
).length == 1;
|
||||
this._log.debug(
|
||||
`onClose, closing window isLastRegularWindow? ${isLastRegularWindow}`
|
||||
@@ -2547,8 +2566,8 @@ var SessionStoreInternal = {
|
||||
@@ -2544,8 +2563,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 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
}
|
||||
|
||||
completionPromise = lazy.TabStateFlusher.flushWindow(aWindow).then(() => {
|
||||
@@ -2568,8 +2587,9 @@ var SessionStoreInternal = {
|
||||
@@ -2565,8 +2584,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 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
if (!isLastWindow && winData.closedId > -1) {
|
||||
this._addClosedAction(
|
||||
@@ -2645,7 +2665,7 @@ var SessionStoreInternal = {
|
||||
@@ -2642,7 +2662,7 @@ var SessionStoreInternal = {
|
||||
* to call this method again asynchronously (for example, after
|
||||
* a window flush).
|
||||
*/
|
||||
@@ -162,7 +162,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
// Make sure SessionStore is still running, and make sure that we
|
||||
// haven't chosen to forget this window.
|
||||
if (
|
||||
@@ -2662,6 +2682,7 @@ var SessionStoreInternal = {
|
||||
@@ -2659,6 +2679,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 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
|
||||
let shouldStore = hasSaveableTabs || isLastWindow;
|
||||
|
||||
@@ -3483,7 +3504,7 @@ var SessionStoreInternal = {
|
||||
@@ -3480,7 +3501,7 @@ var SessionStoreInternal = {
|
||||
if (!isPrivateWindow && tabState.isPrivate) {
|
||||
return;
|
||||
}
|
||||
@@ -179,7 +179,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4223,6 +4244,12 @@ var SessionStoreInternal = {
|
||||
@@ -4220,6 +4241,12 @@ var SessionStoreInternal = {
|
||||
Math.min(tabState.index, tabState.entries.length)
|
||||
);
|
||||
tabState.pinned = false;
|
||||
@@ -192,7 +192,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
if (inBackground === false) {
|
||||
aWindow.gBrowser.selectedTab = newTab;
|
||||
@@ -4659,6 +4686,8 @@ var SessionStoreInternal = {
|
||||
@@ -4656,6 +4683,8 @@ var SessionStoreInternal = {
|
||||
// Append the tab if we're opening into a different window,
|
||||
tabIndex: aSource == aTargetWindow ? pos : Infinity,
|
||||
pinned: state.pinned,
|
||||
@@ -296,7 +296,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
// Move the originally open tabs to the end.
|
||||
if (initialTabs) {
|
||||
@@ -6638,6 +6679,25 @@ var SessionStoreInternal = {
|
||||
@@ -6640,6 +6681,25 @@ var SessionStoreInternal = {
|
||||
|
||||
// Most of tabData has been restored, now continue with restoring
|
||||
// attributes that may trigger external events.
|
||||
@@ -322,7 +322,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
if (tabData.pinned) {
|
||||
tabbrowser.pinTab(tab);
|
||||
@@ -6797,6 +6857,9 @@ var SessionStoreInternal = {
|
||||
@@ -6807,6 +6867,9 @@ var SessionStoreInternal = {
|
||||
aWindow.gURLBar.readOnly = false;
|
||||
}
|
||||
}
|
||||
@@ -332,7 +332,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
|
||||
let promiseParts = Promise.withResolvers();
|
||||
aWindow.setTimeout(() => {
|
||||
@@ -7592,7 +7655,7 @@ var SessionStoreInternal = {
|
||||
@@ -7602,7 +7665,7 @@ var SessionStoreInternal = {
|
||||
|
||||
let groupsToSave = new Map();
|
||||
for (let tIndex = 0; tIndex < window.tabs.length; ) {
|
||||
@@ -341,7 +341,7 @@ index 3bebeb70e1a88aefb3ef4bc2114bd85b0d8d1e51..5414adeca242f00bff98c5e41de74f33
|
||||
// Adjust window.selected
|
||||
if (tIndex + 1 < window.selected) {
|
||||
window.selected -= 1;
|
||||
@@ -7607,7 +7670,7 @@ var SessionStoreInternal = {
|
||||
@@ -7617,7 +7680,7 @@ var SessionStoreInternal = {
|
||||
);
|
||||
// We don't want to increment tIndex here.
|
||||
continue;
|
||||
|
||||
@@ -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 ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184925e5610 100644
|
||||
index b93a8fcc8b76ed888524959cbe7d6865fe830f2f..fa192837d06e28bb847acbbd462ad3229ebdc2d2 100644
|
||||
--- a/browser/components/tabbrowser/content/drag-and-drop.js
|
||||
+++ b/browser/components/tabbrowser/content/drag-and-drop.js
|
||||
@@ -35,6 +35,9 @@
|
||||
@@ -185,7 +185,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
return target;
|
||||
}
|
||||
|
||||
@@ -996,7 +1018,8 @@
|
||||
@@ -1002,7 +1024,8 @@
|
||||
isTabGroupLabel(draggedTab) &&
|
||||
draggedTab._dragData?.expandGroupOnDrop
|
||||
) {
|
||||
@@ -195,7 +195,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1180,7 +1203,6 @@
|
||||
@@ -1186,7 +1209,6 @@
|
||||
// using updateDragImage. On Linux, we can use a panel.
|
||||
if (platform == "win" || platform == "macosx") {
|
||||
captureListener = function () {
|
||||
@@ -203,7 +203,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
};
|
||||
} else {
|
||||
// Create a panel to use it in setDragImage
|
||||
@@ -1218,7 +1240,6 @@
|
||||
@@ -1224,7 +1246,6 @@
|
||||
);
|
||||
dragImageOffset = dragImageOffset * scale;
|
||||
}
|
||||
@@ -211,7 +211,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
|
||||
// _dragData.offsetX/Y give the coordinates that the mouse should be
|
||||
// positioned relative to the corner of the new window created upon
|
||||
@@ -1237,7 +1258,7 @@
|
||||
@@ -1243,7 +1264,7 @@
|
||||
let dropEffect = this.getDropEffectForTabDrag(event);
|
||||
let isMovingInTabStrip = !fromTabList && dropEffect == "move";
|
||||
let collapseTabGroupDuringDrag =
|
||||
@@ -220,7 +220,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
|
||||
tab._dragData = {
|
||||
offsetX: this._tabbrowserTabs.verticalMode
|
||||
@@ -1247,7 +1268,7 @@
|
||||
@@ -1253,7 +1274,7 @@
|
||||
? event.screenY - window.screenY - tabOffset
|
||||
: event.screenY - window.screenY,
|
||||
scrollPos:
|
||||
@@ -229,7 +229,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
? this._tabbrowserTabs.pinnedTabsContainer.scrollPosition
|
||||
: this._tabbrowserTabs.arrowScrollbox.scrollPosition,
|
||||
screenX: event.screenX,
|
||||
@@ -1294,6 +1315,7 @@
|
||||
@@ -1300,6 +1321,7 @@
|
||||
if (tabStripItemElement.hasAttribute("dragtarget")) {
|
||||
return;
|
||||
}
|
||||
@@ -237,7 +237,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
let isPinned = tab.pinned;
|
||||
let dragAndDropElements = this._tabbrowserTabs.dragAndDropElements;
|
||||
let isGrid = this._tabbrowserTabs.isContainerVerticalPinnedGrid(tab);
|
||||
@@ -1660,23 +1682,6 @@
|
||||
@@ -1666,23 +1688,6 @@
|
||||
|
||||
// Slide the relevant tabs to their new position.
|
||||
// non-moving tabs adjust for RTL
|
||||
@@ -261,7 +261,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
// moving tabs don't adjust for RTL
|
||||
for (let item of selectedElements) {
|
||||
if (
|
||||
@@ -1725,7 +1730,6 @@
|
||||
@@ -1731,7 +1736,6 @@
|
||||
for (let item of this._tabbrowserTabs.dragAndDropElements) {
|
||||
delete item._moveTogetherSelectedTabsData;
|
||||
item = elementToMove(item);
|
||||
@@ -269,7 +269,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
item.removeAttribute("multiselected-move-together");
|
||||
}
|
||||
}
|
||||
@@ -2569,7 +2573,6 @@
|
||||
@@ -2578,7 +2582,6 @@
|
||||
tab.style.top = "";
|
||||
tab.style.maxWidth = "";
|
||||
tab.style.pointerEvents = "";
|
||||
@@ -277,7 +277,7 @@ index ced2bfd88de2d16e2c028ca3f4d9d27516363575..69b45c7dad9d294e4290de4ce878d184
|
||||
tab.removeAttribute("small-stack");
|
||||
tab.removeAttribute("big-stack");
|
||||
}
|
||||
@@ -2578,11 +2581,9 @@
|
||||
@@ -2587,11 +2590,9 @@
|
||||
)) {
|
||||
label.style.width = "";
|
||||
label.style.maxWidth = "";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
|
||||
index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d965ccffd84 100644
|
||||
index 2e02bad1a7c89b4c3b5aee1e14c13bb953a64eb6..439766a40df5632ad790ab54a0c6af78a831e8ee 100644
|
||||
--- a/browser/components/tabbrowser/content/tab.js
|
||||
+++ b/browser/components/tabbrowser/content/tab.js
|
||||
@@ -21,6 +21,7 @@
|
||||
@@ -140,7 +140,7 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
event.target.classList.contains("tab-icon-overlay") ||
|
||||
event.target.classList.contains("tab-audio-button")
|
||||
) {
|
||||
@@ -592,16 +627,21 @@
|
||||
@@ -594,6 +629,10 @@
|
||||
this.style.MozUserFocus = "";
|
||||
}
|
||||
|
||||
@@ -151,6 +151,8 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
on_click(event) {
|
||||
if (event.button != 0) {
|
||||
return;
|
||||
@@ -620,11 +659,12 @@
|
||||
return;
|
||||
}
|
||||
|
||||
- if (event.getModifierState("Accel") || event.shiftKey) {
|
||||
@@ -163,7 +165,7 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
gBrowser.multiSelectedTabsCount > 0 &&
|
||||
!event.target.classList.contains("tab-close-button") &&
|
||||
!event.target.classList.contains("tab-icon-overlay") &&
|
||||
@@ -613,8 +653,9 @@
|
||||
@@ -636,8 +676,9 @@
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -175,7 +177,7 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
) {
|
||||
if (this.activeMediaBlocked) {
|
||||
if (this.multiselected) {
|
||||
@@ -632,7 +673,7 @@
|
||||
@@ -655,7 +696,7 @@
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -184,7 +186,7 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
if (this.multiselected) {
|
||||
gBrowser.removeMultiSelectedTabs(
|
||||
lazy.TabMetrics.userTriggeredContext(
|
||||
@@ -652,6 +693,14 @@
|
||||
@@ -675,6 +716,14 @@
|
||||
// (see tabbrowser-tabs 'click' handler).
|
||||
gBrowser.tabContainer._blockDblClick = true;
|
||||
}
|
||||
@@ -199,7 +201,7 @@ index e4266a159a0d5c42cc294602d00b8f66131f35d5..f3e362f062063ebe08bd26cc694f2d96
|
||||
}
|
||||
|
||||
on_dblclick(event) {
|
||||
@@ -675,6 +724,8 @@
|
||||
@@ -698,6 +747,8 @@
|
||||
animate: true,
|
||||
triggeringEvent: event,
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901c18e3136 100644
|
||||
index 2643e1a2aa14ba5cb4a64a92e1c2dfa5f07d242f..642b74cdf0edc63e5cf4ca8c69481e25b964ccbb 100644
|
||||
--- a/browser/components/tabbrowser/content/tabbrowser.js
|
||||
+++ b/browser/components/tabbrowser/content/tabbrowser.js
|
||||
@@ -413,6 +413,7 @@
|
||||
@@ -99,7 +99,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
tab.linkedPanel = uniqueId;
|
||||
this._selectedTab = tab;
|
||||
this._selectedBrowser = browser;
|
||||
@@ -949,13 +1007,18 @@
|
||||
@@ -1032,13 +1090,18 @@
|
||||
}
|
||||
|
||||
this.showTab(aTab);
|
||||
@@ -119,7 +119,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
aTab.setAttribute("pinned", "true");
|
||||
this._updateTabBarForPinnedTabs();
|
||||
@@ -968,11 +1031,19 @@
|
||||
@@ -1051,11 +1114,19 @@
|
||||
}
|
||||
|
||||
this.#handleTabMove(aTab, () => {
|
||||
@@ -140,7 +140,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
});
|
||||
|
||||
aTab.style.marginInlineStart = "";
|
||||
@@ -1149,6 +1220,9 @@
|
||||
@@ -1232,6 +1303,9 @@
|
||||
|
||||
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
|
||||
|
||||
@@ -150,7 +150,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (
|
||||
aIconURL &&
|
||||
!LOCAL_PROTOCOLS.some(protocol => aIconURL.startsWith(protocol))
|
||||
@@ -1158,6 +1232,9 @@
|
||||
@@ -1241,6 +1315,9 @@
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -160,7 +160,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
let browser = this.getBrowserForTab(aTab);
|
||||
browser.mIconURL = aIconURL;
|
||||
@@ -1479,7 +1556,6 @@
|
||||
@@ -1563,7 +1640,6 @@
|
||||
|
||||
// Preview mode should not reset the owner
|
||||
if (!this._previewMode && !oldTab.selected) {
|
||||
@@ -168,7 +168,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
let lastRelatedTab = this._lastRelatedTabMap.get(oldTab);
|
||||
@@ -1570,6 +1646,7 @@
|
||||
@@ -1654,6 +1730,7 @@
|
||||
if (!this._previewMode) {
|
||||
newTab.recordTimeFromUnloadToReload();
|
||||
newTab.updateLastAccessed();
|
||||
@@ -176,7 +176,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
oldTab.updateLastAccessed();
|
||||
// if this is the foreground window, update the last-seen timestamps.
|
||||
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
|
||||
@@ -1784,6 +1861,9 @@
|
||||
@@ -1868,6 +1945,9 @@
|
||||
}
|
||||
|
||||
let activeEl = document.activeElement;
|
||||
@@ -186,7 +186,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// If focus is on the old tab, move it to the new tab.
|
||||
if (activeEl == oldTab) {
|
||||
newTab.focus();
|
||||
@@ -1822,7 +1902,7 @@
|
||||
@@ -1906,7 +1986,7 @@
|
||||
// Focus the location bar if it was previously focused for that tab.
|
||||
// In full screen mode, only bother making the location bar visible
|
||||
// if the tab is a blank one.
|
||||
@@ -195,7 +195,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let selectURL = () => {
|
||||
if (this._asyncTabSwitching) {
|
||||
// Set _awaitingSetURI flag to suppress popup notification
|
||||
@@ -2110,7 +2190,12 @@
|
||||
@@ -2194,7 +2274,12 @@
|
||||
return this._setTabLabel(aTab, aLabel);
|
||||
}
|
||||
|
||||
@@ -209,7 +209,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (!aLabel || aLabel.includes("about:reader?")) {
|
||||
return false;
|
||||
}
|
||||
@@ -2235,7 +2320,7 @@
|
||||
@@ -2319,7 +2404,7 @@
|
||||
newIndex = this.selectedTab._tPos + 1;
|
||||
}
|
||||
|
||||
@@ -218,7 +218,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (this.isTabGroupLabel(targetTab)) {
|
||||
throw new Error(
|
||||
"Replacing a tab group label with a tab is not supported"
|
||||
@@ -2515,6 +2600,7 @@
|
||||
@@ -2599,6 +2684,7 @@
|
||||
uriIsAboutBlank,
|
||||
userContextId,
|
||||
skipLoad,
|
||||
@@ -226,7 +226,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} = {}) {
|
||||
let b = document.createXULElement("browser");
|
||||
// Use the JSM global to create the permanentKey, so that if the
|
||||
@@ -2588,8 +2674,7 @@
|
||||
@@ -2672,8 +2758,7 @@
|
||||
// we use a different attribute name for this?
|
||||
b.setAttribute("name", name);
|
||||
}
|
||||
@@ -236,7 +236,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
b.setAttribute("transparent", "true");
|
||||
}
|
||||
|
||||
@@ -2759,7 +2844,7 @@
|
||||
@@ -2843,7 +2928,7 @@
|
||||
|
||||
let panel = this.getPanel(browser);
|
||||
let uniqueId = this._generateUniquePanelID();
|
||||
@@ -245,7 +245,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
aTab.linkedPanel = uniqueId;
|
||||
|
||||
// Inject the <browser> into the DOM if necessary.
|
||||
@@ -2819,8 +2904,8 @@
|
||||
@@ -2903,8 +2988,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) {
|
||||
@@ -256,7 +256,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} else {
|
||||
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
|
||||
}
|
||||
@@ -3005,7 +3090,6 @@
|
||||
@@ -3089,7 +3174,6 @@
|
||||
this.selectedTab = this.addTrustedTab(BROWSER_NEW_TAB_URL, {
|
||||
tabIndex: tab._tPos + 1,
|
||||
userContextId: tab.userContextId,
|
||||
@@ -264,7 +264,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
focusUrlBar: true,
|
||||
});
|
||||
resolve(this.selectedBrowser);
|
||||
@@ -3115,6 +3199,9 @@
|
||||
@@ -3199,6 +3283,9 @@
|
||||
schemelessInput,
|
||||
hasValidUserGestureActivation = false,
|
||||
textDirectiveUserActivation = false,
|
||||
@@ -274,7 +274,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} = {}
|
||||
) {
|
||||
// all callers of addTab that pass a params object need to pass
|
||||
@@ -3125,10 +3212,17 @@
|
||||
@@ -3209,10 +3296,17 @@
|
||||
);
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// If we're opening a foreground tab, set the owner by default.
|
||||
ownerTab ??= inBackground ? null : this.selectedTab;
|
||||
|
||||
@@ -3136,6 +3230,7 @@
|
||||
@@ -3220,6 +3314,7 @@
|
||||
if (this.selectedTab.owner) {
|
||||
this.selectedTab.owner = null;
|
||||
}
|
||||
@@ -300,7 +300,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
// Find the tab that opened this one, if any. This is used for
|
||||
// determining positioning, and inherited attributes such as the
|
||||
@@ -3188,6 +3283,22 @@
|
||||
@@ -3272,6 +3367,22 @@
|
||||
noInitialLabel,
|
||||
skipBackgroundNotify,
|
||||
});
|
||||
@@ -323,7 +323,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (insertTab) {
|
||||
// Insert the tab into the tab container in the correct position.
|
||||
this.#insertTabAtIndex(t, {
|
||||
@@ -3196,6 +3307,7 @@
|
||||
@@ -3280,6 +3391,7 @@
|
||||
ownerTab,
|
||||
openerTab,
|
||||
pinned,
|
||||
@@ -331,7 +331,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
bulkOrderedOpen,
|
||||
tabGroup: tabGroup ?? openerTab?.group,
|
||||
});
|
||||
@@ -3214,6 +3326,7 @@
|
||||
@@ -3298,6 +3410,7 @@
|
||||
openWindowInfo,
|
||||
skipLoad,
|
||||
triggeringRemoteType,
|
||||
@@ -339,7 +339,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}));
|
||||
|
||||
if (focusUrlBar) {
|
||||
@@ -3338,6 +3451,12 @@
|
||||
@@ -3422,6 +3535,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -352,7 +352,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// Additionally send pinned tab events
|
||||
if (pinned) {
|
||||
this.#notifyPinnedStatus(t);
|
||||
@@ -3656,6 +3775,7 @@
|
||||
@@ -3729,6 +3848,7 @@
|
||||
isAdoptingGroup = false,
|
||||
isUserTriggered = false,
|
||||
telemetryUserCreateSource = "unknown",
|
||||
@@ -360,7 +360,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} = {}
|
||||
) {
|
||||
if (
|
||||
@@ -3666,9 +3786,6 @@
|
||||
@@ -3739,9 +3859,6 @@
|
||||
!this.isSplitViewWrapper(tabOrSplitView)
|
||||
)
|
||||
) {
|
||||
@@ -370,7 +370,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
if (!color) {
|
||||
@@ -3689,9 +3806,14 @@
|
||||
@@ -3762,9 +3879,14 @@
|
||||
label,
|
||||
isAdoptingGroup
|
||||
);
|
||||
@@ -387,7 +387,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
);
|
||||
group.addTabs(tabsAndSplitViews);
|
||||
|
||||
@@ -3812,7 +3934,7 @@
|
||||
@@ -3885,7 +4007,7 @@
|
||||
}
|
||||
|
||||
this.#handleTabMove(tab, () =>
|
||||
@@ -396,7 +396,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
);
|
||||
}
|
||||
|
||||
@@ -3896,6 +4018,7 @@
|
||||
@@ -3969,6 +4091,7 @@
|
||||
color: group.color,
|
||||
insertBefore: newTabs[0],
|
||||
isAdoptingGroup: true,
|
||||
@@ -404,7 +404,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4107,6 +4230,7 @@
|
||||
@@ -4179,6 +4302,7 @@
|
||||
openWindowInfo,
|
||||
skipLoad,
|
||||
triggeringRemoteType,
|
||||
@@ -412,7 +412,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
) {
|
||||
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
|
||||
@@ -4176,6 +4300,7 @@
|
||||
@@ -4248,6 +4372,7 @@
|
||||
openWindowInfo,
|
||||
name,
|
||||
skipLoad,
|
||||
@@ -420,7 +420,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4389,9 +4514,9 @@
|
||||
@@ -4461,9 +4586,9 @@
|
||||
}
|
||||
|
||||
// Add a new tab if needed.
|
||||
@@ -432,7 +432,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
let url = "about:blank";
|
||||
if (tabData.entries?.length) {
|
||||
@@ -4428,8 +4553,10 @@
|
||||
@@ -4500,8 +4625,10 @@
|
||||
insertTab: false,
|
||||
skipLoad: true,
|
||||
preferredRemoteType,
|
||||
@@ -444,7 +444,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (select) {
|
||||
tabToSelect = tab;
|
||||
}
|
||||
@@ -4451,7 +4578,8 @@
|
||||
@@ -4523,7 +4650,8 @@
|
||||
this.pinTab(tab);
|
||||
// Then ensure all the tab open/pinning information is sent.
|
||||
this._fireTabOpen(tab, {});
|
||||
@@ -454,7 +454,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let { groupId } = tabData;
|
||||
const tabGroup = tabGroupWorkingData.get(groupId);
|
||||
// if a tab refers to a tab group we don't know, skip any group
|
||||
@@ -4471,7 +4599,10 @@
|
||||
@@ -4543,7 +4671,10 @@
|
||||
tabGroup.stateData.id,
|
||||
tabGroup.stateData.color,
|
||||
tabGroup.stateData.collapsed,
|
||||
@@ -466,7 +466,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
);
|
||||
tabsFragment.appendChild(tabGroup.node);
|
||||
}
|
||||
@@ -4526,9 +4657,22 @@
|
||||
@@ -4598,9 +4729,22 @@
|
||||
// to remove the old selected tab.
|
||||
if (tabToSelect) {
|
||||
let leftoverTab = this.selectedTab;
|
||||
@@ -489,7 +489,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
if (tabs.length > 1 || !tabs[0].selected) {
|
||||
this._updateTabsAfterInsert();
|
||||
@@ -4719,11 +4863,14 @@
|
||||
@@ -4791,11 +4935,14 @@
|
||||
if (ownerTab) {
|
||||
tab.owner = ownerTab;
|
||||
}
|
||||
@@ -505,7 +505,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (
|
||||
!bulkOrderedOpen &&
|
||||
((openerTab &&
|
||||
@@ -4735,7 +4882,7 @@
|
||||
@@ -4807,7 +4954,7 @@
|
||||
let lastRelatedTab =
|
||||
openerTab && this._lastRelatedTabMap.get(openerTab);
|
||||
let previousTab = lastRelatedTab || openerTab || this.selectedTab;
|
||||
@@ -514,7 +514,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
tabGroup = previousTab.group;
|
||||
}
|
||||
if (
|
||||
@@ -4751,7 +4898,7 @@
|
||||
@@ -4823,7 +4970,7 @@
|
||||
previousTab.splitview
|
||||
) + 1;
|
||||
} else if (previousTab.visible) {
|
||||
@@ -523,7 +523,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} else if (previousTab == FirefoxViewHandler.tab) {
|
||||
elementIndex = 0;
|
||||
}
|
||||
@@ -4779,14 +4926,14 @@
|
||||
@@ -4851,14 +4998,14 @@
|
||||
}
|
||||
// Ensure index is within bounds.
|
||||
if (tab.pinned) {
|
||||
@@ -542,7 +542,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
if (pinned && !itemAfter?.pinned) {
|
||||
itemAfter = null;
|
||||
@@ -4803,7 +4950,7 @@
|
||||
@@ -4875,7 +5022,7 @@
|
||||
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
|
||||
@@ -551,7 +551,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (
|
||||
(this.isTab(itemAfter) && itemAfter.group == tabGroup) ||
|
||||
this.isSplitViewWrapper(itemAfter)
|
||||
@@ -4834,7 +4981,11 @@
|
||||
@@ -4906,7 +5053,11 @@
|
||||
const tabContainer = pinned
|
||||
? this.tabContainer.pinnedTabsContainer
|
||||
: this.tabContainer;
|
||||
@@ -563,7 +563,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
if (tab.group?.collapsed) {
|
||||
@@ -4849,6 +5000,7 @@
|
||||
@@ -4921,6 +5072,7 @@
|
||||
if (pinned) {
|
||||
this._updateTabBarForPinnedTabs();
|
||||
}
|
||||
@@ -571,7 +571,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
TabBarVisibility.update();
|
||||
}
|
||||
@@ -5397,6 +5549,7 @@
|
||||
@@ -5469,6 +5621,7 @@
|
||||
telemetrySource,
|
||||
} = {}
|
||||
) {
|
||||
@@ -579,7 +579,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
|
||||
// can be considered equivalent to closing the window.
|
||||
if (
|
||||
@@ -5486,6 +5639,7 @@
|
||||
@@ -5558,6 +5711,7 @@
|
||||
if (lastToClose) {
|
||||
this.removeTab(lastToClose, aParams);
|
||||
}
|
||||
@@ -587,7 +587,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
@@ -5531,6 +5685,13 @@
|
||||
@@ -5603,6 +5757,13 @@
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let isVisibleTab = aTab.visible;
|
||||
// We have to sample the tab width now, since _beginRemoveTab might
|
||||
// end up modifying the DOM in such a way that aTab gets a new
|
||||
@@ -5538,6 +5699,9 @@
|
||||
@@ -5610,6 +5771,9 @@
|
||||
// state).
|
||||
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
|
||||
let isLastTab = this.#isLastTabInWindow(aTab);
|
||||
@@ -611,7 +611,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (
|
||||
!this._beginRemoveTab(aTab, {
|
||||
closeWindowFastpath: true,
|
||||
@@ -5549,13 +5713,14 @@
|
||||
@@ -5621,13 +5785,14 @@
|
||||
telemetrySource,
|
||||
})
|
||||
) {
|
||||
@@ -627,7 +627,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let lockTabSizing =
|
||||
!this.tabContainer.verticalMode &&
|
||||
!aTab.pinned &&
|
||||
@@ -5586,7 +5751,13 @@
|
||||
@@ -5658,7 +5823,13 @@
|
||||
// We're not animating, so we can cancel the animation stopwatch.
|
||||
Glean.browserTabclose.timeAnim.cancel(aTab._closeTimeAnimTimerId);
|
||||
aTab._closeTimeAnimTimerId = null;
|
||||
@@ -642,7 +642,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5720,7 +5891,7 @@
|
||||
@@ -5792,7 +5963,7 @@
|
||||
closeWindowWithLastTab != null
|
||||
? closeWindowWithLastTab
|
||||
: !window.toolbar.visible ||
|
||||
@@ -651,7 +651,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
if (closeWindow) {
|
||||
// We've already called beforeunload on all the relevant tabs if we get here,
|
||||
@@ -5744,6 +5915,7 @@
|
||||
@@ -5816,6 +5987,7 @@
|
||||
|
||||
newTab = true;
|
||||
}
|
||||
@@ -659,7 +659,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
aTab._endRemoveArgs = [closeWindow, newTab];
|
||||
|
||||
// swapBrowsersAndCloseOther will take care of closing the window without animation.
|
||||
@@ -5784,13 +5956,7 @@
|
||||
@@ -5856,13 +6028,7 @@
|
||||
aTab._mouseleave();
|
||||
|
||||
if (newTab) {
|
||||
@@ -674,7 +674,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} else {
|
||||
TabBarVisibility.update();
|
||||
}
|
||||
@@ -5923,6 +6089,7 @@
|
||||
@@ -5995,6 +6161,7 @@
|
||||
this.tabs[i]._tPos = i;
|
||||
}
|
||||
|
||||
@@ -682,7 +682,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (!this._windowIsClosing) {
|
||||
// update tab close buttons state
|
||||
this.tabContainer._updateCloseButtons();
|
||||
@@ -6153,6 +6320,7 @@
|
||||
@@ -6225,6 +6392,7 @@
|
||||
}
|
||||
|
||||
let excludeTabs = new Set(aExcludeTabs);
|
||||
@@ -690,7 +690,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
// If this tab has a successor, it should be selectable, since
|
||||
// hiding or closing a tab removes that tab as a successor.
|
||||
@@ -6165,15 +6333,22 @@
|
||||
@@ -6237,15 +6405,22 @@
|
||||
!excludeTabs.has(aTab.owner) &&
|
||||
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
|
||||
) {
|
||||
@@ -715,7 +715,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let tab = this.tabContainer.findNextTab(aTab, {
|
||||
direction: 1,
|
||||
filter: _tab => remainingTabs.includes(_tab),
|
||||
@@ -6187,7 +6362,7 @@
|
||||
@@ -6259,7 +6434,7 @@
|
||||
}
|
||||
|
||||
if (tab) {
|
||||
@@ -724,7 +724,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
// If no qualifying visible tab was found, see if there is a tab in
|
||||
@@ -6208,7 +6383,7 @@
|
||||
@@ -6280,7 +6455,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
@@ -733,7 +733,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
_blurTab(aTab) {
|
||||
@@ -6219,7 +6394,7 @@
|
||||
@@ -6291,7 +6466,7 @@
|
||||
* @returns {boolean}
|
||||
* False if swapping isn't permitted, true otherwise.
|
||||
*/
|
||||
@@ -742,7 +742,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// Do not allow transfering a private tab to a non-private window
|
||||
// and vice versa.
|
||||
if (
|
||||
@@ -6273,6 +6448,7 @@
|
||||
@@ -6345,6 +6520,7 @@
|
||||
// fire the beforeunload event in the process. Close the other
|
||||
// window if this was its last tab.
|
||||
if (
|
||||
@@ -750,7 +750,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
!remoteBrowser._beginRemoveTab(aOtherTab, {
|
||||
adoptedByTab: aOurTab,
|
||||
closeWindowWithLastTab: true,
|
||||
@@ -6284,7 +6460,7 @@
|
||||
@@ -6356,7 +6532,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.
|
||||
@@ -759,7 +759,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (closeWindow) {
|
||||
let win = aOtherTab.ownerGlobal;
|
||||
win.windowUtils.suppressAnimation(true);
|
||||
@@ -6412,11 +6588,13 @@
|
||||
@@ -6484,11 +6660,13 @@
|
||||
}
|
||||
|
||||
// Finish tearing down the tab that's going away.
|
||||
@@ -773,7 +773,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
this.setTabTitle(aOurTab);
|
||||
|
||||
@@ -6618,10 +6796,10 @@
|
||||
@@ -6690,10 +6868,10 @@
|
||||
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
|
||||
}
|
||||
|
||||
@@ -786,7 +786,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
aTab.selected ||
|
||||
aTab.closing ||
|
||||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
|
||||
@@ -6681,7 +6859,8 @@
|
||||
@@ -6753,7 +6931,8 @@
|
||||
* @param {object} [aOptions={}]
|
||||
* Key-value pairs that will be serialized into the features string.
|
||||
*/
|
||||
@@ -796,7 +796,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
if (this.tabs.length == 1) {
|
||||
return null;
|
||||
}
|
||||
@@ -6698,7 +6877,7 @@
|
||||
@@ -6770,7 +6949,7 @@
|
||||
// tell a new window to take the "dropped" tab
|
||||
let args = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
|
||||
args.appendElement(aTab.splitview ?? aTab);
|
||||
@@ -805,7 +805,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
private: PrivateBrowsingUtils.isWindowPrivate(window),
|
||||
features: Object.entries(aOptions)
|
||||
.map(([key, value]) => `${key}=${value}`)
|
||||
@@ -6706,6 +6885,8 @@
|
||||
@@ -6778,6 +6957,8 @@
|
||||
openerWindow: window,
|
||||
args,
|
||||
});
|
||||
@@ -814,7 +814,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6818,7 +6999,7 @@
|
||||
@@ -6890,7 +7071,7 @@
|
||||
* `true` if element is a `<tab-group>`
|
||||
*/
|
||||
isTabGroup(element) {
|
||||
@@ -823,7 +823,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6903,8 +7084,8 @@
|
||||
@@ -6975,8 +7156,8 @@
|
||||
}
|
||||
|
||||
// Don't allow mixing pinned and unpinned tabs.
|
||||
@@ -834,7 +834,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} else {
|
||||
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
|
||||
}
|
||||
@@ -6933,13 +7114,19 @@
|
||||
@@ -7005,13 +7186,19 @@
|
||||
this.#handleTabMove(
|
||||
element,
|
||||
() => {
|
||||
@@ -856,7 +856,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
let useAfter = false;
|
||||
if (this.isTab(element)) {
|
||||
useAfter = neighbor && tabIndex > element._tPos;
|
||||
@@ -7004,23 +7191,31 @@
|
||||
@@ -7076,23 +7263,31 @@
|
||||
#moveTabNextTo(element, targetElement, moveBefore = false, metricsContext) {
|
||||
if (this.isTabGroupLabel(targetElement)) {
|
||||
targetElement = targetElement.group;
|
||||
@@ -894,7 +894,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
} 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
|
||||
@@ -7033,12 +7228,35 @@
|
||||
@@ -7105,12 +7300,35 @@
|
||||
// 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.
|
||||
@@ -931,7 +931,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
// We want to include the splitview wrapper if it's the targetElement, but
|
||||
// not in the case where we want to reverse tabs within the same splitview.
|
||||
@@ -7047,6 +7265,7 @@
|
||||
@@ -7119,6 +7337,7 @@
|
||||
}
|
||||
|
||||
let getContainer = () =>
|
||||
@@ -939,7 +939,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
element.pinned
|
||||
? this.tabContainer.pinnedTabsContainer
|
||||
: this.tabContainer;
|
||||
@@ -7055,11 +7274,15 @@
|
||||
@@ -7127,11 +7346,15 @@
|
||||
element,
|
||||
() => {
|
||||
if (moveBefore) {
|
||||
@@ -956,7 +956,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
},
|
||||
metricsContext
|
||||
@@ -7133,10 +7356,10 @@
|
||||
@@ -7205,10 +7428,10 @@
|
||||
* @param {TabMetricsContext} [metricsContext]
|
||||
*/
|
||||
moveTabToExistingGroup(aTab, aGroup, metricsContext) {
|
||||
@@ -969,7 +969,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
return;
|
||||
}
|
||||
if (aTab.group && aTab.group.id === aGroup.id) {
|
||||
@@ -7209,6 +7432,7 @@
|
||||
@@ -7281,6 +7504,7 @@
|
||||
|
||||
let state = {
|
||||
tabIndex: tab._tPos,
|
||||
@@ -977,7 +977,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
};
|
||||
if (tab.visible) {
|
||||
state.elementIndex = tab.elementIndex;
|
||||
@@ -7240,7 +7464,7 @@
|
||||
@@ -7312,7 +7536,7 @@
|
||||
let changedSplitView =
|
||||
previousTabState.splitViewId != currentTabState.splitViewId;
|
||||
|
||||
@@ -986,7 +986,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
tab.dispatchEvent(
|
||||
new CustomEvent("TabMove", {
|
||||
bubbles: true,
|
||||
@@ -7281,6 +7505,10 @@
|
||||
@@ -7354,6 +7578,10 @@
|
||||
|
||||
moveActionCallback();
|
||||
|
||||
@@ -997,7 +997,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// Clear tabs cache after moving nodes because the order of tabs may have
|
||||
// changed.
|
||||
this.tabContainer._invalidateCachedTabs();
|
||||
@@ -7331,7 +7559,22 @@
|
||||
@@ -7404,7 +7632,22 @@
|
||||
* @returns {object}
|
||||
* The new tab in the current window, null if the tab couldn't be adopted.
|
||||
*/
|
||||
@@ -1021,7 +1021,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
// 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
|
||||
@@ -7374,6 +7617,8 @@
|
||||
@@ -7447,6 +7690,8 @@
|
||||
}
|
||||
params.skipLoad = true;
|
||||
let newTab = this.addWebTab("about:blank", params);
|
||||
@@ -1030,7 +1030,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
aTab.container.tabDragAndDrop.finishAnimateTabMove();
|
||||
|
||||
@@ -8076,7 +8321,7 @@
|
||||
@@ -8149,7 +8394,7 @@
|
||||
// preventDefault(). It will still raise the window if appropriate.
|
||||
return;
|
||||
}
|
||||
@@ -1039,7 +1039,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
window.focus();
|
||||
aEvent.preventDefault();
|
||||
}
|
||||
@@ -8093,7 +8338,6 @@
|
||||
@@ -8166,7 +8411,6 @@
|
||||
|
||||
on_TabGroupCollapse(aEvent) {
|
||||
aEvent.target.tabs.forEach(tab => {
|
||||
@@ -1047,7 +1047,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
});
|
||||
}
|
||||
|
||||
@@ -8427,7 +8671,9 @@
|
||||
@@ -8500,7 +8744,9 @@
|
||||
|
||||
let filter = this._tabFilters.get(tab);
|
||||
if (filter) {
|
||||
@@ -1057,7 +1057,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
|
||||
let listener = this._tabListeners.get(tab);
|
||||
if (listener) {
|
||||
@@ -9233,6 +9479,7 @@
|
||||
@@ -9306,6 +9552,7 @@
|
||||
aWebProgress.isTopLevel
|
||||
) {
|
||||
this.mTab.setAttribute("busy", "true");
|
||||
@@ -1065,7 +1065,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
gBrowser._tabAttrModified(this.mTab, ["busy"]);
|
||||
this.mTab._notselectedsinceload = !this.mTab.selected;
|
||||
}
|
||||
@@ -9313,6 +9560,7 @@
|
||||
@@ -9386,6 +9633,7 @@
|
||||
// known defaults. Note we use the original URL since about:newtab
|
||||
// redirects to a prerendered page.
|
||||
const shouldRemoveFavicon =
|
||||
@@ -1073,7 +1073,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
!this.mBrowser.mIconURL &&
|
||||
!ignoreBlank &&
|
||||
!(originalLocation.spec in FAVICON_DEFAULTS);
|
||||
@@ -9487,13 +9735,6 @@
|
||||
@@ -9560,13 +9808,6 @@
|
||||
this.mBrowser.originalURI = aRequest.originalURI;
|
||||
}
|
||||
|
||||
@@ -1087,7 +1087,7 @@ index d88bc0e5570c8fd428a84fdf5af0f6bab1e2a636..e921639dac90ae3d284b922c5b8aa901
|
||||
}
|
||||
|
||||
let userContextId = this.mBrowser.getAttribute("usercontextid") || 0;
|
||||
@@ -10379,7 +10620,7 @@ var TabContextMenu = {
|
||||
@@ -10450,7 +10691,7 @@ var TabContextMenu = {
|
||||
);
|
||||
contextUnpinSelectedTabs.hidden =
|
||||
!this.contextTab.pinned || !this.multiselected;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabgroup.js b/browser/components/tabbrowser/content/tabgroup.js
|
||||
index 3ca119e8dc72fac652c98505211864483d98add2..b65307ee8df896488a4c51e3a25bf9ad9e1c8179 100644
|
||||
index 65c89aab0902cb33ad33fc523d3e0b954618778e..b42298457fdd2f8df6ff202c804122ffc999d409 100644
|
||||
--- a/browser/components/tabbrowser/content/tabgroup.js
|
||||
+++ b/browser/components/tabbrowser/content/tabgroup.js
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
|
||||
index 17a56b0e5a7f1fcdf04904586572c7f719e57904..778a4e49fad39a160d1000733a9e27b0c258d78c 100644
|
||||
index a2db42fba8d1f1d9df1dc295adb64be3f5885d50..2dd43fe4898badeaf9bc669502ead2c56982d1aa 100644
|
||||
--- a/browser/components/tabbrowser/content/tabs.js
|
||||
+++ b/browser/components/tabbrowser/content/tabs.js
|
||||
@@ -230,7 +230,7 @@
|
||||
@@ -214,7 +214,7 @@ index 17a56b0e5a7f1fcdf04904586572c7f719e57904..778a4e49fad39a160d1000733a9e27b0
|
||||
const newTab2 = this.newTabButton;
|
||||
const newTabVertical = document.getElementById(
|
||||
"vertical-tabs-newtab-button"
|
||||
@@ -1382,8 +1413,10 @@
|
||||
@@ -1386,8 +1417,10 @@
|
||||
*/
|
||||
_handleTabSelect(aInstant) {
|
||||
let selectedTab = this.selectedItem;
|
||||
@@ -225,7 +225,7 @@ index 17a56b0e5a7f1fcdf04904586572c7f719e57904..778a4e49fad39a160d1000733a9e27b0
|
||||
selectedTab._notselectedsinceload = false;
|
||||
}
|
||||
|
||||
@@ -1392,7 +1425,7 @@
|
||||
@@ -1396,7 +1429,7 @@
|
||||
* @param {boolean} [shouldScrollInstantly=false]
|
||||
*/
|
||||
#ensureTabIsVisible(tab, shouldScrollInstantly = false) {
|
||||
@@ -234,7 +234,7 @@ index 17a56b0e5a7f1fcdf04904586572c7f719e57904..778a4e49fad39a160d1000733a9e27b0
|
||||
if (arrowScrollbox?.overflowing) {
|
||||
arrowScrollbox.ensureElementIsVisible(tab, shouldScrollInstantly);
|
||||
}
|
||||
@@ -1519,7 +1552,7 @@
|
||||
@@ -1523,7 +1556,7 @@
|
||||
}
|
||||
|
||||
_notifyBackgroundTab(aTab) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
index 7751871815ac3aa4641a7752c21f625e03e34c82..418dbecd2739fb8a95ce44efb5d671ac97934f21 100644
|
||||
index da0a9c73118886d535d574810de8141cb96e54ba..104062e2c0142bd08a4498e7ca282fc46cda09be 100644
|
||||
--- a/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
|
||||
@@ -302,7 +302,6 @@ export class UrlbarController {
|
||||
@@ -304,7 +304,6 @@ export class UrlbarController {
|
||||
const isMac = AppConstants.platform == "macosx";
|
||||
// Handle readline/emacs-style navigation bindings on Mac.
|
||||
if (
|
||||
@@ -10,7 +10,7 @@ index 7751871815ac3aa4641a7752c21f625e03e34c82..418dbecd2739fb8a95ce44efb5d671ac
|
||||
this.view.isOpen &&
|
||||
event.ctrlKey &&
|
||||
(event.key == "n" || event.key == "p")
|
||||
@@ -451,6 +450,8 @@ export class UrlbarController {
|
||||
@@ -455,6 +454,8 @@ export class UrlbarController {
|
||||
});
|
||||
}
|
||||
event.preventDefault();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
index ec7b7eeee7999aba76286e84808ed09ffc6df463..12bfafdc7e34c5d6345579cd0aaf515a19d82b31 100644
|
||||
index 2d21248256c6c2bfb8dac958133c10e3251ef564..6645211ef09518b41cb737e3186fbd0162ecf700 100644
|
||||
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
|
||||
@@ -760,6 +760,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
|
||||
@@ -799,6 +799,7 @@ function makeDefaultResultGroups({ showSearchSuggestionsFirst }) {
|
||||
*/
|
||||
let rootGroup = {
|
||||
children: [
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
index d9a0566c5ad2a9ae375a23769f856aecc6efd86c..f6e5004806d24e009f96de9482e24c88590939b1 100644
|
||||
index 08455d8d5da233639ccebc0e77c0810fb4f674c3..78d0e875978b568b79646489c28b125a44ea79fa 100644
|
||||
--- a/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarProvidersManager.sys.mjs
|
||||
@@ -912,6 +912,7 @@ export class Query {
|
||||
@@ -913,6 +913,7 @@ export class Query {
|
||||
if (
|
||||
result.heuristic &&
|
||||
this.context.searchMode &&
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
index 9e9f786b6fd3441000d9cdb0b582f817b73ad814..8f86652520a433c94e34fc0e35dc8aad4a86faa2 100644
|
||||
index 64afd613f454edd7786fcc1e2f307a582e4d5f51..b4af9cc2fbddba2c5229e8ffee7b9c0c06c3e1d0 100644
|
||||
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
|
||||
@@ -84,6 +84,7 @@ export var UrlbarUtils = {
|
||||
@@ -85,6 +85,7 @@ export var UrlbarUtils = {
|
||||
RESTRICT_SEARCH_KEYWORD: "restrictSearchKeyword",
|
||||
SUGGESTED_INDEX: "suggestedIndex",
|
||||
TAIL_SUGGESTION: "tailSuggestion",
|
||||
@@ -10,7 +10,7 @@ index 9e9f786b6fd3441000d9cdb0b582f817b73ad814..8f86652520a433c94e34fc0e35dc8aad
|
||||
}),
|
||||
|
||||
// Defines provider types.
|
||||
@@ -145,6 +146,7 @@ export var UrlbarUtils = {
|
||||
@@ -146,6 +147,7 @@ export var UrlbarUtils = {
|
||||
OTHER_NETWORK: 6,
|
||||
ADDON: 7,
|
||||
ACTIONS: 8,
|
||||
@@ -18,7 +18,7 @@ index 9e9f786b6fd3441000d9cdb0b582f817b73ad814..8f86652520a433c94e34fc0e35dc8aad
|
||||
}),
|
||||
|
||||
// Per-result exposure telemetry.
|
||||
@@ -585,6 +587,8 @@ export var UrlbarUtils = {
|
||||
@@ -587,6 +589,8 @@ export var UrlbarUtils = {
|
||||
return this.RESULT_GROUP.HEURISTIC_FALLBACK;
|
||||
case "UrlbarProviderHistoryUrlHeuristic":
|
||||
return this.RESULT_GROUP.HEURISTIC_HISTORY_URL;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
index cba492223601a8aa4656d9dc60a09faeda9f2313..a40bd5d46912389ef7208c4c7b481027444400fd 100644
|
||||
index b665adb1a1ce8bbae8df4cbea6c3248c3e4fb431..7a73907957d38caba5b650749abf80a01b51559d 100644
|
||||
--- a/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
|
||||
@@ -618,7 +618,7 @@ export class UrlbarView {
|
||||
@@ -640,7 +640,7 @@ export class UrlbarView {
|
||||
!this.input.value ||
|
||||
this.input.getAttribute("pageproxystate") == "valid"
|
||||
) {
|
||||
@@ -11,7 +11,7 @@ index cba492223601a8aa4656d9dc60a09faeda9f2313..a40bd5d46912389ef7208c4c7b481027
|
||||
// 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.
|
||||
@@ -2871,6 +2871,8 @@ export class UrlbarView {
|
||||
@@ -2988,6 +2988,8 @@ export class UrlbarView {
|
||||
if (row?.hasAttribute("row-selectable")) {
|
||||
row?.toggleAttribute("selected", true);
|
||||
}
|
||||
@@ -20,7 +20,7 @@ index cba492223601a8aa4656d9dc60a09faeda9f2313..a40bd5d46912389ef7208c4c7b481027
|
||||
if (element != row) {
|
||||
row?.toggleAttribute("descendant-selected", true);
|
||||
}
|
||||
@@ -3359,7 +3361,7 @@ export class UrlbarView {
|
||||
@@ -3477,7 +3479,7 @@ export class UrlbarView {
|
||||
}
|
||||
|
||||
#enableOrDisableRowWrap() {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/components/urlbar/content/UrlbarInput.mjs b/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd387069c8da 100644
|
||||
index b23244f9d3278918b016bb3fcab19687bc2e292a..ade1f031bbb68202a37e6c9d3071a73f5c811a82 100644
|
||||
--- a/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
+++ b/browser/components/urlbar/content/UrlbarInput.mjs
|
||||
@@ -68,6 +68,13 @@ const lazy = XPCOMUtils.declareLazy({
|
||||
@@ -90,6 +90,13 @@ const lazy = XPCOMUtils.declareLazy({
|
||||
logger: () => lazy.UrlbarUtils.getLogger({ prefix: "Input" }),
|
||||
});
|
||||
|
||||
@@ -16,7 +16,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
const UNLIMITED_MAX_RESULTS = 99;
|
||||
|
||||
let getBoundsWithoutFlushing = element =>
|
||||
@@ -649,7 +656,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -708,7 +715,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 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
this._suppressPrimaryAdjustment = false;
|
||||
}
|
||||
|
||||
@@ -723,6 +739,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -782,6 +798,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
hideSearchTerms = false,
|
||||
isSameDocument = false,
|
||||
} = {}) {
|
||||
@@ -44,7 +44,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (!this.#isAddressbar) {
|
||||
throw new Error(
|
||||
"Cannot set URI for UrlbarInput that is not an address bar"
|
||||
@@ -1012,8 +1032,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -1071,8 +1091,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -62,7 +62,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1432,7 +1460,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -1496,7 +1524,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
if (!this.#providesSearchMode(result)) {
|
||||
@@ -75,7 +75,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
}
|
||||
|
||||
if (isCanonized) {
|
||||
@@ -2598,6 +2630,42 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -2696,6 +2728,42 @@ export class UrlbarInput extends HTMLElement {
|
||||
await this.#updateLayoutBreakoutDimensions();
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
startLayoutExtend() {
|
||||
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
|
||||
// Do not expand if the Urlbar does not support being expanded or it is
|
||||
@@ -2612,6 +2680,13 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -2710,6 +2778,13 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.setAttribute("breakout-extend", "true");
|
||||
|
||||
@@ -132,7 +132,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
// 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")) {
|
||||
@@ -2631,6 +2706,27 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -2729,6 +2804,27 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
this.removeAttribute("breakout-extend");
|
||||
this.#updateTextboxPosition();
|
||||
}
|
||||
@@ -2661,7 +2757,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -2759,7 +2855,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
forceUnifiedSearchButtonAvailable = false
|
||||
) {
|
||||
let prevState = this.getAttribute("pageproxystate");
|
||||
@@ -169,7 +169,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
this.setAttribute("pageproxystate", state);
|
||||
this._inputContainer.setAttribute("pageproxystate", state);
|
||||
this._identityBox?.setAttribute("pageproxystate", state);
|
||||
@@ -2915,10 +3011,12 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -3031,10 +3127,12 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
this.style.top = px(
|
||||
@@ -182,7 +182,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2977,9 +3075,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -3093,9 +3191,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
);
|
||||
this.style.setProperty(
|
||||
"--urlbar-height",
|
||||
@@ -3413,6 +3512,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -3597,6 +3696,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_toggleActionOverride(event) {
|
||||
@@ -202,7 +202,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (
|
||||
event.keyCode == KeyEvent.DOM_VK_SHIFT ||
|
||||
event.keyCode == KeyEvent.DOM_VK_ALT ||
|
||||
@@ -3516,8 +3616,8 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -3709,8 +3809,8 @@ export class UrlbarInput extends HTMLElement {
|
||||
if (!this.#isAddressbar) {
|
||||
return val;
|
||||
}
|
||||
@@ -213,7 +213,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
: val;
|
||||
// Only trim value if the directionality doesn't change to RTL and we're not
|
||||
// showing a strikeout https protocol.
|
||||
@@ -3824,6 +3924,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4006,6 +4106,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
resultDetails = null,
|
||||
browser = this.window.gBrowser.selectedBrowser
|
||||
) {
|
||||
@@ -221,7 +221,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (this.#isAddressbar) {
|
||||
this.#prepareAddressbarLoad(
|
||||
url,
|
||||
@@ -3935,6 +4036,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4117,6 +4218,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
reuseEmpty = true;
|
||||
}
|
||||
@@ -232,7 +232,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (
|
||||
where == "tab" &&
|
||||
reuseEmpty &&
|
||||
@@ -3942,6 +4047,9 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4124,6 +4229,9 @@ export class UrlbarInput extends HTMLElement {
|
||||
) {
|
||||
where = "current";
|
||||
}
|
||||
@@ -242,7 +242,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
return where;
|
||||
}
|
||||
|
||||
@@ -4196,6 +4304,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4378,6 +4486,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
this.setResultForCurrentValue(null);
|
||||
this.handleCommand();
|
||||
this.controller.clearLastQueryContextCache();
|
||||
@@ -250,7 +250,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
|
||||
this._suppressStartQuery = false;
|
||||
});
|
||||
@@ -4203,7 +4312,6 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4385,7 +4494,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.
|
||||
@@ -258,7 +258,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
|
||||
let controller =
|
||||
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
|
||||
@@ -4319,7 +4427,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4541,7 +4649,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
if (!engineName && !source && !this.hasAttribute("searchmode")) {
|
||||
return;
|
||||
}
|
||||
@@ -271,7 +271,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (this._searchModeIndicatorTitle) {
|
||||
this._searchModeIndicatorTitle.textContent = "";
|
||||
this._searchModeIndicatorTitle.removeAttribute("data-l10n-id");
|
||||
@@ -4629,6 +4741,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4851,6 +4963,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.document.l10n.setAttributes(
|
||||
this.inputField,
|
||||
@@ -279,7 +279,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
l10nId,
|
||||
l10nId == "urlbar-placeholder-with-name"
|
||||
? { name: engineName }
|
||||
@@ -4742,6 +4855,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -4964,6 +5077,11 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_on_click(event) {
|
||||
@@ -291,7 +291,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
switch (event.target) {
|
||||
case this.inputField:
|
||||
case this._inputContainer:
|
||||
@@ -4820,7 +4938,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -5042,7 +5160,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -300,7 +300,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
this.view.autoOpen({ event });
|
||||
} else {
|
||||
if (this._untrimOnFocusAfterKeydown) {
|
||||
@@ -4860,9 +4978,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -5082,9 +5200,16 @@ export class UrlbarInput extends HTMLElement {
|
||||
}
|
||||
|
||||
_on_mousedown(event) {
|
||||
@@ -318,7 +318,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
if (
|
||||
event.composedTarget != this.inputField &&
|
||||
event.composedTarget != this._inputContainer
|
||||
@@ -4872,6 +4997,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -5094,6 +5219,10 @@ export class UrlbarInput extends HTMLElement {
|
||||
|
||||
this.focusedViaMousedown = !this.focused;
|
||||
this._preventClickSelectsAll = this.focused;
|
||||
@@ -329,7 +329,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
|
||||
// Keep the focus status, since the attribute may be changed
|
||||
// upon calling this.focus().
|
||||
@@ -4907,7 +5036,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -5129,7 +5258,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.
|
||||
@@ -338,7 +338,7 @@ index 2e6e2be9d7e28c3f189131ec19a26d552d13af99..c17b4553829854340ef512dcb90bfd38
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -5235,7 +5364,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
@@ -5411,7 +5540,7 @@ export class UrlbarInput extends HTMLElement {
|
||||
// When we are in actions search mode we can show more results so
|
||||
// increase the limit.
|
||||
let maxResults =
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
|
||||
index 8bb36697cca3761dc98d8be9d8ee954fdff3ce3d..bd40d251eeeff2b61fdd1d2170947d071b8f0872 100644
|
||||
index daf4e1dca839a6e882edf598bd82f13f1bf4eadd..ebb584e058c0a15f5a5fa0bd80bdce42636c9ba0 100644
|
||||
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
|
||||
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
|
||||
@@ -289,7 +289,7 @@ export const PREFS_CONFIG = new Map([
|
||||
@@ -287,7 +287,7 @@ export const PREFS_CONFIG = new Map([
|
||||
"showSponsoredTopSites",
|
||||
{
|
||||
title: "Show sponsored top sites",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/installer/windows/nsis/installer.nsi b/browser/installer/windows/nsis/installer.nsi
|
||||
index f752555d18b0c6c7325cc99e73a85819fc015f5c..2416d2a79ca358ab901103d9546bc3d0454333eb 100755
|
||||
index b3459f8233b2509744e27bfe33884c6a92164e36..76b71e0882381f8f6becaf88bc4e3cc56f8d8ad4 100755
|
||||
--- a/browser/installer/windows/nsis/installer.nsi
|
||||
+++ b/browser/installer/windows/nsis/installer.nsi
|
||||
@@ -842,7 +842,7 @@ Section "-InstallEndCleanup"
|
||||
@@ -11,7 +11,7 @@ index f752555d18b0c6c7325cc99e73a85819fc015f5c..2416d2a79ca358ab901103d9546bc3d0
|
||||
${EndIf}
|
||||
SectionEnd
|
||||
|
||||
@@ -1984,5 +1984,5 @@ FunctionEnd
|
||||
@@ -1978,5 +1978,5 @@ FunctionEnd
|
||||
|
||||
Function .onGUIEnd
|
||||
${OnEndCommon}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
|
||||
index dfb3e2c843d748e46c0f5878c9d06cebacffb603..4805a0bed7e60713218530c1b03f0f5dd65fe3af 100644
|
||||
index b82fa7229ad637a08563c06fa2c2abdf99998d7c..b5ee3aa9679244222a0e9eed4be54a41ec6a11f9 100644
|
||||
--- a/browser/themes/linux/browser.css
|
||||
+++ b/browser/themes/linux/browser.css
|
||||
@@ -14,7 +14,6 @@
|
||||
@@ -10,30 +10,12 @@ index dfb3e2c843d748e46c0f5878c9d06cebacffb603..4805a0bed7e60713218530c1b03f0f5d
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,7 +57,8 @@
|
||||
-moz-default-appearance: -moz-window-decorations;
|
||||
@@ -59,6 +58,8 @@
|
||||
appearance: auto;
|
||||
|
||||
- #navigator-toolbox,
|
||||
body,
|
||||
+ #zen-main-app-wrapper,
|
||||
+ #zen-browser-background,
|
||||
dialog::backdrop {
|
||||
border-top-left-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
border-top-right-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
@@ -66,13 +66,11 @@
|
||||
|
||||
/* stylelint-disable-next-line media-query-no-invalid */
|
||||
@media -moz-pref("widget.gtk.rounded-bottom-corners.enabled") {
|
||||
- #navigator-toolbox {
|
||||
- /* The body clip below covers this. */
|
||||
- border-radius: 0;
|
||||
- }
|
||||
|
||||
body,
|
||||
- dialog::backdrop {
|
||||
+ dialog::backdrop,
|
||||
+ #zen-main-app-wrapper,
|
||||
+ #zen-browser-background {
|
||||
/* Use an uniform clip to allow WebRender to optimize it better */
|
||||
border-radius: env(-moz-gtk-csd-titlebar-radius);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
diff --git a/browser/themes/shared/browser-shared.css b/browser/themes/shared/browser-shared.css
|
||||
index 4e7ca6259c92da2c45c6ea3157863b971fbd6201..15da124b3e10da664bc0ba3a63cd02b33e31337c 100644
|
||||
index d1b11a65e527cf7c13f42b3f980f2f09592c5e53..44fb86b570c69f7d7003d3949e330e08722fbbb8 100644
|
||||
--- a/browser/themes/shared/browser-shared.css
|
||||
+++ b/browser/themes/shared/browser-shared.css
|
||||
@@ -155,8 +155,6 @@ body {
|
||||
*/
|
||||
&.fullscreen-with-menubar {
|
||||
z-index: var(--browser-area-z-index-toolbox-while-animating);
|
||||
- box-shadow: var(--content-area-shadow);
|
||||
- border-bottom-color: var(--chrome-content-separator-color);
|
||||
}
|
||||
|
||||
/* Themes define a set of toolbox foreground and background colors which we
|
||||
@@ -265,13 +263,13 @@ body {
|
||||
@@ -250,13 +250,13 @@ body {
|
||||
|
||||
@media (-moz-platform: macos) and (not (-moz-mac-rtl)) {
|
||||
&:-moz-locale-dir(ltr) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
|
||||
index 94de6f280e709161a54a65ffb621256b4e4e86fa..a882ce63c47e7757a9cd3b5bda7da792c5c3b616 100644
|
||||
index 3a12a7a33c33cec463b3d38647bdf647827784f8..4844da4b56b3172b333f5c5eb31fcd74f43fd0b0 100644
|
||||
--- a/browser/themes/shared/jar.inc.mn
|
||||
+++ b/browser/themes/shared/jar.inc.mn
|
||||
@@ -331,3 +331,5 @@
|
||||
@@ -334,3 +334,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)
|
||||
|
||||
@@ -10,10 +10,6 @@
|
||||
--in-content-box-background: var(--zen-colors-tertiary) !important;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
padding-top: 60px !important;
|
||||
}
|
||||
|
||||
.pane-container {
|
||||
margin: auto;
|
||||
}
|
||||
@@ -38,10 +34,6 @@ html|dialog {
|
||||
animation: dialogPopin 0.2s ease-out;
|
||||
}
|
||||
|
||||
.sticky-inner-container {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.subcategory {
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/browser/themes/shared/tabbrowser/content-area.css b/browser/themes/shared/tabbrowser/content-area.css
|
||||
index f01e484caadedbd7094a09c93dbd6f578261f24b..84e682e52f38c41fdaad1aea2f9468ce7040cc9d 100644
|
||||
index 13403bf438be18b5bcc9f3d497c94636b5fb5f6f..0505582a7efa212813cf39835c12d34d4d38eb4e 100644
|
||||
--- a/browser/themes/shared/tabbrowser/content-area.css
|
||||
+++ b/browser/themes/shared/tabbrowser/content-area.css
|
||||
@@ -89,7 +89,6 @@
|
||||
@@ -85,7 +85,6 @@
|
||||
min-height: 0;
|
||||
|
||||
/* We want to be able to show the frame color behind the clipped radiused corner */
|
||||
@@ -10,7 +10,7 @@ index f01e484caadedbd7094a09c93dbd6f578261f24b..84e682e52f38c41fdaad1aea2f9468ce
|
||||
|
||||
/* stylelint-disable-next-line media-query-no-invalid */
|
||||
@media -moz-pref("sidebar.revamp") {
|
||||
@@ -145,7 +144,6 @@
|
||||
@@ -141,7 +140,6 @@
|
||||
}
|
||||
|
||||
browser:is([blank], [pendingpaint]) {
|
||||
@@ -18,7 +18,7 @@ index f01e484caadedbd7094a09c93dbd6f578261f24b..84e682e52f38c41fdaad1aea2f9468ce
|
||||
}
|
||||
|
||||
/* Exclude browsers with smartwindow-content attribute which inherit
|
||||
@@ -431,7 +429,7 @@ split-view-footer {
|
||||
@@ -427,7 +425,7 @@ split-view-footer {
|
||||
|
||||
.dialogStack {
|
||||
z-index: var(--browser-stack-z-index-dialog-stack);
|
||||
@@ -27,7 +27,7 @@ index f01e484caadedbd7094a09c93dbd6f578261f24b..84e682e52f38c41fdaad1aea2f9468ce
|
||||
inset: 0;
|
||||
/* --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 */
|
||||
@@ -598,7 +596,7 @@ split-view-footer {
|
||||
@@ -594,7 +592,7 @@ split-view-footer {
|
||||
|
||||
.dialogOverlay[topmost="true"],
|
||||
#window-modal-dialog::backdrop {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/shared/tabbrowser/ctrlTab.css b/browser/themes/shared/tabbrowser/ctrlTab.css
|
||||
index 6a7d295bfaed7f0429a8ff5ac9b8a2db4ee911e3..d1a3a8d44bc06102adaef294dc72f8f404be17dc 100644
|
||||
index d016bb363f306d7f6b08554f5029d425c01ca358..0f8e4d0a1aa2f9958124ea75423f83eb6ef35afe 100644
|
||||
--- a/browser/themes/shared/tabbrowser/ctrlTab.css
|
||||
+++ b/browser/themes/shared/tabbrowser/ctrlTab.css
|
||||
@@ -11,6 +11,7 @@
|
||||
@@ -7,6 +7,6 @@ index 6a7d295bfaed7f0429a8ff5ac9b8a2db4ee911e3..d1a3a8d44bc06102adaef294dc72f8f4
|
||||
--panel-padding: 20px 10px 10px;
|
||||
-moz-window-shadow: none;
|
||||
+ --panel-shadow-margin: 0;
|
||||
background-color: transparent;
|
||||
@media not (-moz-platform: macos) {
|
||||
font-weight: var(--font-weight-bold);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
|
||||
index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f26200143299425 100644
|
||||
index 203b546933842f4b0134188fda020c4db4dcd0d2..011bcfb023d0cabd55dfa7e49d3409383217e2ca 100644
|
||||
--- a/browser/themes/shared/tabbrowser/tabs.css
|
||||
+++ b/browser/themes/shared/tabbrowser/tabs.css
|
||||
@@ -24,7 +24,7 @@
|
||||
@@ -79,7 +79,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
&[soundplaying] {
|
||||
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
|
||||
}
|
||||
@@ -668,7 +660,7 @@ tab-split-view-wrapper[dragtarget] {
|
||||
@@ -666,7 +658,7 @@ tab-split-view-wrapper[dragtarget] {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
&[crashed] {
|
||||
display: revert;
|
||||
}
|
||||
@@ -835,7 +827,7 @@ tab-split-view-wrapper[dragtarget] {
|
||||
@@ -832,7 +824,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,16 +97,16 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
&:is([soundplaying], [muted], [activemedia-blocked]) {
|
||||
display: flex;
|
||||
}
|
||||
@@ -1562,7 +1554,7 @@ tab-group {
|
||||
@@ -1614,7 +1606,7 @@ tab-group {
|
||||
}
|
||||
|
||||
#tabbrowser-tabs[orient="vertical"][expanded] {
|
||||
- tab-group > :is(.tab-group-label-container, .tabbrowser-tab),
|
||||
+ tab-group > :is(.tab-group-label-container, .tab-group-container, .tabbrowser-tab),
|
||||
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) .tabbrowser-tab:is(:active, [multiselected]) {
|
||||
&[movingtab][movingtab-addToGroup]:not([movingtab-group], [movingtab-ungroup]) tab-group > .tabbrowser-tab:is(:active, [multiselected]) {
|
||||
margin-inline-start: var(--space-medium);
|
||||
}
|
||||
@@ -2057,7 +2049,7 @@ tab-group {
|
||||
@@ -2089,7 +2081,7 @@ tab-group {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
#vertical-tabs-newtab-button {
|
||||
appearance: none;
|
||||
min-height: var(--tab-min-height);
|
||||
@@ -2068,7 +2060,7 @@ tab-group {
|
||||
@@ -2100,7 +2092,7 @@ tab-group {
|
||||
margin-inline: var(--tab-inner-inline-margin);
|
||||
|
||||
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
|
||||
@@ -124,7 +124,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
}
|
||||
|
||||
&:hover {
|
||||
@@ -2092,7 +2084,7 @@ tab-group {
|
||||
@@ -2124,7 +2116,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 fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
margin-block: var(--tab-block-margin);
|
||||
}
|
||||
|
||||
@@ -2280,7 +2272,6 @@ tab-group {
|
||||
@@ -2312,7 +2304,6 @@ tab-group {
|
||||
|
||||
&:not([expanded]) {
|
||||
.tabbrowser-tab[pinned] {
|
||||
@@ -141,7 +141,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
}
|
||||
|
||||
.tab-background {
|
||||
@@ -2320,8 +2311,8 @@ tab-group {
|
||||
@@ -2352,8 +2343,8 @@ tab-group {
|
||||
display: block;
|
||||
position: absolute;
|
||||
inset: auto;
|
||||
@@ -152,7 +152,7 @@ index fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
|
||||
&:-moz-window-inactive {
|
||||
background-image:
|
||||
@@ -2406,9 +2397,6 @@ tab-group {
|
||||
@@ -2438,9 +2429,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 fc1e0870696fb5866663cdab0fc96faff0d5a3f8..2430d7afd4761c66cd5ad05a7f262001
|
||||
}
|
||||
|
||||
:root[privatebrowsingmode] :is(#firefox-view-button, #menu_openFirefoxView) {
|
||||
@@ -2440,7 +2428,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
|
||||
@@ -2472,7 +2460,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
|
||||
list-style-image: url(chrome://global/skin/icons/plus.svg);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/shared/toolbarbuttons.css b/browser/themes/shared/toolbarbuttons.css
|
||||
index 08e7ff0d00f2f41b0ca253a6a895d5111d65668e..9b24e9f386edb881b95de75776e46a4d5e40c4cd 100644
|
||||
index 8c02df47ca003fa5094de0e7802cd8c10ef1bf2a..a16e8d7d3a00af8df648946950b7bb1c3f30efbb 100644
|
||||
--- a/browser/themes/shared/toolbarbuttons.css
|
||||
+++ b/browser/themes/shared/toolbarbuttons.css
|
||||
@@ -13,20 +13,6 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css
|
||||
index cbbf55f31ae5e456401172f79ddbbe41256025a4..dc471dfe30dedf7c4917322a5b2257a9ec9c4f90 100644
|
||||
index 0ee35cfe67c9bce37a844d4b7d9715d4fb50f709..5cdb8037e49a68ea4126af349690af8a16b5e59b 100644
|
||||
--- a/browser/themes/shared/urlbar-searchbar.css
|
||||
+++ b/browser/themes/shared/urlbar-searchbar.css
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/shared/urlbarView.css b/browser/themes/shared/urlbarView.css
|
||||
index 212f3dc956df418b838e568d0b0fed5c1e848914..0dea37660e44ed5f000638eddf2770ebce049a43 100644
|
||||
index 2d6a63328642969e23da0a41ca6c7bb23eb96e8e..3060ba3f52ae7ab2f8fc36ff546d358724909b3e 100644
|
||||
--- a/browser/themes/shared/urlbarView.css
|
||||
+++ b/browser/themes/shared/urlbarView.css
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css
|
||||
index a0ffa8cac5a4d7ec220e7ee5dd7d70dba81e9026..766d69d1a2c41f3de7de9b05ef096fcccaa5c2a0 100644
|
||||
index eca9fcfb453c6cf41c0a24f2775ad7bcf4678153..b7b609138a12695ff90663a707a7d985f9efb81a 100644
|
||||
--- a/browser/themes/windows/browser.css
|
||||
+++ b/browser/themes/windows/browser.css
|
||||
@@ -41,7 +41,6 @@
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/build/moz.build b/build/moz.build
|
||||
index 720fb1235f418fb063e88d8bbcd2eb444e84870b..ed831a4d35e006bc03aa514a6c00968a4dd19624 100644
|
||||
index 238caa7801292926db83b0ad4791b0400d30cba5..87bd7c541cdce8562ce6999e0b59fb5698348699 100644
|
||||
--- a/build/moz.build
|
||||
+++ b/build/moz.build
|
||||
@@ -93,7 +93,7 @@ if CONFIG["MOZ_APP_BASENAME"]:
|
||||
@@ -91,7 +91,7 @@ if CONFIG["MOZ_APP_BASENAME"]:
|
||||
if CONFIG[var]:
|
||||
appini_defines[var] = True
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure
|
||||
index 165541b79842672d8bac48722220532f3913556d..6781b84b9c06ff26a41a0e7d8be5a958600fda62 100644
|
||||
index df2b0bf0081edfdc2c7bccaefc780d2b0c6555ff..8619fc5fbf284c7a5660d5b7a77494404e448e44 100644
|
||||
--- a/build/moz.configure/lto-pgo.configure
|
||||
+++ b/build/moz.configure/lto-pgo.configure
|
||||
@@ -258,7 +258,6 @@ option(
|
||||
@@ -256,7 +256,6 @@ option(
|
||||
help="Indicate that ld64 is free of symbol aliasing bugs",
|
||||
)
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/build/moz.configure/update-programs.configure b/build/moz.configure/update-programs.configure
|
||||
index d87fd6dd35b1211a7ef8f64c2e2af18b91dc1f43..e6691d50e6b2ee05828a25b2dc3cb71895ff6bd7 100644
|
||||
index 4edcccf4c49749e6d80ee75c1e43cfa32a555933..9c7c69c97740e5c02766f913d40bd4f059940d3a 100644
|
||||
--- a/build/moz.configure/update-programs.configure
|
||||
+++ b/build/moz.configure/update-programs.configure
|
||||
@@ -73,7 +73,7 @@ def mac_prod_requirements_string(identifier):
|
||||
@@ -71,7 +71,7 @@ def mac_prod_requirements_string(identifier):
|
||||
f'identifier "{identifier}" and anchor apple generic and '
|
||||
"certificate 1[field.1.2.840.113635.100.6.2.6] and "
|
||||
"certificate leaf[field.1.2.840.113635.100.6.1.13] and "
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
|
||||
index faf15719a0537d7c5fc0a62afb93fa4a61605bf7..68d114fd6651b7c210aa1a58e6fcf4fa749f53b1 100755
|
||||
index b11171e3ef14b1f2c4a279b10d83eb4dadde45ca..fdf7c2d5ad6352bdd8f2ea20ee80c0927daa2ba2 100755
|
||||
--- a/build/pgo/profileserver.py
|
||||
+++ b/build/pgo/profileserver.py
|
||||
@@ -17,7 +17,13 @@ from mozprofile import FirefoxProfile, Preferences
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp
|
||||
index 6789b3d1d8ba3477c30da8b8dff54a659206c37f..a13b07368c8ea1b7510d55ac9e3dcae50f226158 100644
|
||||
index 76f707e5f1e8e20a6acec9a445781377c052ba59..4f8f14deace21ff56157b77c15bcb93e1792e354 100644
|
||||
--- a/docshell/base/nsAboutRedirector.cpp
|
||||
+++ b/docshell/base/nsAboutRedirector.cpp
|
||||
@@ -117,7 +117,7 @@ static const RedirEntry kRedirMap[] = {
|
||||
@@ -115,7 +115,7 @@ static const RedirEntry kRedirMap[] = {
|
||||
{"crashes", "chrome://global/content/crashes.html",
|
||||
nsIAboutModule::IS_SECURE_CHROME_UI},
|
||||
#endif
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp
|
||||
index 2876a539b21c038340d318d8f0d29da88c518686..1f6bbf828b86dc509f63c7c3d0032f1d4d551d9c 100644
|
||||
index 178078c084aad367f0e5d50e50f981ded24ae43e..e551dc7677e43c8ab179babdcbc6dd05aa962727 100644
|
||||
--- a/dom/base/Document.cpp
|
||||
+++ b/dom/base/Document.cpp
|
||||
@@ -464,6 +464,7 @@
|
||||
@@ -463,6 +463,7 @@
|
||||
#include "prtime.h"
|
||||
#include "prtypes.h"
|
||||
#include "xpcpublic.h"
|
||||
@@ -10,7 +10,7 @@ index 2876a539b21c038340d318d8f0d29da88c518686..1f6bbf828b86dc509f63c7c3d0032f1d
|
||||
|
||||
// clang-format off
|
||||
#include "mozilla/Encoding.h"
|
||||
@@ -3317,6 +3318,10 @@ void Document::FillStyleSetUserAndUASheets() {
|
||||
@@ -3279,6 +3280,10 @@ void Document::FillStyleSetUserAndUASheets() {
|
||||
for (StyleSheet* sheet : *sheetService->UserStyleSheets()) {
|
||||
styleSet.AppendStyleSheet(*sheet);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
diff --git a/dom/chrome-webidl/MediaController.webidl b/dom/chrome-webidl/MediaController.webidl
|
||||
index 2df28da9620f8564edb3e77184c674a95941e022..4e2a126766999543422d3a90c66c629f46b58bda 100644
|
||||
index eea39e9f70b1ba216dc5131bc3aa8b6ef46ca5ea..fd24ad430aeb64c4d622b3765af359579a903c40 100644
|
||||
--- a/dom/chrome-webidl/MediaController.webidl
|
||||
+++ b/dom/chrome-webidl/MediaController.webidl
|
||||
@@ -20,6 +20,12 @@ enum MediaControlKey {
|
||||
"stop",
|
||||
@@ -23,6 +23,12 @@ enum MediaControlKey {
|
||||
"setvolume",
|
||||
};
|
||||
|
||||
+dictionary MediaControllerPositionState {
|
||||
@@ -15,7 +15,7 @@ index 2df28da9620f8564edb3e77184c674a95941e022..4e2a126766999543422d3a90c66c629f
|
||||
/**
|
||||
* MediaController is used to control media playback for a tab, and each tab
|
||||
* would only have one media controller, which can be accessed from the
|
||||
@@ -33,10 +39,14 @@ interface MediaController : EventTarget {
|
||||
@@ -36,10 +42,14 @@ interface MediaController : EventTarget {
|
||||
readonly attribute boolean isPlaying;
|
||||
readonly attribute boolean isAnyMediaBeingControlled;
|
||||
readonly attribute MediaSessionPlaybackState playbackState;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/dom/media/mediacontrol/MediaController.cpp b/dom/media/mediacontrol/MediaController.cpp
|
||||
index 51369c404f10d6c83e83c4284efc6c19a08961a0..3d5c2e48187d59fba0dde348894da4dc03a66eee 100644
|
||||
index f28ec5e406bfeefd624c9538878d423e99b0df6a..afb60df8ddec86c0c83584b8325add8d1c373d0e 100644
|
||||
--- a/dom/media/mediacontrol/MediaController.cpp
|
||||
+++ b/dom/media/mediacontrol/MediaController.cpp
|
||||
@@ -51,6 +51,25 @@ void MediaController::GetSupportedKeys(
|
||||
@@ -49,6 +49,25 @@ void MediaController::GetSupportedKeys(
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ index 51369c404f10d6c83e83c4284efc6c19a08961a0..3d5c2e48187d59fba0dde348894da4dc
|
||||
void MediaController::GetMetadata(MediaMetadataInit& aMetadata,
|
||||
ErrorResult& aRv) {
|
||||
if (!IsActive() || mShutdown) {
|
||||
@@ -412,6 +431,7 @@ void MediaController::SetIsInPictureInPictureMode(
|
||||
@@ -435,6 +454,7 @@ void MediaController::SetIsInPictureInPictureMode(
|
||||
ForceToBecomeMainControllerIfNeeded();
|
||||
UpdateDeactivationTimerIfNeeded();
|
||||
mPictureInPictureModeChangedEvent.Notify(mIsInPictureInPictureMode);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/dom/media/mediacontrol/MediaController.h b/dom/media/mediacontrol/MediaController.h
|
||||
index 327ea6201304b3d26a2b4f0267b1c926c73ee9e4..ad14bb2572c29df4897672e14afc185b9b517da4 100644
|
||||
index ea05df396bcaa8f5e236105585c0a177496c8bd9..e064f279383004bdbdb030ecb23289a893c11a8c 100644
|
||||
--- a/dom/media/mediacontrol/MediaController.h
|
||||
+++ b/dom/media/mediacontrol/MediaController.h
|
||||
@@ -90,6 +90,7 @@ class MediaController final : public DOMEventTargetHelper,
|
||||
@@ -91,6 +91,7 @@ class MediaController final : public DOMEventTargetHelper,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
void GetSupportedKeys(nsTArray<MediaControlKey>& aRetVal) const;
|
||||
void GetMetadata(MediaMetadataInit& aMetadata, ErrorResult& aRv);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/dom/media/mediaelement/HTMLMediaElement.cpp b/dom/media/mediaelement/HTMLMediaElement.cpp
|
||||
index b5b932e421894f33e1397149dcc580f891329cbc..ffc3fb68e01a0c11a3ebbbd7793e682d8dc6be47 100644
|
||||
index df8c9441463e8c08e3f3d21a194df850bd418b67..3fd83aff3a7cc2ff6b9c889c5126befa99a91436 100644
|
||||
--- a/dom/media/mediaelement/HTMLMediaElement.cpp
|
||||
+++ b/dom/media/mediaelement/HTMLMediaElement.cpp
|
||||
@@ -451,6 +451,7 @@ class HTMLMediaElement::MediaControlKeyListener final
|
||||
@@ -449,6 +449,7 @@ class HTMLMediaElement::MediaControlKeyListener final
|
||||
// audible state. Therefore, in that case we would noitfy the audible state
|
||||
// when media starts playing.
|
||||
if (mState == MediaPlaybackState::ePlayed) {
|
||||
@@ -10,7 +10,7 @@ index b5b932e421894f33e1397149dcc580f891329cbc..ffc3fb68e01a0c11a3ebbbd7793e682d
|
||||
NotifyAudibleStateChanged(mIsOwnerAudible
|
||||
? MediaAudibleState::eAudible
|
||||
: MediaAudibleState::eInaudible);
|
||||
@@ -7392,6 +7393,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) {
|
||||
@@ -7444,6 +7445,9 @@ void HTMLMediaElement::FireTimeUpdate(TimeupdateType aType) {
|
||||
QueueTask(std::move(runner));
|
||||
mQueueTimeUpdateRunnerTime = TimeStamp::Now();
|
||||
mLastCurrentTime = CurrentTime();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/eslint-file-globals.config.mjs b/eslint-file-globals.config.mjs
|
||||
index 4f07a1bf0e0845fc955601167d011cbac8d73801..d1bda7e60d4d807226153a98198150005b69abe0 100644
|
||||
index c17a96adb86eff46c8dafc5cbef83eb10b5fbeeb..4d00012889a846fabfd9172fb05459318e4b4746 100644
|
||||
--- a/eslint-file-globals.config.mjs
|
||||
+++ b/eslint-file-globals.config.mjs
|
||||
@@ -22,6 +22,7 @@
|
||||
@@ -10,7 +10,7 @@ index 4f07a1bf0e0845fc955601167d011cbac8d73801..d1bda7e60d4d807226153a9819815000
|
||||
|
||||
export default [
|
||||
{
|
||||
@@ -553,4 +554,9 @@ export default [
|
||||
@@ -549,4 +550,9 @@ export default [
|
||||
],
|
||||
languageOptions: { globals: globals.worker },
|
||||
},
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
diff --git a/eslint-ignores.config.mjs b/eslint-ignores.config.mjs
|
||||
index 0cfd7e02ad58c331f48f1ba8e1588777e1ce2595..888674b5ed2b68dbe77eb177ba0947f94ed57c80 100644
|
||||
index bfb30a0a35af081a2496a05fd78d9efea15ee37f..04fee66309192b3e38986ae09e77ec7a4e1ad83b 100644
|
||||
--- a/eslint-ignores.config.mjs
|
||||
+++ b/eslint-ignores.config.mjs
|
||||
@@ -312,4 +312,8 @@ export default [
|
||||
// Test files for circular import in modules.
|
||||
"dom/base/test/jsmodules/import_circular.mjs",
|
||||
@@ -314,4 +314,8 @@ export default [
|
||||
"dom/base/test/jsmodules/import_circular_1.mjs",
|
||||
"dom/base/test/jsmodules/importmaps/multiple/import_circular.mjs",
|
||||
"dom/base/test/jsmodules/importmaps/multiple/import_circular_1.mjs",
|
||||
+
|
||||
+ "zen/common/emojis/ZenEmojisData.min.mjs",
|
||||
+ "zen/tests/**",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/eslint-test-paths.config.mjs b/eslint-test-paths.config.mjs
|
||||
index 53d97521a676d04212abb0263cb166da06c889e0..fa8c261de7a8663a369fb41671476d314722c025 100644
|
||||
index 7a87fec812ea8ddea5c10dca53af560e7dc6385b..2b943b031ebd30e06e2aa1043aed13c11bd10db1 100644
|
||||
--- a/eslint-test-paths.config.mjs
|
||||
+++ b/eslint-test-paths.config.mjs
|
||||
@@ -218,6 +218,7 @@ const extraBrowserTestPaths = [
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
diff --git a/gfx/wr/webrender/src/clip.rs b/gfx/wr/webrender/src/clip.rs
|
||||
--- a/gfx/wr/webrender/src/clip.rs
|
||||
+++ b/gfx/wr/webrender/src/clip.rs
|
||||
@@ -97,11 +97,11 @@
|
||||
use api::units::*;
|
||||
use crate::image_tiling::{self, Repetition};
|
||||
use crate::border::{ensure_no_corner_overlap, BorderRadiusAu};
|
||||
use crate::box_shadow::{BLUR_SAMPLE_SCALE, BoxShadowClipSource, BoxShadowCacheKey};
|
||||
use crate::renderer::GpuBufferBuilderF;
|
||||
-use crate::spatial_tree::{SpatialTree, SpatialNodeIndex};
|
||||
+use crate::spatial_tree::{SceneSpatialTree, SpatialTree, SpatialNodeIndex};
|
||||
use crate::ellipse::Ellipse;
|
||||
use crate::gpu_types::{BoxShadowStretchMode};
|
||||
use crate::intern;
|
||||
use crate::internal_types::{FastHashMap, FastHashSet, LayoutPrimitiveInfo};
|
||||
use crate::prim_store::{VisibleMaskImageTile};
|
||||
@@ -745,10 +745,56 @@
|
||||
) -> bool {
|
||||
let clip_chain_index = self.clip_chain_map[&clip_chain_id];
|
||||
self.has_complex_clips_impl(clip_chain_index, interners)
|
||||
}
|
||||
|
||||
+ /// Check if all complex clips in a clip chain are fixed-position rounded
|
||||
+ /// rectangles (in Clip mode). When true, the intermediate surface for a
|
||||
+ /// root-level stacking context can be skipped because the clips will be
|
||||
+ /// promoted to compositor clips on the tile cache slices.
|
||||
+ pub fn clip_chain_complex_clips_are_promotable(
|
||||
+ &self,
|
||||
+ clip_chain_id: ClipChainId,
|
||||
+ interners: &Interners,
|
||||
+ spatial_tree: &SceneSpatialTree,
|
||||
+ ) -> bool {
|
||||
+ let clip_chain_index = self.clip_chain_map[&clip_chain_id];
|
||||
+ self.complex_clips_are_promotable_impl(clip_chain_index, interners, spatial_tree)
|
||||
+ }
|
||||
+
|
||||
+ fn complex_clips_are_promotable_impl(
|
||||
+ &self,
|
||||
+ clip_chain_index: usize,
|
||||
+ interners: &Interners,
|
||||
+ spatial_tree: &SceneSpatialTree,
|
||||
+ ) -> bool {
|
||||
+ let mut index = clip_chain_index;
|
||||
+
|
||||
+ loop {
|
||||
+ let clip_chain = &self.clip_chains[index];
|
||||
+
|
||||
+ for clip_entry in &clip_chain.clips {
|
||||
+ let clip_info = &interners.clip[clip_entry.handle];
|
||||
+
|
||||
+ match clip_info.key.kind {
|
||||
+ ClipItemKeyKind::Rectangle(_, ClipMode::Clip) => {}
|
||||
+ ClipItemKeyKind::RoundedRectangle(_, _, ClipMode::Clip) => {
|
||||
+ if !spatial_tree.is_root_coord_system(clip_entry.spatial_node_index) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ _ => return false,
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ match clip_chain.parent {
|
||||
+ Some(parent) => index = parent,
|
||||
+ None => return true,
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/// Check if a clip-node has complex (non-rectangular) clips
|
||||
pub fn clip_node_has_complex_clips(
|
||||
&self,
|
||||
clip_node_id: ClipNodeId,
|
||||
interners: &Interners,
|
||||
diff --git a/gfx/wr/webrender/src/scene_building.rs b/gfx/wr/webrender/src/scene_building.rs
|
||||
--- a/gfx/wr/webrender/src/scene_building.rs
|
||||
+++ b/gfx/wr/webrender/src/scene_building.rs
|
||||
@@ -2369,11 +2369,26 @@
|
||||
|
||||
// If this stacking context has any complex clips, we need to draw it
|
||||
// to an off-screen surface.
|
||||
if let Some(clip_chain_id) = clip_chain_id {
|
||||
if self.clip_tree_builder.clip_chain_has_complex_clips(clip_chain_id, &self.interners) {
|
||||
- blit_reason |= BlitReason::CLIP;
|
||||
+ // At the root level, if all complex clips are fixed-position
|
||||
+ // rounded rectangles, we can skip the intermediate surface.
|
||||
+ // The clips will be promoted to compositor clips on the tile
|
||||
+ // cache slices, which applies them once to the composited
|
||||
+ // surface — equivalent to the intermediate surface approach.
|
||||
+ // This allows tile cache barriers to fire normally, enabling
|
||||
+ // proper picture caching with multiple slices.
|
||||
+ if !self.sc_stack.is_empty() ||
|
||||
+ !self.clip_tree_builder.clip_chain_complex_clips_are_promotable(
|
||||
+ clip_chain_id,
|
||||
+ &self.interners,
|
||||
+ &self.spatial_tree,
|
||||
+ )
|
||||
+ {
|
||||
+ blit_reason |= BlitReason::CLIP;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
// Check if we know this stacking context is redundant (doesn't need a surface)
|
||||
// The check for blend-container redundancy is more involved so it's handled below.
|
||||
@@ -1,441 +0,0 @@
|
||||
diff --git a/build/pgo/index.html b/build/pgo/index.html
|
||||
--- a/build/pgo/index.html
|
||||
+++ b/build/pgo/index.html
|
||||
@@ -3,11 +3,50 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/* global Quitter */
|
||||
|
||||
- var list = [
|
||||
+ var defaultTimeout = 2 * 1000;
|
||||
+ var extendedTimeout = 2 * 60 * 1000;
|
||||
+ var superExtendedTimeout = 5 * 60 * 1000;
|
||||
+ var hasExtendedCorpus =
|
||||
+ new URLSearchParams(location.search).get("extendedCorpus") == "true";
|
||||
+
|
||||
+ function waitTimeout(time) {
|
||||
+ return new Promise(resolve => {
|
||||
+ window.setTimeout(() => {
|
||||
+ resolve();
|
||||
+ }, time);
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * An item in the PGO training corpus
|
||||
+ */
|
||||
+ class Item {
|
||||
+ url;
|
||||
+ timeout;
|
||||
+
|
||||
+ constructor(url, timeout = defaultTimeout) {
|
||||
+ this.url = url;
|
||||
+ this.timeout = timeout;
|
||||
+ }
|
||||
+
|
||||
+ async run() {
|
||||
+ var subWindow = window.open(this.url);
|
||||
+
|
||||
+ // Prevent the perf-reftest-singletons from calling alert()
|
||||
+ subWindow.tpRecordTime = function () {};
|
||||
+
|
||||
+ // Wait until the timeout is finished
|
||||
+ await waitTimeout(this.timeout);
|
||||
+
|
||||
+ subWindow.close();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ var defaultItemUrls = [
|
||||
"blueprint/elements.html",
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/sample.html",
|
||||
"js-input/3d-thingy.html",
|
||||
@@ -72,42 +111,46 @@
|
||||
"talos/tests/perf-reftest-singletons/style-sharing.html",
|
||||
"talos/tests/perf-reftest-singletons/svg-text-textLength-1.html",
|
||||
"talos/tests/perf-reftest-singletons/svg-text-getExtentOfChar-1.html",
|
||||
"talos/tests/perf-reftest-singletons/tiny-traversal-singleton.html",
|
||||
"talos/tests/perf-reftest-singletons/window-named-property-get.html",
|
||||
- "webkit/PerformanceTests/Speedometer/index.html",
|
||||
- "http://localhost:8000/index.html?startAutomatically=true",
|
||||
- "webkit/PerformanceTests/webaudio/index.html?raptor&rendering-buffer-length=30",
|
||||
];
|
||||
- var defaultInterval = 2000;
|
||||
- var idx = 0;
|
||||
- var w;
|
||||
|
||||
- window.onload = function () {
|
||||
- w = window.open("about:blank");
|
||||
- window.setTimeout(loadURL, defaultInterval);
|
||||
- };
|
||||
- function loadURL() {
|
||||
- var interval = defaultInterval;
|
||||
- var testURL = list[idx++];
|
||||
- if (testURL.includes("webkit") || testURL.includes("localhost")) {
|
||||
- interval = 120000;
|
||||
- }
|
||||
- w.close();
|
||||
- w = window.open(testURL);
|
||||
- // Prevent the perf-reftest-singletons from calling alert()
|
||||
- w.tpRecordTime = function () {};
|
||||
+ // Start with items with the default timeout
|
||||
+ var items = defaultItemUrls.map(x => new Item(x));
|
||||
|
||||
- if (idx < list.length) {
|
||||
- window.setTimeout(loadURL, interval);
|
||||
- } else {
|
||||
- window.setTimeout(Quitter.quit, interval);
|
||||
- }
|
||||
+ // Add items that needs longer timeouts
|
||||
+ items.push(
|
||||
+ new Item("webkit/PerformanceTests/Speedometer/index.html", extendedTimeout),
|
||||
+ new Item(
|
||||
+ "http://localhost:8000/index.html?startAutomatically=true",
|
||||
+ extendedTimeout
|
||||
+ ),
|
||||
+ new Item(
|
||||
+ "webkit/PerformanceTests/webaudio/index.html?raptor&rendering-buffer-length=30",
|
||||
+ extendedTimeout
|
||||
+ )
|
||||
+ );
|
||||
+
|
||||
+ // Add optional items if there is a 'pgo-extended-corpus' provided
|
||||
+ if (hasExtendedCorpus) {
|
||||
+ items.push(
|
||||
+ new Item(
|
||||
+ "http://localhost:8001/index.html?startAutomatically=true&testIterationCount=3&worstCaseCount=1",
|
||||
+ superExtendedTimeout
|
||||
+ )
|
||||
+ );
|
||||
}
|
||||
- var i;
|
||||
|
||||
- for (i = 0; i < list.length; i++) {
|
||||
+ window.onload = async function () {
|
||||
+ for (let item of items) {
|
||||
+ await item.run();
|
||||
+ }
|
||||
+ Quitter.quit();
|
||||
+ };
|
||||
+
|
||||
+ for (let item of items) {
|
||||
// eslint-disable-next-line no-unsanitized/method
|
||||
- document.write(list[i]);
|
||||
+ document.write(item.url);
|
||||
document.write("<br>");
|
||||
}
|
||||
</script>
|
||||
diff --git a/build/pgo/profileserver.py b/build/pgo/profileserver.py
|
||||
--- a/build/pgo/profileserver.py
|
||||
+++ b/build/pgo/profileserver.py
|
||||
@@ -56,12 +56,33 @@
|
||||
test_name=name,
|
||||
)
|
||||
return rc
|
||||
|
||||
|
||||
+class ProfileServerCLI(CLI):
|
||||
+ def __init__(self, args=sys.argv[1:]):
|
||||
+ CLI.__init__(self, args=args)
|
||||
+
|
||||
+ def add_options(self, parser):
|
||||
+ CLI.add_options(self, parser)
|
||||
+
|
||||
+ # add profileserver options
|
||||
+ parser.add_option(
|
||||
+ "-e",
|
||||
+ "--extended-corpus",
|
||||
+ dest="extended_corpus_dir",
|
||||
+ help="Directory of the optional extended corpus.",
|
||||
+ metavar=None,
|
||||
+ default=None,
|
||||
+ )
|
||||
+
|
||||
+ def extended_corpus_dir(self):
|
||||
+ return self.options.extended_corpus_dir
|
||||
+
|
||||
+
|
||||
if __name__ == "__main__":
|
||||
- cli = CLI()
|
||||
+ cli = ProfileServerCLI()
|
||||
debug_args, interactive = cli.debugger_arguments()
|
||||
runner_args = cli.runner_args()
|
||||
|
||||
build = MozbuildObject.from_environment()
|
||||
|
||||
@@ -72,29 +93,51 @@
|
||||
except BinaryNotFoundException as e:
|
||||
print(f"{e}\n\n{e.help()}\n")
|
||||
sys.exit(1)
|
||||
binary = os.path.normpath(os.path.abspath(binary))
|
||||
|
||||
+ extended_corpus_dir = cli.extended_corpus_dir()
|
||||
+ has_extended_corpus = extended_corpus_dir is not None
|
||||
+
|
||||
path_mappings = {
|
||||
k: os.path.join(build.topsrcdir, v) for k, v in PATH_MAPPINGS.items()
|
||||
}
|
||||
httpd = MozHttpd(
|
||||
port=PORT,
|
||||
docroot=os.path.join(build.topsrcdir, "build", "pgo"),
|
||||
path_mappings=path_mappings,
|
||||
)
|
||||
httpd.start(block=False)
|
||||
|
||||
+ # Speedometer3 must run in its own server. The benchmark assumes that it
|
||||
+ # is in a root path, and will fail if it's not.
|
||||
sp3_httpd = MozHttpd(
|
||||
port=8000,
|
||||
docroot=os.path.join(
|
||||
build.topsrcdir, "third_party", "webkit", "PerformanceTests", "Speedometer3"
|
||||
),
|
||||
path_mappings=path_mappings,
|
||||
)
|
||||
sp3_httpd.start(block=False)
|
||||
print("started SP3 server on port 8000")
|
||||
+
|
||||
+ if has_extended_corpus:
|
||||
+ js3_dir = os.path.join(extended_corpus_dir, "JetStream")
|
||||
+
|
||||
+ if not os.path.exists(js3_dir):
|
||||
+ print(f"Error: JetStream directory does not exist at {js3_dir}")
|
||||
+ sys.exit(1)
|
||||
+
|
||||
+ # JetStream3 must run in its own server. The benchmark assumes that it
|
||||
+ # is in a root path, and will fail if it's not.
|
||||
+ js3_httpd = MozHttpd(
|
||||
+ port=8001,
|
||||
+ docroot=js3_dir,
|
||||
+ )
|
||||
+ js3_httpd.start(block=False)
|
||||
+ print("started JS3 server on port 8001")
|
||||
+
|
||||
locations = ServerLocations()
|
||||
locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
|
||||
|
||||
old_profraw_files = glob.glob("*.profraw")
|
||||
for f in old_profraw_files:
|
||||
@@ -167,10 +210,12 @@
|
||||
if logfile:
|
||||
print("Firefox output (%s):" % logfile)
|
||||
with open(logfile) as f:
|
||||
print(f.read())
|
||||
sp3_httpd.stop()
|
||||
+ if has_extended_corpus:
|
||||
+ js3_httpd.stop()
|
||||
httpd.stop()
|
||||
get_crashreports(profilePath, name="Profile initialization")
|
||||
sys.exit(ret)
|
||||
|
||||
jarlog = os.getenv("JARLOG_FILE")
|
||||
@@ -182,21 +227,26 @@
|
||||
|
||||
if "UPLOAD_PATH" in env:
|
||||
process_args["logfile"] = os.path.join(
|
||||
env["UPLOAD_PATH"], "profile-run-2.log"
|
||||
)
|
||||
- cmdargs = ["http://localhost:%d/index.html" % PORT]
|
||||
+ cmdargs = [
|
||||
+ "http://localhost:%d/index.html?extendedCorpus=%s"
|
||||
+ % (PORT, str(has_extended_corpus).lower())
|
||||
+ ]
|
||||
runner = FirefoxRunner(
|
||||
profile=profile,
|
||||
binary=binary,
|
||||
cmdargs=cmdargs,
|
||||
env=env,
|
||||
process_args=process_args,
|
||||
)
|
||||
runner.start(debug_args=debug_args, interactive=interactive)
|
||||
ret = runner.wait()
|
||||
sp3_httpd.stop()
|
||||
+ if has_extended_corpus:
|
||||
+ js3_httpd.stop()
|
||||
httpd.stop()
|
||||
if ret:
|
||||
print("Firefox exited with code %d during profiling" % ret)
|
||||
logfile = process_args.get("logfile")
|
||||
if logfile:
|
||||
diff --git a/python/mozbuild/mozbuild/build_commands.py b/python/mozbuild/mozbuild/build_commands.py
|
||||
--- a/python/mozbuild/mozbuild/build_commands.py
|
||||
+++ b/python/mozbuild/mozbuild/build_commands.py
|
||||
@@ -10,10 +10,11 @@
|
||||
|
||||
import mozpack.path as mozpath
|
||||
from mach.decorators import Command, CommandArgument
|
||||
|
||||
from mozbuild.backend import backends
|
||||
+from mozbuild.bootstrap import bootstrap_toolchain
|
||||
from mozbuild.mozconfig import MozconfigLoader
|
||||
from mozbuild.util import (
|
||||
MOZBUILD_METRICS_PATH,
|
||||
ensure_l10n_central,
|
||||
get_latest_file,
|
||||
@@ -275,10 +276,21 @@
|
||||
raise Exception("Cannot specify targets (%s) in MOZ_PGO=1 builds" % what)
|
||||
instr = command_context._spawn(BuildDriver)
|
||||
orig_topobjdir = instr._topobjdir
|
||||
instr._topobjdir = mozpath.join(instr._topobjdir, "instrumented")
|
||||
|
||||
+ # Allow opt-in of using the pgo-extended-corpus
|
||||
+ use_extended_corpus = (
|
||||
+ configure_args and "MOZ_PGO_EXTENDED_CORPUS=1" in configure_args
|
||||
+ )
|
||||
+
|
||||
+ # Get the location of the pgo-extended-corpus, if we are using it
|
||||
+ if use_extended_corpus:
|
||||
+ pgo_extended_corpus = bootstrap_toolchain("pgo-extended-corpus")
|
||||
+ if not pgo_extended_corpus:
|
||||
+ raise Exception("Cannot find pgo-extended-corpus.")
|
||||
+
|
||||
append_env = {"MOZ_PROFILE_GENERATE": "1"}
|
||||
status = instr.build(
|
||||
command_context.metrics,
|
||||
what=what,
|
||||
jobs=jobs,
|
||||
@@ -312,10 +324,13 @@
|
||||
pgo_env["JARLOG_FILE"] = mozpath.join(orig_topobjdir, "jarlog/en-US.log")
|
||||
pgo_cmd = [
|
||||
command_context.virtualenv_manager.python_path,
|
||||
mozpath.join(command_context.topsrcdir, "build/pgo/profileserver.py"),
|
||||
]
|
||||
+ if use_extended_corpus:
|
||||
+ pgo_cmd.extend(["--extended-corpus", str(pgo_extended_corpus)])
|
||||
+
|
||||
subprocess.check_call(pgo_cmd, cwd=instr.topobjdir, env=pgo_env)
|
||||
|
||||
# Set the default build to MOZ_PROFILE_USE
|
||||
append_env = {"MOZ_PROFILE_USE": "1"}
|
||||
|
||||
diff --git a/taskcluster/kinds/fetch/benchmarks.yml b/taskcluster/kinds/fetch/benchmarks.yml
|
||||
--- a/taskcluster/kinds/fetch/benchmarks.yml
|
||||
+++ b/taskcluster/kinds/fetch/benchmarks.yml
|
||||
@@ -15,5 +15,22 @@
|
||||
fetch:
|
||||
type: static-url
|
||||
url: https://github.com/mozilla/perf-automation/releases/download/V1/web-tooling-benchmark-b2ac25c897c9.zip
|
||||
sha256: 93b0b51df0cec3ca9bfa0bdf81d782306dcf18532e39b3ff3180409125daaff1
|
||||
size: 5444135
|
||||
+
|
||||
+# A collection of benchmarks for use in PGO profiling runs. Currently it is
|
||||
+# just JetStream3.
|
||||
+#
|
||||
+# Keep this in sync with the version used in performance testing by updating:
|
||||
+# 1. `testing/raptor/raptor/tests/benchmarks/jetstream3-desktop.toml`
|
||||
+# 2. `testing/raptor/raptor/tests/benchmarks/jetstream3-mobile.toml`
|
||||
+pgo-extended-corpus:
|
||||
+ description: JetStream3 benchmark suite
|
||||
+ fetch:
|
||||
+ type: static-url
|
||||
+ url: https://github.com/WebKit/JetStream/archive/a3f5c45465f5271bed385321a0587bd4202682d6.tar.gz
|
||||
+ sha256: 0af66b94bfbc2eb67cbe6c30bbafd13d7789f8f8623d308783194934601b5fdd
|
||||
+ size: 194426956
|
||||
+ artifact-name: pgo-extended-corpus.tar.zst
|
||||
+ strip-components: 1
|
||||
+ add-prefix: pgo-extended-corpus/JetStream/
|
||||
diff --git a/taskcluster/kinds/generate-profile/kind.yml b/taskcluster/kinds/generate-profile/kind.yml
|
||||
--- a/taskcluster/kinds/generate-profile/kind.yml
|
||||
+++ b/taskcluster/kinds/generate-profile/kind.yml
|
||||
@@ -3,10 +3,11 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
---
|
||||
loader: taskgraph.loader.transform:loader
|
||||
|
||||
kind-dependencies:
|
||||
+ - fetch
|
||||
- toolchain
|
||||
- instrumented-build
|
||||
|
||||
transforms:
|
||||
- gecko_taskgraph.transforms.build_attrs:transforms
|
||||
@@ -22,10 +23,13 @@
|
||||
treeherder:
|
||||
symbol: Bpgo(run)
|
||||
kind: build
|
||||
tier: 1
|
||||
use-python: default
|
||||
+ fetches:
|
||||
+ fetch:
|
||||
+ - pgo-extended-corpus
|
||||
|
||||
tasks:
|
||||
linux64-shippable/opt:
|
||||
description: "Linux64 Profile Generation"
|
||||
shipping-phase: build
|
||||
diff --git a/taskcluster/scripts/misc/run-profileserver-macos.sh b/taskcluster/scripts/misc/run-profileserver-macos.sh
|
||||
--- a/taskcluster/scripts/misc/run-profileserver-macos.sh
|
||||
+++ b/taskcluster/scripts/misc/run-profileserver-macos.sh
|
||||
@@ -13,8 +13,8 @@
|
||||
export LLVM_PROFDATA=$MOZ_FETCHES_DIR/clang/bin/llvm-profdata
|
||||
|
||||
set -v
|
||||
|
||||
./mach python python/mozbuild/mozbuild/action/install.py $MOZ_FETCHES_DIR/target.dmg $MOZ_FETCHES_DIR
|
||||
-./mach python build/pgo/profileserver.py --binary $MOZ_FETCHES_DIR/*.app/Contents/MacOS/firefox
|
||||
+./mach python build/pgo/profileserver.py --binary $MOZ_FETCHES_DIR/*.app/Contents/MacOS/firefox --extended-corpus $MOZ_FETCHES_DIR/pgo-extended-corpus/
|
||||
|
||||
tar -Jcvf $UPLOAD_PATH/profdata.tar.xz merged.profdata en-US.log
|
||||
diff --git a/taskcluster/scripts/misc/run-profileserver.sh b/taskcluster/scripts/misc/run-profileserver.sh
|
||||
--- a/taskcluster/scripts/misc/run-profileserver.sh
|
||||
+++ b/taskcluster/scripts/misc/run-profileserver.sh
|
||||
@@ -35,8 +35,8 @@
|
||||
# Move our fetched firefox into objdir/dist so the jarlog entries will match
|
||||
# the paths when the final PGO stage packages the build.
|
||||
mkdir -p $PGO_RUNDIR
|
||||
mkdir -p $UPLOAD_PATH
|
||||
mv $MOZ_FETCHES_DIR/firefox $PGO_RUNDIR
|
||||
-./mach python build/pgo/profileserver.py --binary $PGO_RUNDIR/firefox/firefox
|
||||
+./mach python build/pgo/profileserver.py --binary $PGO_RUNDIR/firefox/firefox --extended-corpus $MOZ_FETCHES_DIR/pgo-extended-corpus/
|
||||
|
||||
tar -acvf $UPLOAD_PATH/profdata.tar.xz merged.profdata en-US.log
|
||||
diff --git a/testing/mozharness/scripts/android_emulator_pgo.py b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
--- a/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
+++ b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
@@ -22,10 +22,11 @@
|
||||
from mozharness.mozilla.testing.testbase import TestingMixin, testing_config_options
|
||||
|
||||
PAGES = [
|
||||
"js-input/webkit/PerformanceTests/Speedometer/index.html",
|
||||
"js-input/webkit/PerformanceTests/Speedometer3/index.html?startAutomatically=true",
|
||||
+ # TODO: Add support for the pgo-extended-corpus to get JetStream3 running here.
|
||||
"blueprint/sample.html",
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/elements.html",
|
||||
"js-input/3d-thingy.html",
|
||||
diff --git a/testing/raptor/raptor/tests/benchmarks/jetstream3-desktop.toml b/testing/raptor/raptor/tests/benchmarks/jetstream3-desktop.toml
|
||||
--- a/testing/raptor/raptor/tests/benchmarks/jetstream3-desktop.toml
|
||||
+++ b/testing/raptor/raptor/tests/benchmarks/jetstream3-desktop.toml
|
||||
@@ -14,10 +14,12 @@
|
||||
test_url = "http://<host>:<port>/"
|
||||
type = "benchmark"
|
||||
unit = "score"
|
||||
support_class = "jetstream3.py"
|
||||
repository = "https://github.com/webkit/jetstream"
|
||||
+# Keep this in sync with the version used in PGO instrumentation by updating
|
||||
+# `taskcluster/kinds/fetch/benchmarks.yml`.
|
||||
repository_revision = "a3f5c45465f5271bed385321a0587bd4202682d6"
|
||||
test_script = "jetstream3.js"
|
||||
|
||||
["jetstream3"]
|
||||
suite_name = "JetStream3.0"
|
||||
diff --git a/testing/raptor/raptor/tests/benchmarks/jetstream3-mobile.toml b/testing/raptor/raptor/tests/benchmarks/jetstream3-mobile.toml
|
||||
--- a/testing/raptor/raptor/tests/benchmarks/jetstream3-mobile.toml
|
||||
+++ b/testing/raptor/raptor/tests/benchmarks/jetstream3-mobile.toml
|
||||
@@ -19,10 +19,12 @@
|
||||
test_url = "http://<host>:<port>/"
|
||||
type = "benchmark"
|
||||
unit = "score"
|
||||
support_class = "jetstream3.py"
|
||||
repository = "https://github.com/webkit/jetstream"
|
||||
+# Keep this in sync with the version used in PGO instrumentation by updating
|
||||
+# `taskcluster/kinds/fetch/benchmarks.yml`.
|
||||
repository_revision = "a3f5c45465f5271bed385321a0587bd4202682d6"
|
||||
test_script = "jetstream3.js"
|
||||
|
||||
["jetstream3"]
|
||||
suite_name = "JetStream3.0"
|
||||
|
||||
@@ -1,409 +0,0 @@
|
||||
diff --git a/build/pgo/index.html b/build/pgo/index.html
|
||||
--- a/build/pgo/index.html
|
||||
+++ b/build/pgo/index.html
|
||||
@@ -10,10 +10,11 @@
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/sample.html",
|
||||
"js-input/3d-thingy.html",
|
||||
"js-input/crypto-otp.html",
|
||||
+ "js-input/normalizer_bench.html",
|
||||
"js-input/sunspider/3d-cube.html",
|
||||
"js-input/sunspider/3d-morph.html",
|
||||
"js-input/sunspider/3d-raytrace.html",
|
||||
"js-input/sunspider/access-binary-trees.html",
|
||||
"js-input/sunspider/access-fannkuch.html",
|
||||
diff --git a/build/pgo/js-input/normalizer_bench.html b/build/pgo/js-input/normalizer_bench.html
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/build/pgo/js-input/normalizer_bench.html
|
||||
@@ -0,0 +1,358 @@
|
||||
+<!DOCTYPE html>
|
||||
+<html>
|
||||
+<meta charset="utf-8">
|
||||
+<!--
|
||||
+
|
||||
+The test language content came from
|
||||
+https://github.com/unicode-org/test-corpora/blob/799a249ec67b37e6e884b95c38287793e731fcb0/gutenberg/Carroll-11/out/google/txt/LANG/8860606395858576540_11-h-1.htm.txt
|
||||
+where LANG is the language code.
|
||||
+
|
||||
+The test content is the third paragraph of the first chapter of Alice's Adventures in Wonderland by Lewis Carroll from Project Gutenberg machine translated by Google.
|
||||
+
|
||||
+The content came with the following license:
|
||||
+
|
||||
+UNICODE LICENSE V3
|
||||
+
|
||||
+COPYRIGHT AND PERMISSION NOTICE
|
||||
+
|
||||
+Copyright © 2023-2024 Unicode, Inc.
|
||||
+
|
||||
+NOTICE TO USER: Carefully read the following legal agreement. BY
|
||||
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
||||
+SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
||||
+TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
|
||||
+DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
|
||||
+
|
||||
+Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+copy of data files and any associated documentation (the "Data Files") or
|
||||
+software and any associated documentation (the "Software") to deal in the
|
||||
+Data Files or Software without restriction, including without limitation
|
||||
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
||||
+copies of the Data Files or Software, and to permit persons to whom the
|
||||
+Data Files or Software are furnished to do so, provided that either (a)
|
||||
+this copyright and permission notice appear with all copies of the Data
|
||||
+Files or Software, or (b) this copyright and permission notice appear in
|
||||
+associated Documentation.
|
||||
+
|
||||
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
+THIRD PARTY RIGHTS.
|
||||
+
|
||||
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
|
||||
+BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
|
||||
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
|
||||
+FILES OR SOFTWARE.
|
||||
+
|
||||
+Except as contained in this notice, the name of a copyright holder shall
|
||||
+not be used in advertising or otherwise to promote the sale, use or other
|
||||
+dealings in these Data Files or Software without prior written
|
||||
+authorization of the copyright holder.
|
||||
+
|
||||
+SPDX-License-Identifier: Unicode-3.0
|
||||
+
|
||||
+
|
||||
+
|
||||
+(End UNICODE LICENSE V3)
|
||||
+
|
||||
+
|
||||
+
|
||||
+The following applies to parts of this file other than the test language content:
|
||||
+
|
||||
+Any copyright is dedicated to the Public Domain.
|
||||
+http://creativecommons.org/publicdomain/zero/1.0/
|
||||
+
|
||||
+-->
|
||||
+<title>Normalizer bench</title>
|
||||
+<body>
|
||||
+<h1>Normalizer Bench</h1>
|
||||
+<dl>
|
||||
+ <dt>S</dt>
|
||||
+ <dd>Short: NFD fits in 32 UTF-16 code units. French and German are adjusted to take a substring that contains a non-ASCII character. (Long input contains the same information in each language instead of having a fixed UTF-16 length.)</dd>
|
||||
+ <dt>L</dt>
|
||||
+ <dd>Latin1.</dd>
|
||||
+ <dt>U</dt>
|
||||
+ <dd>Forced UTF-16 form for Latin1 languages. (One non-Latin1 character added to the string.)</dd>
|
||||
+ <dt>W</dt>
|
||||
+ <dd>Forced write: In the UTF-16 case, a singleton is prepended to force the normalizer to start writing from the start. In the Latin1 case, a character with a compatibility decomposition is prepended, since there are no singletons in Latin1. This means the effect is seen only in the K forms.</dd>
|
||||
+ <dt>C</dt>
|
||||
+ <dd>Forced copy: In the UTF-16 case, a singleton is appended to force the normalizer to make a copy even when normalizing from NFC to a C form or from NFD to a D form. In the Latin1 case, a character with a compatibility decomposition is appended, since there are no singletons in Latin1. This means the effect is seen only in the K form corresponding to the input C or D form.</dd>
|
||||
+</dl>
|
||||
+
|
||||
+<p>Bench not started.</p>
|
||||
+
|
||||
+<table>
|
||||
+<thead><tr><th>Input</th><th>NFC</th><th>NFKC</th><th>NFD</th><th>NFKD</th></tr></thead>
|
||||
+<tbody><tr><td colspan="5">Bench not run.</td></tr></tbody>
|
||||
+</table>
|
||||
+<script>
|
||||
+
|
||||
+// Inclusion is as follows:
|
||||
+//
|
||||
+// English represents ASCII
|
||||
+//
|
||||
+// Multiple high-population Latin1 languages due to competing
|
||||
+// diacritic frenquencies.
|
||||
+//
|
||||
+// Multiple Latin2 languages due to competing diacritic frenquencies.
|
||||
+//
|
||||
+// Vietnamese: Multi-diacritic Latin above the pass-through bound.
|
||||
+//
|
||||
+// Greek: Frequent-accent Latin-like non-Latin.
|
||||
+//
|
||||
+// Bengali: Combining starters
|
||||
+//
|
||||
+// Chinese: Normalization-invariant in the fast trie range.
|
||||
+//
|
||||
+// Japanese: Varies under normalization in the fast trie range.
|
||||
+//
|
||||
+// Korean: Arithmetic composition/decomposition.
|
||||
+
|
||||
+let rawData = [
|
||||
+ {
|
||||
+ lang: "en",
|
||||
+ text: "There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, \"Oh dear! Oh dear! I shall be late!\" (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "fr",
|
||||
+ text: "Il n'y avait rien de si remarquable à cela ; et Alice ne trouvait pas non plus si étrange d'entendre le Lapin se dire : « Oh là là ! Oh là là ! Je vais être en retard ! » (En y repensant plus tard, il lui vint à l'esprit qu'elle aurait dû s'en étonner, mais sur le moment tout semblait tout naturel) ; mais lorsque le Lapin sortit effectivement une montre de la poche de son gilet , la regarda et se hâta de partir, Alice se leva d'un bond, car il lui traversa l'esprit qu'elle n'avait jamais vu auparavant un lapin avec une poche de gilet ou une montre à y prendre, et, brûlante de curiosité, elle traversa le champ à sa poursuite, et heureusement, elle arriva juste à temps pour le voir sauter dans un grand terrier sous la haie.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "es",
|
||||
+ text: "No había nada de extraordinario en eso; ni a Alicia le pareció tan extraño oír al Conejo decirse a sí mismo: \"¡Ay, Dios mío! ¡Ay, Dios mío! ¡Llegaré tarde!\" (Cuando lo pensó después, se le ocurrió que debería haberse sorprendido, pero en ese momento todo le pareció bastante natural); pero cuando el Conejo sacó un reloj del bolsillo del chaleco , lo miró y luego se apresuró a seguir adelante, Alicia se puso de pie de un salto, pues recordó que nunca antes había visto un conejo con un bolsillo del chaleco ni un reloj que sacar de él, y, ardiendo de curiosidad, corrió por el campo tras él, y afortunadamente llegó justo a tiempo de verlo caer por una gran madriguera bajo el seto.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "pt",
|
||||
+ text: "Não havia nada de tão extraordinário nisso; nem Alice achou tão fora do comum ouvir o Coelho dizer para si mesmo: \"Oh, céus! Oh, céus! Vou me atrasar!\" (quando ela pensou nisso depois, ocorreu-lhe que deveria ter se perguntado sobre isso, mas na hora tudo parecia bastante natural); mas quando o Coelho realmente tirou um relógio do bolso do colete , olhou para ele e então saiu apressado, Alice se levantou, pois lhe ocorreu que nunca tinha visto um coelho com um bolso no colete ou um relógio para tirar dele, e queimando de curiosidade, ela correu pelo campo atrás dele e, felizmente, chegou bem a tempo de vê-lo pular por uma grande toca de coelho sob a cerca viva.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "de",
|
||||
+ text: "Daran war nichts besonders Bemerkenswertes; und Alice fand es auch nicht besonders ungewöhnlich, das Kaninchen zu sich selbst sagen zu hören: \"Oh je! Oh je! Ich werde zu spät kommen!\" (als sie später darüber nachdachte, kam ihr der Gedanke, dass sie sich darüber hätte wundern sollen, aber in dem Moment schien ihr alles ganz natürlich); aber als das Kaninchen tatsächlich eine Uhr aus seiner Westentasche nahm , sie ansah und dann weitereilte, sprang Alice auf, denn ihr schoss durch den Kopf, dass sie noch nie zuvor ein Kaninchen mit einer Westentasche oder einer Uhr gesehen hatte, die es herausnehmen konnte, und brennend vor Neugier rannte sie hinter ihm über das Feld her und kam glücklicherweise gerade noch rechtzeitig, um zu sehen, wie es in ein großes Kaninchenloch unter der Hecke verschwand.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "pl",
|
||||
+ text: "Nie było w tym nic aż tak niezwykłego; Alicja też nie wydało się aż tak dziwne, że usłyszała Królika mówiącego do siebie: „Ojej! Ojej! Spóźnię się!” (kiedy później o tym pomyślała, przyszło jej do głowy, że powinna była się temu dziwić, ale wtedy wydawało się to całkiem naturalne); ale kiedy Królik rzeczywiście wyjął zegarek z kieszeni kamizelki i spojrzał na niego, a potem pospieszył dalej, Alicja zerwała się na równe nogi, bo błysnęła jej myśl, że nigdy wcześniej nie widziała królika z kieszenią kamizelki lub zegarkiem, który mógłby z niej wyjąć, i płonąc ciekawością, pobiegła za nim przez pole i na szczęście zdążyła zobaczyć, jak wpada do dużej króliczej nory pod żywopłotem.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "ro",
|
||||
+ text: "Nu era nimic atât de remarcabil în asta; nici Alice nu s-a gândit atât de mult să-l audă pe Iepure spunându-și: „O, dragă! O, dragă! Voi întârzia!” (când s-a gândit după aceea, i-a trecut prin minte că ar fi trebuit să se întrebe de asta, dar la vremea aceea totul părea destul de firesc); dar când Iepurele a scos de fapt un ceas din buzunarul vestei și s-a uitat la el, apoi s-a grăbit mai departe, Alice a început să se ridice, căci îi trecu prin minte că nu mai văzuse niciodată un iepure cu buzunarul vestei sau cu un ceas de scos din el și, arzând de curiozitate, a fugit prin câmp după el, din fericire, să vadă că iepurașul a căzut într-un timp. gardul viu.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "hr",
|
||||
+ text: "U tome nije bilo ničeg tako izuzetnog ; niti je Alice mislila da je toliko neobično čuti zeca kako govori sam sebi: \"O, Bože! O, Bože! Zakasnit ću!\" (kada je kasnije razmišljala, palo joj je na pamet da se tome trebala zapitati, ali tada je sve to izgledalo sasvim prirodno); ali kad je zec zaista izvadio sat iz džepa prsluka i pogledao ga, a zatim požurio dalje, Alice je krenula na noge, jer joj je sinulo u glavi da nikada prije nije vidjela zeca ni s džepom na prsluku, ni sa satom koji bi iz njega izvadio, i izgarajući od znatiželje, potrčala je preko polja za njim, i srećom stigla je baš na vrijeme da vidi kako iskače velika zečja rupa ispod živice.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "cs",
|
||||
+ text: "Nebylo v tom nic tak pozoruhodného ; Ani Alice si nemyslela, že by to bylo tak od věci slyšet, jak si Králík říká: \"Ach miláčku! Ach drahá! Přijdu pozdě!\" (když si to potom rozmyslela, napadlo ji, že se tomu měla divit, ale v tu chvíli to všechno vypadalo docela přirozeně); ale když Králík skutečně vytáhl hodinky z kapsy vesty , podíval se na ně a pak spěchal dál, Alice se postavila na nohy, protože jí blesklo hlavou, že ještě nikdy neviděla králíka s kapsičkou ve vestě, ani s hodinkami, které by z ní vytáhla, a hořel zvědavostí, rozběhla se za nimi přes pole a on naštěstí viděl, jak to pod velkou dírou právě prasklo.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "vi",
|
||||
+ text: "Chẳng có gì quá đáng chú ý trong chuyện đó; Alice cũng chẳng thấy có gì quá khác thường khi nghe Thỏ tự nhủ: \"Ôi trời! Ôi trời! Mình sẽ bị muộn mất!\" (sau này khi nghĩ lại, cô bé thấy lẽ ra mình phải ngạc nhiên về điều này, nhưng lúc đó mọi chuyện có vẻ hoàn toàn bình thường); nhưng khi Thỏ thực sự lấy một chiếc đồng hồ ra khỏi túi áo gi-lê , nhìn đồng hồ rồi vội vã chạy đi, Alice bật dậy, vì cô chợt nghĩ rằng mình chưa bao giờ thấy một con thỏ nào có túi áo gi-lê, hay lấy đồng hồ ra khỏi túi, và vì tò mò, cô bé chạy qua cánh đồng theo sau nó, và may mắn thay là vừa kịp lúc nhìn thấy nó chui xuống một cái hang thỏ lớn dưới hàng rào.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "el",
|
||||
+ text: "Δεν υπήρχε τίποτα τόσο αξιοσημείωτο σε αυτό. Ούτε η Άλις πίστευε ότι ήταν τόσο παράξενο να ακούει το Κουνέλι να λέει στον εαυτό του: \"Ω αγάπη μου! Ω αγαπητέ! Θα αργήσω!\" (όταν το σκέφτηκε μετά, της πέρασε από το μυαλό ότι θα έπρεπε να αναρωτηθεί γι' αυτό, αλλά εκείνη τη στιγμή όλα φαινόταν αρκετά φυσιολογικά). αλλά όταν το κουνέλι έβγαλε ένα ρολόι από την τσέπη του γιλέκου του και το κοίταξε, και μετά βιάστηκε, η Αλίκη άρχισε να σηκώνεται, γιατί πέρασε από το μυαλό της ότι δεν είχε ξαναδεί κουνέλι με τσέπη γιλέκου ή ρολόι για να βγάλει από αυτό και καιγόταν από περιέργεια, έτρεξε λίγο μετά το κοίταξε στο χωράφι. κουνέλι-τρύπα κάτω από τον φράκτη.",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "bn",
|
||||
+ text: "এর মধ্যে খুব উল্লেখযোগ্য কিছু ছিল না; খরগোশ নিজেকে বলতে শুনে অ্যালিস খুব বেশি ভাবেনি, \"ওহ প্রিয়! ওহ প্রিয়! আমার দেরি হবে!\" (পরে যখন সে এটা ভেবেছিল, তখন তার মনে হয়েছিল যে এই বিষয়ে তার আশ্চর্য হওয়া উচিত ছিল, কিন্তু সেই সময়ে সবকিছুই স্বাভাবিক বলে মনে হয়েছিল); কিন্তু খরগোশটি যখন তার কোমরের পকেট থেকে একটি ঘড়ি বের করে সেটির দিকে তাকাল, এবং তারপরে তাড়াহুড়ো করে, অ্যালিস তার পায়ের দিকে যেতে শুরু করে, কারণ এটি তার মনের মধ্যে ছড়িয়ে পড়ে যে সে আগে কখনও একটি কোমর-পকেট বা ঘড়ি নিয়ে খরগোশকে দেখেনি, এবং কৌতূহলে জ্বলতে থাকে, সে ক্ষেতের দিকে ছুটে যায় এবং তা দেখার জন্য ঠিক সময় পায়ে চলে যায়। হেজের নীচে একটি বড় খরগোশের গর্ত।",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "zh",
|
||||
+ text: "这并没有什么特别之处;爱丽丝也不觉得听到兔子自言自语“哦,天哪!哦,天哪!我要迟到了!”有什么不寻常的(后来她仔细想了想,觉得她应该对此感到奇怪,但当时这一切都显得很自然);但是当兔子真的从背心口袋里掏出一块手表,看了看,然后匆匆走开时,爱丽丝跳了起来,因为她突然想到,她从来没有见过一只兔子有背心口袋,或者从里面掏出一块手表,她好奇心爆棚,追着它跑过田野,幸运的是,她正好看到它从树篱下的一个大兔子洞里钻了出来。",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "ja",
|
||||
+ text: "そこには特に驚くべきことは何もありませんでした。また、ウサギが「あらまあ!あらまあ!遅れちゃう!」と独り言を言っているのを聞いても、アリスはそれほど不自然だとは思いませんでした(あとで考えてみると、これは不思議に思うべきだったのだと気づきましたが、そのときはまったく当然のことのように思えました)。しかし、ウサギが実際にチョッキのポケットから時計を取り出し、それを見てから急いで歩き去ったとき、アリスは飛び上がりました。というのも、チョッキのポケットも、そこから取り出す時計も、ウサギを見たことがない、ということが頭をよぎったからです。好奇心に燃えて、アリスは野原を横切ってウサギを追って走りました。そして運よく、ウサギが垣根の下の大きなウサギの穴に飛び込むのを見るのにちょうど間に合いました。",
|
||||
+ },
|
||||
+ {
|
||||
+ lang: "ko",
|
||||
+ text: "영어: 그 안에는 그렇게 특별한 것이 없었다. 앨리스는 토끼가 \"아이고! 아이고! 늦겠다!\"라고 중얼거리는 것을 듣고도 그다지 이상하게 생각하지 않았다.(그녀가 나중에 생각해 보니, 그녀가 그것에 대해 궁금해해야 했지만 당시에는 모든 것이 아주 자연스러워 보였다.) 하지만 토끼가 조끼 주머니에서 시계를 꺼내 보고 서둘러 가자 앨리스는 일어섰다. 조끼 주머니나 시계를 꺼낼 토끼를 이전에 본 적이 없다는 생각이 번쩍 들었기 때문이다. 호기심에 불타는 앨리스는 들판을 가로질러 토끼를 쫓아갔고, 다행히 울타리 아래의 큰 토끼굴로 토끼가 뛰어드는 것을 볼 수 있었다.",
|
||||
+ },
|
||||
+];
|
||||
+
|
||||
+// Global variable for hopefully fooling side effect analysis.
|
||||
+let escapesScope = "";
|
||||
+
|
||||
+let data = [];
|
||||
+
|
||||
+function isAscii(s) {
|
||||
+ for (c of s) {
|
||||
+ if (c > '\u007F') {
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+function isLatin1(s) {
|
||||
+ for (c of s) {
|
||||
+ if (c > '\u00FF') {
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+function cat(a, b) {
|
||||
+ let ab = a + b;
|
||||
+ // Flatten rope
|
||||
+ escapesScope = ab.toUpperCase();
|
||||
+ return ab;
|
||||
+}
|
||||
+
|
||||
+function asArr(s) {
|
||||
+ return [s, s];
|
||||
+}
|
||||
+
|
||||
+function append(lang, text) {
|
||||
+ let nfd = text.normalize("NFD");
|
||||
+ if (isLatin1(text)) {
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_L",
|
||||
+ text: asArr(text),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_L_W",
|
||||
+ text: asArr(cat("\u00A0", text)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_L_C",
|
||||
+ text: asArr(cat(text, "\u00A0")),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_U",
|
||||
+ text: asArr(cat("\u2014", text)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_U_W",
|
||||
+ text: asArr(cat("\u2126", text)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_U_C",
|
||||
+ text: asArr(cat(text, "\u2126")),
|
||||
+ });
|
||||
+ if (nfd != text) {
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD_U",
|
||||
+ text: asArr(cat("\u2014", nfd)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD_U_W",
|
||||
+ text: asArr(cat("\u2126", nfd)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD_U_C",
|
||||
+ text: asArr(cat(nfd, "\u2126")),
|
||||
+ });
|
||||
+ }
|
||||
+ } else {
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC",
|
||||
+ text: asArr(text),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_W",
|
||||
+ text: asArr(cat("\u2126", text)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFC_C",
|
||||
+ text: asArr(cat(text, "\u2126")),
|
||||
+ });
|
||||
+ if (nfd != text) {
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD",
|
||||
+ text: asArr(nfd),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD_W",
|
||||
+ text: asArr(cat("\u2126", nfd)),
|
||||
+ });
|
||||
+ data.push({
|
||||
+ label: lang + "_NFD_C",
|
||||
+ text: asArr(cat(nfd, "\u2126")),
|
||||
+ });
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+function makeShort(s) {
|
||||
+ let wasAscii = isAscii(s);
|
||||
+ let nfd = s.normalize("NFD");
|
||||
+ for (let start = 0; start < s.length; start += 10) {
|
||||
+ // 31 to leave space for the write/copy forcing character.
|
||||
+ let sub = s.substring(start, start + 31);
|
||||
+ if (wasAscii || !isAscii(sub)) {
|
||||
+ return sub.normalize("NFC");
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+for (entry of rawData) {
|
||||
+ if (entry.text != entry.text.normalize("NFC")) {
|
||||
+ console.log("NOT NFC: " + entry.lang)
|
||||
+ }
|
||||
+ append(entry.lang, entry.text);
|
||||
+}
|
||||
+
|
||||
+for (entry of rawData) {
|
||||
+ append(entry.lang + "_S", makeShort(entry.text));
|
||||
+}
|
||||
+
|
||||
+function benchEntry(entry, iterations) {
|
||||
+ let tr = document.createElement("tr");
|
||||
+ let label = document.createElement("td");
|
||||
+ label.textContent = entry.label;
|
||||
+ tr.appendChild(label);
|
||||
+
|
||||
+ for (f of normalizationForms) {
|
||||
+ let arr = entry.text;
|
||||
+ let t = Date.now();
|
||||
+ for (let i = 0; i < iterations; ++i) {
|
||||
+ escapesScope = arr[i & 1].normalize(f);
|
||||
+ }
|
||||
+ let d = Date.now() - t;
|
||||
+ let td = document.createElement("td");
|
||||
+ td.textContent = d;
|
||||
+ tr.appendChild(td);
|
||||
+ }
|
||||
+
|
||||
+ tbody.appendChild(tr);
|
||||
+}
|
||||
+
|
||||
+let normalizationForms = [
|
||||
+ "NFC",
|
||||
+ "NFKC",
|
||||
+ "NFD",
|
||||
+ "NFKD"
|
||||
+];
|
||||
+
|
||||
+let tbody = document.getElementsByTagName("tbody")[0];
|
||||
+tbody.removeChild(tbody.firstChild);
|
||||
+let p = document.getElementsByTagName("p")[0];
|
||||
+p.textContent = "Bench running.";
|
||||
+
|
||||
+function pgo() {
|
||||
+ for (entry of data) {
|
||||
+ benchEntry(entry, 10);
|
||||
+ }
|
||||
+ p.textContent = "Lower is better. Benching done.";
|
||||
+}
|
||||
+
|
||||
+function bench() {
|
||||
+ if (!data.length) {
|
||||
+ p.textContent = "Lower is better. Benching done.";
|
||||
+ return;
|
||||
+ }
|
||||
+ let entry = data.shift();
|
||||
+ benchEntry(entry, 200_000);
|
||||
+ setTimeout(bench);
|
||||
+}
|
||||
+
|
||||
+// bench() or pgo()
|
||||
+pgo();
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
||||
diff --git a/testing/mozharness/scripts/android_emulator_pgo.py b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
--- a/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
+++ b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
@@ -28,10 +28,11 @@
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/elements.html",
|
||||
"js-input/3d-thingy.html",
|
||||
"js-input/crypto-otp.html",
|
||||
+ "js-input/normalizer_bench.html",
|
||||
"js-input/sunspider/3d-cube.html",
|
||||
"js-input/sunspider/3d-morph.html",
|
||||
"js-input/sunspider/3d-raytrace.html",
|
||||
"js-input/sunspider/access-binary-trees.html",
|
||||
"js-input/sunspider/access-fannkuch.html",
|
||||
diff --git a/toolkit/content/license.html b/toolkit/content/license.html
|
||||
--- a/toolkit/content/license.html
|
||||
+++ b/toolkit/content/license.html
|
||||
@@ -5786,10 +5786,11 @@
|
||||
<li><code>third_party/rust/yoke-derive</code></li>
|
||||
<li><code>third_party/rust/zerofrom</code></li>
|
||||
<li><code>third_party/rust/zerofrom-derive</code></li>
|
||||
<li><code>third_party/rust/zerovec</code></li>
|
||||
<li><code>third_party/rust/zerovec-derive</code></li>
|
||||
+ <li><code>build/pgo/js-input/normalizer_bench.html</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<pre>
|
||||
UNICODE LICENSE V3
|
||||
|
||||
@@ -1,868 +0,0 @@
|
||||
diff --git a/build/pgo/index.html b/build/pgo/index.html
|
||||
--- a/build/pgo/index.html
|
||||
+++ b/build/pgo/index.html
|
||||
@@ -49,10 +49,11 @@
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/sample.html",
|
||||
"js-input/3d-thingy.html",
|
||||
"js-input/crypto-otp.html",
|
||||
+ "js-input/collator_bench.html",
|
||||
"js-input/normalizer_bench.html",
|
||||
"js-input/sunspider/3d-cube.html",
|
||||
"js-input/sunspider/3d-morph.html",
|
||||
"js-input/sunspider/3d-raytrace.html",
|
||||
"js-input/sunspider/access-binary-trees.html",
|
||||
diff --git a/build/pgo/js-input/collator_bench.html b/build/pgo/js-input/collator_bench.html
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/build/pgo/js-input/collator_bench.html
|
||||
@@ -0,0 +1,817 @@
|
||||
+<!DOCTYPE html>
|
||||
+<html>
|
||||
+<meta charset="utf-8">
|
||||
+<!--
|
||||
+The test content comes from
|
||||
+https://github.com/unicode-org/icu4x/tree/main/components/collator/benches/data
|
||||
+which came under the following license:
|
||||
+
|
||||
+UNICODE LICENSE V3
|
||||
+
|
||||
+COPYRIGHT AND PERMISSION NOTICE
|
||||
+
|
||||
+Copyright © 2020-2024 Unicode, Inc.
|
||||
+
|
||||
+NOTICE TO USER: Carefully read the following legal agreement. BY
|
||||
+DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR
|
||||
+SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
|
||||
+TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT
|
||||
+DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
|
||||
+
|
||||
+Permission is hereby granted, free of charge, to any person obtaining a
|
||||
+copy of data files and any associated documentation (the "Data Files") or
|
||||
+software and any associated documentation (the "Software") to deal in the
|
||||
+Data Files or Software without restriction, including without limitation
|
||||
+the rights to use, copy, modify, merge, publish, distribute, and/or sell
|
||||
+copies of the Data Files or Software, and to permit persons to whom the
|
||||
+Data Files or Software are furnished to do so, provided that either (a)
|
||||
+this copyright and permission notice appear with all copies of the Data
|
||||
+Files or Software, or (b) this copyright and permission notice appear in
|
||||
+associated Documentation.
|
||||
+
|
||||
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
+THIRD PARTY RIGHTS.
|
||||
+
|
||||
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE
|
||||
+BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES,
|
||||
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA
|
||||
+FILES OR SOFTWARE.
|
||||
+
|
||||
+Except as contained in this notice, the name of a copyright holder shall
|
||||
+not be used in advertising or otherwise to promote the sale, use or other
|
||||
+dealings in these Data Files or Software without prior written
|
||||
+authorization of the copyright holder.
|
||||
+
|
||||
+SPDX-License-Identifier: Unicode-3.0
|
||||
+
|
||||
+—
|
||||
+
|
||||
+Portions of ICU4X may have been adapted from ICU4C and/or ICU4J.
|
||||
+ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others.
|
||||
+
|
||||
+
|
||||
+(End Unicode-3.0 with IBM trailer)
|
||||
+
|
||||
+
|
||||
+The following applies to parts of this file other that the test language content:
|
||||
+
|
||||
+Any copyright is dedicated to the Public Domain.
|
||||
+http://creativecommons.org/publicdomain/zero/1.0/
|
||||
+
|
||||
+-->
|
||||
+<title>Collator bench</title>
|
||||
+<body>
|
||||
+<h1>Collator Bench</h1>
|
||||
+
|
||||
+<p>Bench not started.</p>
|
||||
+
|
||||
+<table>
|
||||
+<thead><tr><th>Workload</th><th>Time</th></tr></thead>
|
||||
+<tbody><tr><td colspan="2">Bench not run.</td></tr></tbody>
|
||||
+</table>
|
||||
+
|
||||
+<script>
|
||||
+let zh = [
|
||||
+ "林賢得",
|
||||
+ "趙士齊",
|
||||
+ "曾正耀",
|
||||
+ "柯敏盛",
|
||||
+ "王彩霞",
|
||||
+ "張致蒨",
|
||||
+ "黃議德",
|
||||
+ "洪禮君",
|
||||
+ "李美瑩",
|
||||
+ "張雅雯",
|
||||
+ "劉鳳興",
|
||||
+ "方映芬",
|
||||
+ "謝于櫻",
|
||||
+ "歐陽有慧",
|
||||
+ "林啟人",
|
||||
+ "張綵芳",
|
||||
+ "劉淑華",
|
||||
+ "侯嘉珍",
|
||||
+ "吳晏平",
|
||||
+ "李麗枝",
|
||||
+ "陳辰揚",
|
||||
+ "劉大榮",
|
||||
+ "陳孟伶",
|
||||
+ "許筱萍",
|
||||
+ "莊培鑫",
|
||||
+ "詹浚昇",
|
||||
+ "趙修霖",
|
||||
+ "劉逸竹",
|
||||
+ "黃小娟",
|
||||
+ "張英琦",
|
||||
+ "郭嘉偉",
|
||||
+ "姚方潔",
|
||||
+ "李澤育",
|
||||
+ "黃加欣",
|
||||
+ "章瓊方",
|
||||
+ "葉佩真",
|
||||
+ "李勝雄",
|
||||
+ "董姿利",
|
||||
+ "陳懿映",
|
||||
+ "鄭宜芳",
|
||||
+ "李忠和",
|
||||
+ "楊宏祥",
|
||||
+ "王道仁",
|
||||
+ "鄭慶哲",
|
||||
+ "蔡娟娟",
|
||||
+ "施健鴻",
|
||||
+ "藍子桓",
|
||||
+ "汪孟涵",
|
||||
+ "邱奕明",
|
||||
+ "林政緯",
|
||||
+];
|
||||
+
|
||||
+let sv = [
|
||||
+ "Söderholm, Carl",
|
||||
+ "Pettersson, Robert",
|
||||
+ "Håg, Petter",
|
||||
+ "Erikson, Daniel",
|
||||
+ "Ericsson, Marie",
|
||||
+ "Sjöman, Olle",
|
||||
+ "Åberg, Carita",
|
||||
+ "Ericson, Lars",
|
||||
+ "Ericsson, Mona",
|
||||
+ "Hägglund, Frida",
|
||||
+ "Eriksson, John",
|
||||
+ "Palmén, Thomas",
|
||||
+ "Johansson, Åke",
|
||||
+ "Hagelstam, Stina",
|
||||
+ "Sjöberg, Cecilia",
|
||||
+ "Johansson, Andreas",
|
||||
+ "Johansson, André",
|
||||
+ "Palme, Anders",
|
||||
+ "Erixon, Ida",
|
||||
+ "Ahlström, Olof",
|
||||
+ "Lind, Axel",
|
||||
+ "Johansson, Annika",
|
||||
+ "Sohlberg, Jonas",
|
||||
+ "Johansson, Anna",
|
||||
+];
|
||||
+
|
||||
+let en = [
|
||||
+ "Lowry, Keith",
|
||||
+ "Lowry, Adam",
|
||||
+ "Long, Amelia",
|
||||
+ "Long, Bob",
|
||||
+ "Torrigiano, Pietro",
|
||||
+ "Torrigiano, Giovanni",
|
||||
+ "Glyde, Henry George",
|
||||
+ "Glyde, Anne",
|
||||
+ "Barnard, Rev. William Henry",
|
||||
+ "Barnard, John",
|
||||
+ "Béraud, Jean",
|
||||
+ "Pacher, Michael",
|
||||
+ "Waldo, Samuel Lovett",
|
||||
+ "Eun-ho, Kim",
|
||||
+ "Hook, James Clarke",
|
||||
+ "Rible, Dave",
|
||||
+ "Bowling, Frank",
|
||||
+ "Kettle, Tilly",
|
||||
+ "Wilson, George Washington",
|
||||
+ "Herrera Barnuevo, Sebastian de",
|
||||
+ "Laurence, Samuel",
|
||||
+ "Oost the Elder, Jacob van",
|
||||
+ "Nourse, Elizabeth",
|
||||
+ "Pietersz the Younger, Pieter",
|
||||
+ "Vorsterman the Elder, Lucas",
|
||||
+ "Cézanne, Paul",
|
||||
+ "Cézanne, Marie",
|
||||
+ "Tischbein, Johann Heinrich Wilhelm",
|
||||
+ "Bossche, Aert van den",
|
||||
+ "Dawson, David",
|
||||
+ "Siberechts, Jan",
|
||||
+ "Flipart, Charles",
|
||||
+ "Bastien-Lepage, Jules",
|
||||
+ "Carpenter, Ed",
|
||||
+ "Lorenzetti, Ugolino",
|
||||
+ "Halswelle, Keeley",
|
||||
+ "Jefferys, James",
|
||||
+ "Cowles, Russell",
|
||||
+ "Stuempfig, Walter",
|
||||
+ "Foote, Will Howe",
|
||||
+ "Maltwood, Katherine Emma",
|
||||
+ "Traylor, Bill",
|
||||
+ "Krieghoff, Cornelius",
|
||||
+ "Campigli, Massimo",
|
||||
+ "Yun Ge",
|
||||
+ "Sallee, Charles",
|
||||
+ "Gardner, Todd",
|
||||
+ "Dixon, Ken",
|
||||
+ "Forsyth, William",
|
||||
+ "Godfrey, DeWitt",
|
||||
+ "Oliveira, Nathan",
|
||||
+ "Stott, Edward",
|
||||
+ "Tiepolo, Giovanni Battista",
|
||||
+ "Winter, Friedrich",
|
||||
+ "Gaywood, Richard",
|
||||
+ "Apt the Elder, Ulrich",
|
||||
+];
|
||||
+
|
||||
+let kana_kanji = [
|
||||
+ "蔡賢皇",
|
||||
+ "タバタ,ミワコ",
|
||||
+ "せき,ゆきお",
|
||||
+ "アキヤマ,キヨシ",
|
||||
+ "邱信益",
|
||||
+ "劉柏麟",
|
||||
+ "アオキ,ヨシミ",
|
||||
+ "かさま,のりまさ",
|
||||
+ "まつうら,えりこ",
|
||||
+ "洪永昌",
|
||||
+ "むろぞの,ひろあき",
|
||||
+ "カドタ,アキヒロ",
|
||||
+ "李維楨",
|
||||
+ "劉芳蘭",
|
||||
+ "ヨシダ,カズヨシ",
|
||||
+ "キタガワ,ヨシテル",
|
||||
+ "のじま,のりお",
|
||||
+ "カトウ,タカシ",
|
||||
+ "鄭淑米",
|
||||
+ "ヤマモト,マサトシ",
|
||||
+ "たまき,なおこ",
|
||||
+ "カワイ,トシオ",
|
||||
+ "李曉菁",
|
||||
+ "郭添新",
|
||||
+ "林雅君",
|
||||
+ "かとう,としや",
|
||||
+ "陳明楷",
|
||||
+ "セキネ,カズアキ",
|
||||
+ "オジ,ヤスヒロ",
|
||||
+ "かじもと,たくや",
|
||||
+ "かどた,あきひろ",
|
||||
+ "マツモト,タケシ",
|
||||
+ "はっとり,たかゆき",
|
||||
+ "蔡秉昆",
|
||||
+ "ニシオカ,シンイチ",
|
||||
+ "オガワ,ヨシオ",
|
||||
+ "アラキ,カツジ",
|
||||
+ "郭佳鑫",
|
||||
+ "イシモト,ケンジ",
|
||||
+ "アマノ,トオル",
|
||||
+ "ひびの,ひろし",
|
||||
+ "ムラカミ,ヒロキ",
|
||||
+ "鍾淑萍",
|
||||
+ "吳敏真",
|
||||
+ "オオヤ,ヒデホ",
|
||||
+ "吳振成",
|
||||
+ "タケヨシ,セイノスケ",
|
||||
+ "許郁敏",
|
||||
+ "杜宛諭",
|
||||
+ "オシマ,ナスオ",
|
||||
+];
|
||||
+
|
||||
+let pl = [
|
||||
+ "Kowalska",
|
||||
+ "Piotrowska",
|
||||
+ "Jasiński",
|
||||
+ "Wróblewski",
|
||||
+ "Szymański",
|
||||
+ "Kowalski",
|
||||
+ "Zieliński",
|
||||
+ "Górska",
|
||||
+ "Michalski",
|
||||
+ "Olszewska",
|
||||
+ "Pawłowski",
|
||||
+ "Pietrzak",
|
||||
+ "Wróblewski",
|
||||
+ "Kwiatkowski",
|
||||
+ "Nowicki",
|
||||
+ "Stępień",
|
||||
+ "Olszewski",
|
||||
+ "Zalewski",
|
||||
+ "Małecki",
|
||||
+ "Zalewska",
|
||||
+ "Nowacki",
|
||||
+ "Błaszczyk",
|
||||
+ "Tomaszewska",
|
||||
+ "Marciniak",
|
||||
+ "Jakubowska",
|
||||
+ "Kozłowska",
|
||||
+ "Malinowska",
|
||||
+ "Król",
|
||||
+ "Rutkowska",
|
||||
+ "Cieślak",
|
||||
+ "Kamiński",
|
||||
+ "Zajączkowski",
|
||||
+ "Wieczorek",
|
||||
+ "Sokołowska",
|
||||
+ "Ostrowska",
|
||||
+ "Walczak",
|
||||
+ "Dudek",
|
||||
+ "Kozłowski",
|
||||
+ "Baran",
|
||||
+ "Ostrowski",
|
||||
+ "Małecka",
|
||||
+ "Witkowski",
|
||||
+ "Wiśniewski",
|
||||
+ "Lewandowski",
|
||||
+ "Wójcik",
|
||||
+ "Dąbrowski",
|
||||
+ "Grabowska",
|
||||
+ "Tomaszewski",
|
||||
+ "Stępniak",
|
||||
+ "Rutkowski",
|
||||
+ "Piotrowski",
|
||||
+ "Krawiec",
|
||||
+ "Witkowska",
|
||||
+ "Wojciechowska",
|
||||
+ "Michalska",
|
||||
+ "Pawłowska",
|
||||
+ "Woźniak",
|
||||
+ "Lewandowska",
|
||||
+ "Sikora",
|
||||
+ "Kwiatkowska",
|
||||
+ "Wójcicki",
|
||||
+ "Wójtowicz",
|
||||
+ "Grabowski",
|
||||
+ "Duda",
|
||||
+ "Zielińska",
|
||||
+ "Jasińska",
|
||||
+ "Jankowska",
|
||||
+ "Sokołowski",
|
||||
+ "Górski",
|
||||
+ "Wróbel",
|
||||
+ "Wiśniewska",
|
||||
+ "Nowak",
|
||||
+ "Woźny",
|
||||
+ "Jankowski",
|
||||
+ "Michalak",
|
||||
+ "Malinowski",
|
||||
+ "Wojciechowski",
|
||||
+ "Nowicka",
|
||||
+ "Dąbrowska",
|
||||
+ "Kamińska",
|
||||
+ "Szymańska",
|
||||
+ "Królak",
|
||||
+ "Krawczyk",
|
||||
+ "Adamczyk",
|
||||
+ "Jakubowski",
|
||||
+ "Szewczyk",
|
||||
+];
|
||||
+
|
||||
+let ko = [
|
||||
+ "이진동",
|
||||
+ "한종태",
|
||||
+ "박범근",
|
||||
+ "노운동",
|
||||
+ "이대규",
|
||||
+ "서성출",
|
||||
+ "이재훈",
|
||||
+ "이영우",
|
||||
+ "최강기",
|
||||
+ "정장조",
|
||||
+ "박동식",
|
||||
+ "한경애",
|
||||
+ "박선식",
|
||||
+ "박정자",
|
||||
+ "박태규",
|
||||
+ "이성춘",
|
||||
+ "김병강",
|
||||
+ "류복호",
|
||||
+ "정수보",
|
||||
+ "전정근",
|
||||
+ "윤근수",
|
||||
+ "최해섭",
|
||||
+ "허성필",
|
||||
+ "이만상",
|
||||
+ "이정동",
|
||||
+ "김영학",
|
||||
+ "최남영",
|
||||
+ "정순수",
|
||||
+ "차성순",
|
||||
+ "심영숙",
|
||||
+ "이태일",
|
||||
+ "오재옥",
|
||||
+ "전병주",
|
||||
+ "윤삼호",
|
||||
+ "서준욱",
|
||||
+ "박계술",
|
||||
+ "허병권",
|
||||
+ "이동기",
|
||||
+ "송식수",
|
||||
+ "양태만",
|
||||
+ "박갑수",
|
||||
+ "김수광",
|
||||
+ "최돈수",
|
||||
+ "한낙완",
|
||||
+ "박재학",
|
||||
+ "배근호",
|
||||
+ "김용술",
|
||||
+ "빈석석",
|
||||
+ "시수수",
|
||||
+ "김상덕",
|
||||
+];
|
||||
+
|
||||
+let th = [
|
||||
+ "วรรณะ คณาญาติ",
|
||||
+ "ชุติมา อัญญณรงค์กุล",
|
||||
+ "สันติ เลิศสกุลพันธ์",
|
||||
+ "จินตนา อาภานันท์",
|
||||
+ "ประทุม เจริญชอบ",
|
||||
+ "บุญส่ง เปี่ยมพลาย",
|
||||
+ "ซิมค้วง แซ่เตง",
|
||||
+ "นันทวัน เจียรอุดมทรัพย์",
|
||||
+ "นลพร ภิญโญบริสุทธิ์",
|
||||
+ "วุฒิ มีสุข",
|
||||
+ "ณรงศักดิ์ ตั้งเจริญสุขจีระ",
|
||||
+ "วัดช่องนนทรี วัดช่องนนทรี",
|
||||
+ "ไพศาล จ๋วงพานิช",
|
||||
+ "พัชรี เกตุหอม",
|
||||
+ "สมพงษ์ ศรีสากล",
|
||||
+ "จิโรจน์ ไพฑูรย์",
|
||||
+ "ณรงค์ โพธิพุกกะนะ",
|
||||
+ "พิมพรรณ เปรมธาดา",
|
||||
+ "สายหยุด จันทร",
|
||||
+ "สมาน ค้าคล่อง",
|
||||
+ "ชูชาติ เอี่ยมสุทธา",
|
||||
+ "วีระเกียรติ ตั้งอมรรัตน์",
|
||||
+ "พีระ กอสุวรรณสกุล",
|
||||
+ "บุญเชิด เลิศนิมิตร",
|
||||
+ "พัชรินทร์ โต๊ะวนิชรักษา",
|
||||
+ "จินตนา เกตุสัมพันธ์",
|
||||
+ "วันเพ็ญ กิ่งใบสมบูรณ์",
|
||||
+ "สงวน แกล้วกล้า",
|
||||
+ "จงกล ลานเจริญ",
|
||||
+ "ทัศนา แซ่เล้า",
|
||||
+ "ทัศนีย์ เสรีพกกะณะ",
|
||||
+ "ขจรศักดิ์ โพธินามทอง",
|
||||
+ "ธนิตร เนาวศักดิ์",
|
||||
+ "อารี นาคะสิงห์",
|
||||
+ "ไพโรจน์ หาญพงษ์ธรรม",
|
||||
+ "บุญฤทธิ์ นุ้ยขาว",
|
||||
+ "ณรงค์ ไทยสุริยะ",
|
||||
+ "สมชาย ศรบรรจง",
|
||||
+ "ทัศนีย์ ชัยกุล",
|
||||
+ "จินดาพร ศรีสุขสันต์",
|
||||
+ "รพีวรรณ สัมปชัญญะ",
|
||||
+ "สุรินทร์ แสงรัตน์",
|
||||
+ "วรรณรักษ์ วัฒนวุฒิพงศ์",
|
||||
+ "เรียมรัตน์ เกตุกาญจน์",
|
||||
+ "สัตยา ศรีอ่อน",
|
||||
+ "วิมล มาลัยทอง",
|
||||
+ "บักจุ้ย แซ่เฮ้ง",
|
||||
+ "ฮายูรซิงห์ กัมบีร์",
|
||||
+ "ผาสิต หิรัญญชาติธาดา",
|
||||
+ "พรพิศ อาภรณ์ศิริพงษ์",
|
||||
+];
|
||||
+
|
||||
+let filenames = [
|
||||
+ "2005-07-06_15-43-20.jpg",
|
||||
+ "2005-07-06_16-17-35.jpg",
|
||||
+ "2005-07-08_17-54-43.jpg",
|
||||
+ "2005-07-08_14-52-26.jpg",
|
||||
+ "2005-07-08_15-39-27.jpg",
|
||||
+ "2005-07-05_16-21-40.jpg",
|
||||
+ "2005-07-06_17-53-21.jpg",
|
||||
+ "2005-07-04_09-42-55.jpg",
|
||||
+ "2005-07-08_17-55-18.jpg",
|
||||
+ "2005-07-08_15-38-43.jpg",
|
||||
+ "2005-07-05_22-54-56.jpg",
|
||||
+ "2005-07-05_13-40-25.jpg",
|
||||
+ "2005-07-04_16-47-37.jpg",
|
||||
+ "2005-07-04_22-47-53.jpg",
|
||||
+ "2005-07-08_17-05-43.jpg",
|
||||
+ "2005-07-05_15-48-20.jpg",
|
||||
+ "2005-07-06_16-33-59.jpg",
|
||||
+ "2005-07-08_11-46-56.jpg",
|
||||
+ "2005-07-06_16-28-24.jpg",
|
||||
+ "2005-07-06_11-13-43.jpg",
|
||||
+ "2005-07-08_15-16-39.jpg",
|
||||
+ "2005-07-05_22-52-45.jpg",
|
||||
+ "2005-07-06_11-46-46.jpg",
|
||||
+ "2005-07-06_17-11-37.jpg",
|
||||
+ "2005-07-08_14-48-43.jpg",
|
||||
+ "2005-07-08_18-01-44.jpg",
|
||||
+ "2005-07-09_17-13-13.jpg",
|
||||
+ "2005-07-05_13-45-12.jpg",
|
||||
+ "2005-07-05_14-16-55.jpg",
|
||||
+ "2005-07-06_18-05-15.jpg",
|
||||
+ "2005-07-08_16-13-50.jpg",
|
||||
+ "2005-07-05_15-32-51.jpg",
|
||||
+ "2005-07-05_14-15-11.jpg",
|
||||
+ "2005-07-04_19-12-45.jpg",
|
||||
+ "2005-07-06_10-53-00.jpg",
|
||||
+ "2005-07-09_17-27-52.jpg",
|
||||
+ "2005-07-07_17-45-36.jpg",
|
||||
+ "2005-07-07_16-33-57.jpg",
|
||||
+ "2005-07-05_20-49-29.jpg",
|
||||
+ "2005-07-05_16-38-57.jpg",
|
||||
+ "2005-07-05_14-17-19.jpg",
|
||||
+ "2005-07-08_18-23-52.jpg",
|
||||
+ "2005-07-05_17-42-41.jpg",
|
||||
+ "2005-07-06_10-57-46.jpg",
|
||||
+ "2005-07-06_15-32-40.jpg",
|
||||
+ "2005-07-06_10-52-05.jpg",
|
||||
+ "2005-07-04_20-21-50.jpg",
|
||||
+ "2005-07-06_14-33-47.jpg",
|
||||
+ "2005-07-08_17-07-00.jpg",
|
||||
+ "2005-07-07_16-59-07.jpg",
|
||||
+ "2005-07-09_15-37-06.jpg",
|
||||
+ "2005-07-05_13-46-57.jpg",
|
||||
+ "2005-07-08_13-38-43.jpg",
|
||||
+ "2005-07-08_13-33-13.jpg",
|
||||
+ "2005-07-07_17-38-03.jpg",
|
||||
+ "2005-07-08_15-31-34.jpg",
|
||||
+ "2005-07-06_16-19-59.jpg",
|
||||
+ "2005-07-05_17-47-56.jpg",
|
||||
+ "2005-07-06_17-59-31.jpg",
|
||||
+ "2005-07-04_22-51-31.jpg",
|
||||
+ "2005-07-08_13-33-54.jpg",
|
||||
+ "2005-07-04_09-46-15.jpg",
|
||||
+ "2005-07-07_17-33-40.jpg",
|
||||
+ "2005-07-05_12-37-31.jpg",
|
||||
+ "2005-07-08_15-42-53.jpg",
|
||||
+ "2005-07-08_18-41-35.jpg",
|
||||
+ "2005-07-05_15-47-57.jpg",
|
||||
+ "2005-07-08_12-01-39.jpg",
|
||||
+ "2005-07-04_22-51-06.jpg",
|
||||
+ "2005-07-04_21-37-42.jpg",
|
||||
+ "2005-07-09_17-13-09.jpg",
|
||||
+ "2005-07-07_11-14-14.jpg",
|
||||
+ "2005-07-05_13-43-26.jpg",
|
||||
+ "2005-07-05_13-36-55.jpg",
|
||||
+ "2005-07-05_18-32-09.jpg",
|
||||
+ "2005-07-06_11-53-07.jpg",
|
||||
+ "2005-07-05_12-32-10.jpg",
|
||||
+ "2005-07-06_10-46-22.jpg",
|
||||
+ "2005-07-08_11-50-26.jpg",
|
||||
+ "2005-07-05_21-02-28.jpg",
|
||||
+ "2005-07-04_22-47-21.jpg",
|
||||
+ "2005-07-04_10-55-57.jpg",
|
||||
+ "2005-07-09_15-38-52.jpg",
|
||||
+ "2005-07-08_17-10-59.jpg",
|
||||
+ "2005-07-08_14-50-40.jpg",
|
||||
+ "2005-07-08_18-00-22.jpg",
|
||||
+ "2005-07-07_18-19-18.jpg",
|
||||
+ "2005-07-09_15-12-18.jpg",
|
||||
+ "2005-07-08_14-49-53.jpg",
|
||||
+ "2005-07-05_13-46-33.jpg",
|
||||
+ "2005-07-06_17-25-07.jpg",
|
||||
+ "2005-07-09_15-44-05.jpg",
|
||||
+ "2005-07-05_17-26-36.jpg",
|
||||
+ "2005-07-08_15-44-03.jpg",
|
||||
+ "2005-07-05_13-33-39.jpg",
|
||||
+ "2005-07-06_21-29-25.jpg",
|
||||
+ "2005-07-08_11-51-44.jpg",
|
||||
+ "2005-07-08_15-12-48.jpg",
|
||||
+ "2005-07-06_16-25-39.jpg",
|
||||
+ "2005-07-08_18-21-32.jpg",
|
||||
+ "2005-07-05_12-32-21.jpg",
|
||||
+ "2005-07-05_13-38-14.jpg",
|
||||
+ "2005-07-08_15-43-51.jpg",
|
||||
+ "2005-07-05_12-41-56.jpg",
|
||||
+ "2005-07-08_15-25-53.jpg",
|
||||
+ "2005-07-04_10-56-04.jpg",
|
||||
+ "2005-07-06_11-18-37.jpg",
|
||||
+ "2005-07-05_18-43-06.jpg",
|
||||
+ "2005-07-06_16-09-17.jpg",
|
||||
+ "2005-07-04_10-59-20.jpg",
|
||||
+ "2005-07-06_16-22-39.jpg",
|
||||
+ "2005-07-06_16-33-04.jpg",
|
||||
+ "2005-07-06_16-44-58.jpg",
|
||||
+ "2005-07-08_13-33-08.jpg",
|
||||
+ "2005-07-08_11-12-54.jpg",
|
||||
+ "2005-07-08_12-06-15.jpg",
|
||||
+ "2005-07-04_09-46-43.jpg",
|
||||
+ "2005-07-08_11-04-34.jpg",
|
||||
+ "2005-07-08_16-48-35.jpg",
|
||||
+ "2005-07-05_21-03-24.jpg",
|
||||
+ "2005-07-08_11-48-22.jpg",
|
||||
+ "2005-07-04_10-56-33.jpg",
|
||||
+ "2005-07-05_12-11-03.jpg",
|
||||
+ "2005-07-06_11-51-57.jpg",
|
||||
+ "2005-07-05_17-19-16.jpg",
|
||||
+ "2005-07-05_22-42-16.jpg",
|
||||
+ "2005-07-05_18-08-29.jpg",
|
||||
+ "2005-07-09_15-38-39.jpg",
|
||||
+ "2005-07-08_11-46-06.jpg",
|
||||
+ "2005-07-06_12-01-09.jpg",
|
||||
+ "2005-07-06_19-46-20.jpg",
|
||||
+ "2005-07-08_15-43-40.jpg",
|
||||
+ "2005-07-08_17-03-43.jpg",
|
||||
+ "2005-07-08_15-42-33.jpg",
|
||||
+ "2005-07-07_17-31-19.jpg",
|
||||
+ "2005-07-06_11-00-25.jpg",
|
||||
+ "2005-07-06_14-59-14.jpg",
|
||||
+ "2005-07-08_14-50-54.jpg",
|
||||
+ "2005-07-04_22-30-53.jpg",
|
||||
+ "2005-07-05_22-30-33.jpg",
|
||||
+ "2005-07-06_21-03-50.jpg",
|
||||
+ "2005-07-09_17-10-49.jpg",
|
||||
+ "2005-07-07_17-01-31.jpg",
|
||||
+ "2005-07-05_18-51-01.jpg",
|
||||
+ "2005-07-07_15-47-10.jpg",
|
||||
+ "2005-07-08_15-18-06.jpg",
|
||||
+ "2005-07-09_17-18-52.jpg",
|
||||
+ "2005-07-05_17-49-27.jpg",
|
||||
+ "2005-07-06_16-27-05.jpg",
|
||||
+ "2005-07-09_15-39-08.jpg",
|
||||
+ "2005-07-09_17-27-41.jpg",
|
||||
+ "2005-07-06_18-05-05.jpg",
|
||||
+ "2005-07-04_09-46-05.jpg",
|
||||
+ "2005-07-07_20-32-22.jpg",
|
||||
+ "2005-07-08_12-36-22.jpg",
|
||||
+ "2005-07-04_09-34-17.jpg",
|
||||
+ "2005-07-05_17-04-38.jpg",
|
||||
+ "2005-07-05_16-48-19.jpg",
|
||||
+ "2005-07-05_22-38-05.jpg",
|
||||
+ "2005-07-06_21-28-54.jpg",
|
||||
+ "2005-07-05_17-39-17.jpg",
|
||||
+ "2005-07-05_20-53-24.jpg",
|
||||
+ "2005-07-05_14-13-48.jpg",
|
||||
+ "2005-07-05_15-40-10.jpg",
|
||||
+ "2005-07-05_14-10-06.jpg",
|
||||
+ "2005-07-04_09-41-26.jpg",
|
||||
+ "2005-07-06_18-36-09.jpg",
|
||||
+ "2005-07-05_20-58-48.jpg",
|
||||
+ "2005-07-05_14-09-25.jpg",
|
||||
+ "2005-07-05_21-10-03.jpg",
|
||||
+ "2005-07-05_15-23-57.jpg",
|
||||
+ "2005-07-04_09-43-23.jpg",
|
||||
+ "2005-07-08_11-48-10.jpg",
|
||||
+ "2005-07-08_15-40-33.jpg",
|
||||
+ "2005-07-07_16-59-54.jpg",
|
||||
+ "2005-07-08_17-44-46.jpg",
|
||||
+ "2005-07-08_14-50-50.jpg",
|
||||
+ "2005-07-04_22-24-58.jpg",
|
||||
+ "2005-07-08_17-06-13.jpg",
|
||||
+ "2005-07-09_16-43-05.jpg",
|
||||
+ "2005-07-07_17-02-23.jpg",
|
||||
+ "2005-07-09_15-36-49.jpg",
|
||||
+ "2005-07-05_13-50-04.jpg",
|
||||
+ "2005-07-09_15-40-07.jpg",
|
||||
+ "2005-07-09_17-40-47.jpg",
|
||||
+ "2005-07-04_16-22-19.jpg",
|
||||
+ "2005-07-05_14-16-07.jpg",
|
||||
+ "2005-07-07_17-19-58.jpg",
|
||||
+ "2005-07-05_13-43-50.jpg",
|
||||
+ "2005-07-05_15-35-30.jpg",
|
||||
+ "2005-07-06_16-05-30.jpg",
|
||||
+ "2005-07-06_15-14-38.jpg",
|
||||
+ "2005-07-06_15-28-12.jpg",
|
||||
+ "2005-07-08_15-23-38.jpg",
|
||||
+ "2005-07-07_16-41-58.jpg",
|
||||
+ "2005-07-04_11-00-06.jpg",
|
||||
+ "2005-07-08_17-50-13.jpg",
|
||||
+ "2005-07-08_11-46-44.jpg",
|
||||
+ "2005-07-09_17-02-15.jpg",
|
||||
+ "2005-07-05_14-09-50.jpg",
|
||||
+ "2005-07-05_17-54-23.jpg",
|
||||
+ "2005-07-07_18-35-47.jpg",
|
||||
+ "2005-07-05_22-27-52.jpg",
|
||||
+ "2005-07-06_14-59-23.jpg",
|
||||
+ "2005-07-04_22-55-16.jpg",
|
||||
+ "2005-07-04_22-23-01.jpg",
|
||||
+];
|
||||
+
|
||||
+function toUTF16(str) {
|
||||
+ // Normalize to force flattening of rope.
|
||||
+ return (str + "\u2014").normalize();
|
||||
+}
|
||||
+
|
||||
+let data = [
|
||||
+ {
|
||||
+ name: "Dates as file names, root collation",
|
||||
+ coll: "en",
|
||||
+ arr: filenames,
|
||||
+ },
|
||||
+ {
|
||||
+ name: "Dates as file names, root collation, numeric",
|
||||
+ coll: "en-u-kn-true",
|
||||
+ arr: filenames,
|
||||
+ },
|
||||
+ {
|
||||
+ name: "Dates as file names, tailoring",
|
||||
+ coll: "sv",
|
||||
+ arr: filenames,
|
||||
+ },
|
||||
+ {
|
||||
+ name: "Dates as file names, tailoring, numeric",
|
||||
+ coll: "sv-u-kn-true",
|
||||
+ arr: filenames,
|
||||
+ },
|
||||
+ // Root collation
|
||||
+ {
|
||||
+ name: "English Latin1",
|
||||
+ coll: "en",
|
||||
+ arr: en,
|
||||
+ },
|
||||
+ {
|
||||
+ name: "English UTF-16",
|
||||
+ coll: "en",
|
||||
+ arr: en.map(toUTF16),
|
||||
+ },
|
||||
+ // Swedish stands in for code paths of interest
|
||||
+ // to pretty much all tailored Latin except Vietnamese
|
||||
+ // and German phonebook.
|
||||
+ {
|
||||
+ name: "Swedish Latin1",
|
||||
+ coll: "sv",
|
||||
+ arr: sv,
|
||||
+ },
|
||||
+ {
|
||||
+ name: "Swedish UTF-16",
|
||||
+ coll: "sv",
|
||||
+ arr: sv.map(toUTF16),
|
||||
+ },
|
||||
+ // For Latin1 to UTF-16 comparisons.
|
||||
+ {
|
||||
+ name: "Polish Latin1/UTF-16 mix",
|
||||
+ coll: "pl",
|
||||
+ arr: pl,
|
||||
+ },
|
||||
+ // Algorithmically simple tailoring case
|
||||
+ // with large data structure size.
|
||||
+ {
|
||||
+ name: "Chinese (Pinyin order)",
|
||||
+ coll: "zh-u-co-pinyin",
|
||||
+ arr: zh,
|
||||
+ },
|
||||
+ // Bench/PGO value-add of another order unclear.
|
||||
+ {
|
||||
+ name: "Chinese (stroke order)",
|
||||
+ coll: "zh-u-co-stroke",
|
||||
+ arr: zh,
|
||||
+ },
|
||||
+ // Bench/PGO value-add unclear if Greek is added.
|
||||
+ {
|
||||
+ name: "Japanese",
|
||||
+ coll: "ja",
|
||||
+ arr: kana_kanji,
|
||||
+ },
|
||||
+ // Algorithmic special case.
|
||||
+ {
|
||||
+ name: "Korean",
|
||||
+ coll: "ko",
|
||||
+ arr: ko,
|
||||
+ },
|
||||
+ // Unverified if this workload actually exercises the interesting code paths.
|
||||
+ {
|
||||
+ name: "Thai",
|
||||
+ coll: "th",
|
||||
+ arr: th,
|
||||
+ },
|
||||
+ // TODO: Add Greek, Vietnamese, Bengali
|
||||
+];
|
||||
+
|
||||
+// Global variable for hopefully fooling side effect analysis.
|
||||
+let escapesScope = "";
|
||||
+
|
||||
+function benchEntry(entry, iterations) {
|
||||
+ let tr = document.createElement("tr");
|
||||
+ let label = document.createElement("td");
|
||||
+ label.textContent = entry.name;
|
||||
+ tr.appendChild(label);
|
||||
+
|
||||
+ let c = new Intl.Collator(entry.coll);
|
||||
+ let t = Date.now();
|
||||
+ for (let i = 0; i < iterations; ++i) {
|
||||
+ // Make a shallow copy and then sort it in place
|
||||
+ // instead of calling `toSorted()` on the unvalidated
|
||||
+ // assumption that in-place sorting is more common on
|
||||
+ // the Web.
|
||||
+ escapesScope = entry.arr.slice();
|
||||
+ escapesScope.sort(c.compare);
|
||||
+ }
|
||||
+ let d = Date.now() - t;
|
||||
+ let td = document.createElement("td");
|
||||
+ td.textContent = d;
|
||||
+ tr.appendChild(td);
|
||||
+
|
||||
+ tbody.appendChild(tr);
|
||||
+}
|
||||
+
|
||||
+let tbody = document.getElementsByTagName("tbody")[0];
|
||||
+tbody.removeChild(tbody.firstChild);
|
||||
+let p = document.getElementsByTagName("p")[0];
|
||||
+p.textContent = "Bench running.";
|
||||
+
|
||||
+function pgo() {
|
||||
+ for (entry of data) {
|
||||
+ benchEntry(entry, 10);
|
||||
+ }
|
||||
+ p.textContent = "Lower is better. Benching done.";
|
||||
+}
|
||||
+
|
||||
+function bench() {
|
||||
+ if (!data.length) {
|
||||
+ p.textContent = "Lower is better. Benching done.";
|
||||
+ return;
|
||||
+ }
|
||||
+ let entry = data.shift();
|
||||
+ benchEntry(entry, 5_000);
|
||||
+ setTimeout(bench);
|
||||
+}
|
||||
+
|
||||
+// bench() or pgo()
|
||||
+pgo();
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
||||
diff --git a/testing/mozharness/scripts/android_emulator_pgo.py b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
--- a/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
+++ b/testing/mozharness/scripts/android_emulator_pgo.py
|
||||
@@ -29,10 +29,11 @@
|
||||
"blueprint/forms.html",
|
||||
"blueprint/grid.html",
|
||||
"blueprint/elements.html",
|
||||
"js-input/3d-thingy.html",
|
||||
"js-input/crypto-otp.html",
|
||||
+ "js-input/collator_bench.html",
|
||||
"js-input/normalizer_bench.html",
|
||||
"js-input/sunspider/3d-cube.html",
|
||||
"js-input/sunspider/3d-morph.html",
|
||||
"js-input/sunspider/3d-raytrace.html",
|
||||
"js-input/sunspider/access-binary-trees.html",
|
||||
diff --git a/toolkit/content/license.html b/toolkit/content/license.html
|
||||
--- a/toolkit/content/license.html
|
||||
+++ b/toolkit/content/license.html
|
||||
@@ -5788,10 +5788,11 @@
|
||||
<li><code>third_party/rust/zerofrom</code></li>
|
||||
<li><code>third_party/rust/zerofrom-derive</code></li>
|
||||
<li><code>third_party/rust/zerovec</code></li>
|
||||
<li><code>third_party/rust/zerovec-derive</code></li>
|
||||
<li><code>build/pgo/js-input/normalizer_bench.html</code></li>
|
||||
+ <li><code>build/pgo/js-input/collator_bench.html</code></li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
<pre>
|
||||
UNICODE LICENSE V3
|
||||
|
||||
@@ -188,7 +188,7 @@ diff --git a/toolkit/themes/shared/global-shared.css b/toolkit/themes/shared/glo
|
||||
/* Lightweight theme roots */
|
||||
|
||||
:root[lwtheme] {
|
||||
.browser-toolbox-background,
|
||||
body,
|
||||
toolbar,
|
||||
diff --git a/widget/cocoa/nsCocoaWindow.h b/widget/cocoa/nsCocoaWindow.h
|
||||
--- a/widget/cocoa/nsCocoaWindow.h
|
||||
|
||||
@@ -10,8 +10,7 @@
|
||||
// Specifically trying to target FeatureCallout.sys.mjs's change.
|
||||
// IMPORTANT: Make sure Feature callouts STILL use native popopvers when
|
||||
// syncing from upstream, as this is a critical part of the patch.
|
||||
"+ nonnativepopover=\"true\"": "+ ",
|
||||
"body,": ".browser-toolbox-background,"
|
||||
"+ nonnativepopover=\"true\"": "+ "
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -41,21 +40,6 @@
|
||||
"id": "D291714",
|
||||
"name": "gh-12979 Clip dirty_rect to device_size"
|
||||
},
|
||||
{
|
||||
"type": "phabricator",
|
||||
"id": "D256645",
|
||||
"name": "FF150 1 PGO patch for bug-1962418"
|
||||
},
|
||||
{
|
||||
"type": "phabricator",
|
||||
"id": "D279829",
|
||||
"name": "FF150 2 PGO patch for bug-2011620"
|
||||
},
|
||||
{
|
||||
"type": "phabricator",
|
||||
"id": "D281762",
|
||||
"name": "FF150 3 PGO patch for bug-2014422"
|
||||
},
|
||||
{
|
||||
"type": "phabricator",
|
||||
"ids": [
|
||||
@@ -64,5 +48,9 @@
|
||||
"D247217"
|
||||
],
|
||||
"name": "Session store use size hint"
|
||||
},
|
||||
{
|
||||
"type": "local",
|
||||
"path": "firefox/bug_2013682_allow_stacking_contexts_to_be_promoted.patch"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/layout/style/nsStyleSheetService.h b/layout/style/nsStyleSheetService.h
|
||||
index 86a6767302820221f879e31e06cf012137185ffd..50c8cdfb94f186ffdc9f1ebdedf8db294f8b8366 100644
|
||||
index 4342cd44e7c16a9c4bb9d30247316fa2f2f7830a..ee6bdf1ddc1428a5449a220c435a261ddd8b5927 100644
|
||||
--- a/layout/style/nsStyleSheetService.h
|
||||
+++ b/layout/style/nsStyleSheetService.h
|
||||
@@ -49,6 +49,8 @@ class nsStyleSheetService final : public nsIStyleSheetService,
|
||||
@@ -47,6 +47,8 @@ class nsStyleSheetService final : public nsIStyleSheetService,
|
||||
|
||||
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
|
||||
index 262eee800b3f2bf7b84809cd1f4a7aa2020eafb6..0812945dca0c0610c5d5f8792cb3f25dc642fb1e 100644
|
||||
index f36788f33221aa6d3709bcc09c05a90ff83e7c48..7f794117d155cea5772568115710e67c947d79e3 100644
|
||||
--- a/modules/libpref/init/StaticPrefList.yaml
|
||||
+++ b/modules/libpref/init/StaticPrefList.yaml
|
||||
@@ -20036,6 +20036,7 @@
|
||||
@@ -20238,6 +20238,7 @@
|
||||
mirror: always
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
|
||||
index 46034d8d99ba227f85824d472933ec556f54ba81..42f7f68aba60ca9c8f85f5fe13ffb56fa542e344 100644
|
||||
index 29140c6f29c1784ea594ccd84a005a9ec27eaaf5..62837e73bfee87b8bf708df912a6d07d06eea8b1 100644
|
||||
--- a/modules/libpref/moz.build
|
||||
+++ b/modules/libpref/moz.build
|
||||
@@ -93,6 +93,7 @@ pref_groups = [
|
||||
@@ -91,6 +91,7 @@ pref_groups = [
|
||||
"view_source",
|
||||
"webgl",
|
||||
"widget",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs
|
||||
index 21c274075116ace81c29babbf8b2ce94fa749e4f..512f34734d6a4d81bde1aed3df5a655e9310a2ec 100644
|
||||
index 4524fd263d791ccf4da1cd0476f3ecc7a02253aa..f5d120748f3d4156c6544fffc10d4f6140ef80ae 100644
|
||||
--- a/servo/components/style/gecko/media_features.rs
|
||||
+++ b/servo/components/style/gecko/media_features.rs
|
||||
@@ -15,6 +15,9 @@ use crate::values::computed::{CSSPixelLength, Context, Ratio, Resolution};
|
||||
@@ -16,6 +16,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 21c274075116ace81c29babbf8b2ce94fa749e4f..512f34734d6a4d81bde1aed3df5a655e
|
||||
|
||||
fn device_size(device: &Device) -> Size2D<Au> {
|
||||
let mut width = 0;
|
||||
@@ -617,6 +620,13 @@ fn eval_scripting(context: &Context, query_value: Option<Scripting>) -> bool {
|
||||
@@ -618,6 +621,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 21c274075116ace81c29babbf8b2ce94fa749e4f..512f34734d6a4d81bde1aed3df5a655e
|
||||
|
||||
fn eval_moz_mac_rtl(context: &Context) -> bool {
|
||||
unsafe { bindings::Gecko_MediaFeatures_MacRTL(context.device().document()) }
|
||||
@@ -660,7 +670,13 @@ macro_rules! lnf_int_feature {
|
||||
@@ -661,7 +671,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.
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
diff --git a/servo/components/style/queries/feature_expression.rs b/servo/components/style/queries/feature_expression.rs
|
||||
index 17490c8b1d8efee96d7894262d3e25b91cea7506..fa7b32bcd4f3a5490c481ac7c8203b164b851e22 100644
|
||||
index 6e974cd1978cf39d786aff4ad8eb73216cbfac10..0513173afbff77764c8ffeb92688dda5d3a0d876 100644
|
||||
--- a/servo/components/style/queries/feature_expression.rs
|
||||
+++ b/servo/components/style/queries/feature_expression.rs
|
||||
@@ -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};
|
||||
-use crate::values::CSSFloat;
|
||||
+use crate::values::{AtomString, CSSFloat};
|
||||
@@ -17,7 +17,7 @@ use crate::str::{starts_with_ignore_ascii_case, string_as_ascii_lowercase};
|
||||
use crate::stylesheets::{CssRuleType, Origin, UrlExtraData};
|
||||
use crate::values::computed::{self, CSSPixelLength, Ratio, ToComputedValue};
|
||||
use crate::values::specified::{Angle, Integer, Length, Number, Percentage, Resolution, Time};
|
||||
-use crate::values::{CSSFloat, DashedIdent};
|
||||
+use crate::values::{CSSFloat, DashedIdent, AtomString};
|
||||
use crate::{Atom, Zero};
|
||||
use cssparser::{Parser, Token};
|
||||
use cssparser::{Parser, ParserInput, Token};
|
||||
use selectors::kleene_value::KleeneValue;
|
||||
@@ -624,6 +624,10 @@ impl QueryFeatureExpression {
|
||||
@@ -629,6 +629,10 @@ impl QueryFeatureExpression {
|
||||
.map(|v| *expect!(Enumerated, v));
|
||||
return evaluator(context, computed);
|
||||
},
|
||||
@@ -22,15 +22,15 @@ index 17490c8b1d8efee96d7894262d3e25b91cea7506..fa7b32bcd4f3a5490c481ac7c8203b16
|
||||
Evaluator::BoolInteger(eval) => {
|
||||
let computed = self
|
||||
.kind
|
||||
@@ -662,6 +666,7 @@ pub enum QueryExpressionValue {
|
||||
@@ -667,6 +671,7 @@ pub enum QueryExpressionValue {
|
||||
/// An enumerated value, defined by the variant keyword table in the
|
||||
/// feature's `mData` member.
|
||||
Enumerated(KeywordDiscriminant),
|
||||
+ String(AtomString),
|
||||
}
|
||||
|
||||
impl QueryExpressionValue {
|
||||
@@ -680,6 +685,7 @@ impl QueryExpressionValue {
|
||||
/// Value types only used by style-range query expressions, not feature queries.
|
||||
/// A CSS-wide keyword.
|
||||
Keyword(CSSWideKeyword),
|
||||
@@ -717,6 +722,7 @@ impl QueryExpressionValue {
|
||||
Evaluator::Enumerated { serializer, .. } => dest.write_str(&*serializer(value)),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
@@ -38,7 +38,7 @@ index 17490c8b1d8efee96d7894262d3e25b91cea7506..fa7b32bcd4f3a5490c481ac7c8203b16
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,6 +723,9 @@ impl QueryExpressionValue {
|
||||
@@ -754,6 +760,9 @@ impl QueryExpressionValue {
|
||||
Evaluator::Resolution(..) => {
|
||||
QueryExpressionValue::Resolution(Resolution::parse(context, input)?)
|
||||
},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/testing/mochitest/browser-test.js b/testing/mochitest/browser-test.js
|
||||
index 82702aa28a04b87153efaab43a5510da88141bd5..e0a5f1b7a7b33bb8fe2117140aac06c12299c976 100644
|
||||
index a0f777967e2b71ee7edd5cdaa26cb79744f8fbe0..f09ede2424bf4903d628ba79a7c23bf123b0e3ec 100644
|
||||
--- a/testing/mochitest/browser-test.js
|
||||
+++ b/testing/mochitest/browser-test.js
|
||||
@@ -445,10 +445,10 @@ Tester.prototype = {
|
||||
@@ -497,10 +497,10 @@ Tester.prototype = {
|
||||
// But not the Thunderbird window, it doesn't have these things!
|
||||
if (AppConstants.MOZ_APP_NAME != "thunderbird") {
|
||||
// Remove stale tabs
|
||||
@@ -15,7 +15,7 @@ index 82702aa28a04b87153efaab43a5510da88141bd5..e0a5f1b7a7b33bb8fe2117140aac06c1
|
||||
let lastTab = gBrowser.tabs[gBrowser.tabs.length - 1];
|
||||
if (!lastTab.closing) {
|
||||
// Report the stale tab as an error only when they're not closing.
|
||||
@@ -1156,12 +1156,6 @@ Tester.prototype = {
|
||||
@@ -1244,12 +1244,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) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/content/widgets/browser-custom-element.mjs b/toolkit/content/widgets/browser-custom-element.mjs
|
||||
index 75890c23989a4f4d0da06e9f0220e3e374038ec0..08c74103a2fde76aad228af7671f9fe4dfb39760 100644
|
||||
index 22fcec0368d0356a24dd125373cb767836a6760d..7a78f5c1ddb06f3bc1b1e76f7489d57ee17a28e9 100644
|
||||
--- a/toolkit/content/widgets/browser-custom-element.mjs
|
||||
+++ b/toolkit/content/widgets/browser-custom-element.mjs
|
||||
@@ -504,11 +504,11 @@ export class MozBrowser extends MozElements.MozElementMixin(XULFrameElement) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/content/widgets/findbar.js b/toolkit/content/widgets/findbar.js
|
||||
index b66dce5bea757fdf6a9bbd656551d876e47aa8a3..bdfb6331d7ebfb283290b1c97601b743421194e3 100644
|
||||
index 89550d1700d4cb7e8bdef5e99ae4eb42b3ce3b16..b6d23961739b170d34f7a1bdc5f5c2e0ef005882 100644
|
||||
--- a/toolkit/content/widgets/findbar.js
|
||||
+++ b/toolkit/content/widgets/findbar.js
|
||||
@@ -1189,6 +1189,7 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/content/widgets/moz-toggle/moz-toggle.css b/toolkit/content/widgets/moz-toggle/moz-toggle.css
|
||||
index 49f04a3a8eedf580e9854f04014c637894181300..4e1336b4a58afaba182de87b4e670b0f0b3d607e 100644
|
||||
index c1a73d46725d30b8f2a635dba1d32617b3295ddd..4fee9fc0deb702b955c07c2af9eefa932fb8f41f 100644
|
||||
--- a/toolkit/content/widgets/moz-toggle/moz-toggle.css
|
||||
+++ b/toolkit/content/widgets/moz-toggle/moz-toggle.css
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js
|
||||
index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c3ba3d92c 100644
|
||||
index 38c1199d91c7a8d8155ab7f48e731675a3b6a3ec..ce1dd5caa85e416cff5a05ae127ad17fa013c4e4 100644
|
||||
--- a/toolkit/content/widgets/tabbox.js
|
||||
+++ b/toolkit/content/widgets/tabbox.js
|
||||
@@ -11,6 +11,23 @@
|
||||
@@ -25,8 +25,8 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
+
|
||||
let imports = {};
|
||||
ChromeUtils.defineESModuleGetters(imports, {
|
||||
ShortcutUtils: "resource://gre/modules/ShortcutUtils.sys.mjs",
|
||||
@@ -213,7 +230,7 @@
|
||||
DeferredTask: "resource://gre/modules/DeferredTask.sys.mjs",
|
||||
@@ -214,7 +231,7 @@
|
||||
) {
|
||||
this._inAsyncOperation = false;
|
||||
if (oldPanel != this._selectedPanel) {
|
||||
@@ -35,7 +35,7 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
this._selectedPanel?.classList.add("deck-selected");
|
||||
}
|
||||
this.setAttribute("selectedIndex", val);
|
||||
@@ -853,7 +870,7 @@
|
||||
@@ -901,7 +918,7 @@
|
||||
if (!tab) {
|
||||
return;
|
||||
}
|
||||
@@ -44,7 +44,7 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
if (otherTab != tab && otherTab.selected) {
|
||||
otherTab._selected = false;
|
||||
}
|
||||
@@ -889,6 +906,7 @@
|
||||
@@ -937,6 +954,7 @@
|
||||
* @param {MozTab|null} [val]
|
||||
*/
|
||||
set selectedItem(val) {
|
||||
@@ -52,7 +52,7 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
if (val && !val.selected) {
|
||||
// The selectedIndex setter ignores invalid values
|
||||
// such as -1 if |val| isn't one of our child nodes.
|
||||
@@ -1066,7 +1084,7 @@
|
||||
@@ -1114,7 +1132,7 @@
|
||||
if (tab == startTab) {
|
||||
return null;
|
||||
}
|
||||
@@ -61,7 +61,7 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
return tab;
|
||||
}
|
||||
}
|
||||
@@ -1128,13 +1146,30 @@
|
||||
@@ -1176,13 +1194,30 @@
|
||||
* @param {boolean} [aWrap]
|
||||
*/
|
||||
advanceSelectedTab(aDir, aWrap) {
|
||||
@@ -93,7 +93,7 @@ index 24196c658309b1d3c049939f57a13c22d422a153..0cf49a0dc18b34a5be2fad8d2b124c7c
|
||||
// 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) {
|
||||
@@ -1147,7 +1182,7 @@
|
||||
@@ -1195,7 +1230,7 @@
|
||||
newTab = this.findNextTab(startTab, {
|
||||
direction: aDir,
|
||||
wrap: aWrap,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/toolkit/modules/AppConstants.sys.mjs b/toolkit/modules/AppConstants.sys.mjs
|
||||
index a51aa0459c5c48226d039d3dd6807a4bca1df700..e70ed433b28f172f179fc08cf600c41e91a150cb 100644
|
||||
index 13a523a989d1326b0f8faef9bac299738885e655..c2ff014dc553856161f6aec8014a27165819364b 100644
|
||||
--- a/toolkit/modules/AppConstants.sys.mjs
|
||||
+++ b/toolkit/modules/AppConstants.sys.mjs
|
||||
@@ -177,6 +177,8 @@ export var AppConstants = Object.freeze({
|
||||
@@ -175,6 +175,8 @@ export var AppConstants = Object.freeze({
|
||||
MOZ_UPDATE_CHANNEL: "@MOZ_UPDATE_CHANNEL@",
|
||||
MOZ_WIDGET_TOOLKIT: "@MOZ_WIDGET_TOOLKIT@",
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/modules/LightweightThemeConsumer.sys.mjs b/toolkit/modules/LightweightThemeConsumer.sys.mjs
|
||||
index 3b455ba0cdf8782bef1d44856a72556f8b62d200..18dd1f681dc72c6d08cd7196629ab272d0c0ff68 100644
|
||||
index 6e7f48f012b4508847bda1791a958ccd57be105c..32a83934a99ec68763fb5b8a7e305e9e9cfbde37 100644
|
||||
--- a/toolkit/modules/LightweightThemeConsumer.sys.mjs
|
||||
+++ b/toolkit/modules/LightweightThemeConsumer.sys.mjs
|
||||
@@ -34,7 +34,7 @@ const toolkitVariableMap = [
|
||||
@@ -11,7 +11,7 @@ index 3b455ba0cdf8782bef1d44856a72556f8b62d200..18dd1f681dc72c6d08cd7196629ab272
|
||||
}
|
||||
// Remove the alpha channel
|
||||
const { r, g, b } = rgbaChannels;
|
||||
@@ -377,7 +377,7 @@ LightweightThemeConsumer.prototype = {
|
||||
@@ -362,7 +362,7 @@ LightweightThemeConsumer.prototype = {
|
||||
let forcedColorsThemeOverride =
|
||||
this.FORCED_COLORS_OVERRIDE_ENABLED &&
|
||||
this.forcedColorsMediaQuery?.matches;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
|
||||
index c7322c51ce2e0b750186ba575cca21ad03491822..e208b02f8afccfa28f78dcedf7f98cc54fc1429a 100644
|
||||
index 37f4a1adbfbcddaa5dd72a02befe67901d89d5a8..c8360e3e8d183dbd108ba9f953013e625cadc6f5 100644
|
||||
--- a/toolkit/modules/moz.build
|
||||
+++ b/toolkit/modules/moz.build
|
||||
@@ -290,6 +290,7 @@ for var in (
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs
|
||||
index ba8a534bf857e35a46ff4ce7e140828c4ed3b081..16f505621533fb39616c3a0b9f002f5097be40c8 100644
|
||||
index dc1a6f7e1e7fc3cb37fdf783db425793afe04f52..512749ee8c2a2ff4e099eb91ddb2d40fb1d361c2 100644
|
||||
--- a/toolkit/mozapps/extensions/AddonManager.sys.mjs
|
||||
+++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs
|
||||
@@ -1289,12 +1289,12 @@ var AddonManagerInternal = {
|
||||
@@ -1282,12 +1282,12 @@ var AddonManagerInternal = {
|
||||
ITEM_VERSION: aAddon.version,
|
||||
ITEM_STATUS: addonStatus,
|
||||
APP_ID: Services.appinfo.ID,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/mozapps/extensions/content/aboutaddons.css b/toolkit/mozapps/extensions/content/aboutaddons.css
|
||||
index af6f7f42da3eb14c18058a9cc0516620a20a461b..fe049902b3c0606c038ad1bf076175593f1a1d76 100644
|
||||
index 619ae975710359fe879f197c689969ed726de7c0..542adaf0aa4f9d7336d969754228c1a93640b6af 100644
|
||||
--- a/toolkit/mozapps/extensions/content/aboutaddons.css
|
||||
+++ b/toolkit/mozapps/extensions/content/aboutaddons.css
|
||||
@@ -105,6 +105,13 @@ h2 {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/mozapps/update/updater/updater-common.build b/toolkit/mozapps/update/updater/updater-common.build
|
||||
index 57ea0415653678bb300e277e66c97e332e756cc7..5f757e68a685948c83fee8f963c49bee71a8e4a4 100644
|
||||
index 57ea0415653678bb300e277e66c97e332e756cc7..240cf6abcdf433785564f528413b982aec5cc138 100644
|
||||
--- a/toolkit/mozapps/update/updater/updater-common.build
|
||||
+++ b/toolkit/mozapps/update/updater/updater-common.build
|
||||
@@ -88,6 +88,11 @@ if link_with_nss:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp
|
||||
index 33c9621d60cedd32f5ac7c65cf9f94f4ecc40c3d..5973e1f3eb4f5003ec171e6ca511ee99efd76cad 100644
|
||||
index 1970f776703549287f6b8ae04c93efaec638bc26..d242f5efd76b66a86fb2de024455d72b786fad42 100644
|
||||
--- a/toolkit/profile/nsToolkitProfileService.cpp
|
||||
+++ b/toolkit/profile/nsToolkitProfileService.cpp
|
||||
@@ -96,6 +96,8 @@ using namespace mozilla;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/themes/shared/aboutReader.css b/toolkit/themes/shared/aboutReader.css
|
||||
index 978d0ac8ae4a82947424c13c20d0f1d274dffe10..e5c7c489f7fff0661f103cdb383364bc8aa423a8 100644
|
||||
index cb07e9ffa97c4d4856fc96eeda409faeedecb9e4..3960ec171efa573ad140488e25249df47b722875 100644
|
||||
--- a/toolkit/themes/shared/aboutReader.css
|
||||
+++ b/toolkit/themes/shared/aboutReader.css
|
||||
@@ -1187,3 +1187,43 @@ pre code {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
diff --git a/toolkit/themes/shared/design-system/dist/tokens-shared.css b/toolkit/themes/shared/design-system/dist/tokens-shared.css
|
||||
index 09a76c06a1b1982e27df5a2a1f770bad97e11247..26082ffa45480079da62f452ae6d7be652847464 100644
|
||||
index 94c61190db0e9b0df19249eb4e49a24ba1a61792..ab5a0cb7028e10a5ecce1d4034b450d04984db8a 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 @@
|
||||
/* DO NOT EDIT this file directly, instead modify design-tokens.json
|
||||
* and run `npm run build` to see your changes. */
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
@layer tokens-foundation, tokens-foundation-nova, tokens-prefers-contrast, tokens-prefers-contrast-nova, tokens-forced-colors, tokens-forced-colors-nova;
|
||||
|
||||
+@import url("chrome://browser/content/zen-styles/zen-theme.css");
|
||||
+
|
||||
@layer tokens-foundation, tokens-prefers-contrast, tokens-forced-colors;
|
||||
|
||||
@layer tokens-foundation {
|
||||
:root,
|
||||
:host(.anonymous-content-host) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/themes/shared/in-content/common-shared.css b/toolkit/themes/shared/in-content/common-shared.css
|
||||
index 814075aef59969a7e8656974b4f46022f8e88783..53c5d857c15f0a9ec553a2bcfec66c2d2db121fa 100644
|
||||
index 31acab1e4b79d2ee54b64725480c3119b696c340..5f17d6222924ae9d2b4aba355f75f55c6d0fa7c5 100644
|
||||
--- a/toolkit/themes/shared/in-content/common-shared.css
|
||||
+++ b/toolkit/themes/shared/in-content/common-shared.css
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
|
||||
index 1b346ce2e62b6947e9f6b5f5f88ec16454847e09..301f896842a3f598b99eb3b9f617b361d423ca0e 100644
|
||||
index 7615c2c7cf75ce58b36fb5d37764125adcd06ba1..8b1b21dab0a62ab4621810f22076ec9cf6b6d51c 100644
|
||||
--- a/toolkit/xre/nsXREDirProvider.cpp
|
||||
+++ b/toolkit/xre/nsXREDirProvider.cpp
|
||||
@@ -1342,9 +1342,11 @@ nsresult nsXREDirProvider::AppendFromAppData(nsIFile* aFile, bool aIsDotted) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/tools/lint/eslint/__init__.py b/tools/lint/eslint/__init__.py
|
||||
index cd45822500a8b5e1112efad81ed34e01c0dbcc19..9f47b4a46bf1c36db06b45e047a939ae08bcb703 100644
|
||||
index 4e7082179c632ac8fd1c4687329c2fe243cd6991..dadd614f8e7246ee1d390c0057af1536366653d6 100644
|
||||
--- a/tools/lint/eslint/__init__.py
|
||||
+++ b/tools/lint/eslint/__init__.py
|
||||
@@ -114,7 +114,7 @@ def lint(paths, config, binary=None, fix=None, rules=[], setup=None, **lintargs)
|
||||
@@ -112,7 +112,7 @@ def lint(paths, config, binary=None, fix=None, rules=[], setup=None, **lintargs)
|
||||
[
|
||||
binary,
|
||||
os.path.join(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/widget/SwipeTracker.cpp b/widget/SwipeTracker.cpp
|
||||
index b09252fd60beb10d5865d226c39ee0c8a9c22d87..91f68161209c6ca3f3bac22997d4e2066f1fafec 100644
|
||||
index 887d06d3bd9cdaa934880e0ae7a11ec8b737fb61..e2bf27c0130701f1d50990b60a5ef76e93c5a6bf 100644
|
||||
--- a/widget/SwipeTracker.cpp
|
||||
+++ b/widget/SwipeTracker.cpp
|
||||
@@ -5,6 +5,7 @@
|
||||
@@ -3,6 +3,7 @@
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "SwipeTracker.h"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/widget/cocoa/VibrancyManager.mm b/widget/cocoa/VibrancyManager.mm
|
||||
index b4c14233c64dd3515518d3167f8ee2877fe41a93..2b91fa3044794765b8e15c6b66b348de4111f29f 100644
|
||||
index 5df70a63afb235d2db11712276bb63f756222a0f..8ba0bf1b046f58d9776981e0872a78144bed5139 100644
|
||||
--- a/widget/cocoa/VibrancyManager.mm
|
||||
+++ b/widget/cocoa/VibrancyManager.mm
|
||||
@@ -13,6 +13,7 @@
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "nsCocoaWindow.h"
|
||||
#include "mozilla/StaticPrefs_widget.h"
|
||||
@@ -10,7 +10,7 @@ index b4c14233c64dd3515518d3167f8ee2877fe41a93..2b91fa3044794765b8e15c6b66b348de
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
@@ -38,7 +39,23 @@ static NSVisualEffectMaterial VisualEffectMaterialForVibrancyType(
|
||||
@@ -36,7 +37,23 @@ static NSVisualEffectMaterial VisualEffectMaterialForVibrancyType(
|
||||
VibrancyType aType) {
|
||||
switch (aType) {
|
||||
case VibrancyType::Sidebar:
|
||||
@@ -35,7 +35,7 @@ index b4c14233c64dd3515518d3167f8ee2877fe41a93..2b91fa3044794765b8e15c6b66b348de
|
||||
case VibrancyType::Titlebar:
|
||||
return NSVisualEffectMaterialTitlebar;
|
||||
}
|
||||
@@ -78,6 +95,7 @@ - (NSView*)hitTest:(NSPoint)aPoint {
|
||||
@@ -76,6 +93,7 @@ static NSVisualEffectBlendingMode VisualEffectBlendingModeForVibrancyType(
|
||||
|
||||
- (void)prefChanged {
|
||||
self.blendingMode = VisualEffectBlendingModeForVibrancyType(mType);
|
||||
@@ -43,7 +43,7 @@ index b4c14233c64dd3515518d3167f8ee2877fe41a93..2b91fa3044794765b8e15c6b66b348de
|
||||
}
|
||||
@end
|
||||
|
||||
@@ -88,6 +106,7 @@ static void PrefChanged(const char* aPref, void* aClosure) {
|
||||
@@ -86,6 +104,7 @@ static void PrefChanged(const char* aPref, void* aClosure) {
|
||||
static constexpr nsLiteralCString kObservedPrefs[] = {
|
||||
"widget.macos.sidebar-blend-mode.behind-window"_ns,
|
||||
"widget.macos.titlebar-blend-mode.behind-window"_ns,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/widget/cocoa/nsCocoaUtils.mm b/widget/cocoa/nsCocoaUtils.mm
|
||||
index 540130c449b859f50847cad8177bd1065f67078a..83f96be9dc5aefe178e788472f220e9d560f5e2d 100644
|
||||
index d83639ff2aab890d9c89c162ec5a3dfda52bc017..92ac99a3afb5931216486473490b004404110ce7 100644
|
||||
--- a/widget/cocoa/nsCocoaUtils.mm
|
||||
+++ b/widget/cocoa/nsCocoaUtils.mm
|
||||
@@ -1632,7 +1632,8 @@ bool static ShouldConsiderStartingSwipeFromEvent(NSEvent* anEvent) {
|
||||
@@ -1631,7 +1631,8 @@ bool static ShouldConsiderStartingSwipeFromEvent(NSEvent* anEvent) {
|
||||
return [anEvent type] == NSEventTypeScrollWheel &&
|
||||
eventPhase == NSEventPhaseBegan &&
|
||||
[anEvent hasPreciseScrollingDeltas] &&
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/widget/cocoa/nsDragService.mm b/widget/cocoa/nsDragService.mm
|
||||
index d5db98bff66a4daace6454af16406822d79fe912..522262b8d7ccba1f333755c48b0327cd098a5248 100644
|
||||
index 3b61c3a0d500e14e78d9009c821b47e70926cc97..b4cbc6e0dc0d43a55f074d4908dd414b859e16ed 100644
|
||||
--- a/widget/cocoa/nsDragService.mm
|
||||
+++ b/widget/cocoa/nsDragService.mm
|
||||
@@ -23,6 +23,7 @@
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "mozilla/PresShell.h"
|
||||
#include "mozilla/dom/Document.h"
|
||||
#include "mozilla/dom/DocumentInlines.h"
|
||||
@@ -10,7 +10,7 @@ index d5db98bff66a4daace6454af16406822d79fe912..522262b8d7ccba1f333755c48b0327cd
|
||||
#include "nsIContent.h"
|
||||
#include "nsCocoaUtils.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
@@ -147,6 +148,10 @@
|
||||
@@ -146,6 +147,10 @@ NSImage* nsDragSession::ConstructDragImage(nsINode* aDOMNode,
|
||||
bitsPerPixel:32];
|
||||
|
||||
uint8_t* dest = [imageRep bitmapData];
|
||||
@@ -21,7 +21,7 @@ index d5db98bff66a4daace6454af16406822d79fe912..522262b8d7ccba1f333755c48b0327cd
|
||||
for (uint32_t i = 0; i < height; ++i) {
|
||||
uint8_t* src = map.mData + i * map.mStride;
|
||||
for (uint32_t j = 0; j < width; ++j) {
|
||||
@@ -154,15 +159,15 @@
|
||||
@@ -153,15 +158,15 @@ NSImage* nsDragSession::ConstructDragImage(nsINode* aDOMNode,
|
||||
// is premultipled here. Also, Quartz likes RGBA, so do that translation
|
||||
// as well.
|
||||
#ifdef IS_BIG_ENDIAN
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user