Merge branch 'download-animation' of https://github.com/BrielOtero/desktop into download-animation

This commit is contained in:
Mr. M
2025-04-27 09:21:36 +02:00
145 changed files with 56451 additions and 1609 deletions

View File

@@ -1,8 +1,8 @@
diff --git a/Cargo.lock b/Cargo.lock
index c91f39b3afbe712355194593ae39514a83de6605..e6c2b77a69d9274ff1c7578ab4df4f07533f7441 100644
index 38508fffccbce801a02d4a4211f368674307c4d3..5ce56c36da2e242ad81621c2032eb68dcd26e960 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3850,8 +3850,6 @@ dependencies = [
@@ -3931,8 +3931,6 @@ dependencies = [
[[package]]
name = "mime_guess"
version = "2.0.4"

View File

@@ -1,14 +1,14 @@
diff --git a/Cargo.toml b/Cargo.toml
index a99b447250d36dd0146e031fa22503bc88eeae39..86829fc7075054f832a04825c98325a925cf5b0f 100644
index d3d529b487f80d4b4f3bfa13cdd3f62946352db8..b35a9e0e3339d48d1cd0cab7b22d030f330e40d1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -205,6 +205,9 @@ rure = { path = "third_party/rust/rure" }
@@ -217,6 +217,9 @@ rure = { path = "third_party/rust/rure" }
# Patch `plist` to work with `indexmap` 2.*
plist = { path = "third_party/rust/plist" }
+# Patch mime_guess to add missing mime types
+mime_guess = { path = "third_party/rust/mime_guess" }
+
# To-be-published changes.
unicode-bidi = { git = "https://github.com/servo/unicode-bidi", rev = "ca612daf1c08c53abe07327cb3e6ef6e0a760f0c" }
nss-gk-api = { git = "https://github.com/beurdouche/nss-gk-api", rev = "e48a946811ffd64abc78de3ee284957d8d1c0d63" }
# Patch `unicode-width` 0.1.* to 0.2.
unicode-width = { path = "build/rust/unicode-width" }

View File

@@ -1,5 +1,5 @@
diff --git a/browser/actors/WebRTCParent.sys.mjs b/browser/actors/WebRTCParent.sys.mjs
index be66de4a1ef044341c2e1d6953806550897df45a..ff6ef3511076b25e00ca4d0189f666ec7aa94fe8 100644
index 40e3a057a1d4b2f9bcfb73fa5ff96b2555865434..a92bed06766dd930bd336d56cd9ddcf3c6c0eeca 100644
--- a/browser/actors/WebRTCParent.sys.mjs
+++ b/browser/actors/WebRTCParent.sys.mjs
@@ -152,6 +152,7 @@ export class WebRTCParent extends JSWindowActorParent {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 78572e5480a6137c5b7de89c489956f5d68ef698..1c72fe9a5419e211dea25271113981aeda46ec66 100644
index 89b8b830e8f53582dd9910b0172098d31a8d8967..51bdc847823cb95f811b7e9d2d864b9aacf0e364 100644
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -3363,3 +3363,5 @@ pref("toolkit.contentRelevancy.enabled", false);
@@ -3375,3 +3375,5 @@ pref("toolkit.contentRelevancy.enabled", false);
pref("toolkit.contentRelevancy.ingestEnabled", false);
// Pref to enable extra logging for the content relevancy feature
pref("toolkit.contentRelevancy.log", false);

View File

@@ -31,6 +31,7 @@ pref("browser.privateWindowSeparation.enabled", false);
// Mica
pref("widget.windows.mica", true);
pref("widget.windows.mica.popups", true);
pref("widget.windows.mica.toplevel-backdrop", 2);
#endif
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
@@ -142,10 +143,6 @@ pref('zen.view.experimental-rounded-view', false);
pref('zen.view.experimental-rounded-view', true);
#endif
#ifdef XP_WIN
pref('zen.widget.windows.acrylic', true);
#endif
// Glance
pref('zen.glance.enabled', true);
pref('zen.glance.hold-duration', 300); // in ms
@@ -205,7 +202,6 @@ pref('zen.downloads.download-animation-duration', 1210); // ms
pref('zen.startup.smooth-scroll-in-tabs', true);
// Zen Workspaces
pref('zen.workspaces.disabled_for_testing', false);
pref('zen.workspaces.hide-default-container-indicator', true);
pref('zen.workspaces.force-container-workspace', false);
pref('zen.workspaces.open-new-tab-if-last-unpinned-tab-is-closed', false);
@@ -341,11 +337,7 @@ pref("network.predictor.enable-hover-on-ssl", true);
pref("network.http.speculative-parallel-limit", 10);
pref("network.http.rcwn.enabled", false);
// Enable Browser Toolbox, Ctrl+Shift+Alt+I for debugging and modifying UI
pref("devtools.debugger.remote-enabled", false);
pref("devtools.chrome.enabled", true);
// Disable firefox's revamp
// Disable Firefox's revamp
pref("sidebar.revamp", false, locked);
pref("sidebar.verticalTabs", false, locked);
@@ -460,10 +452,6 @@ pref("browser.ml.chat.sidebar", false);
pref("browser.ml.enable", false);
// ---- Experimental settings to try make zen faster
pref("gfx.canvas.accelerated.cache-items", 32768);
pref("gfx.canvas.accelerated.cache-size", 256);
pref("gfx.content.skia-font-cache-size", 80);
pref("media.memory_cache_max_size", 1048576);
pref("media.cache_readahead_limit", 9000);
pref("media.cache_resume_threshold", 3600);
@@ -478,4 +466,5 @@ pref("layers.gpu-process.enabled", true);
// Picture-in-picture
pref("media.videocontrols.picture-in-picture.video-toggle.enabled", true);
pref("media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled", true);
// TODO: Enable once we have a proper settings page
pref("media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled", false);

View File

@@ -1,14 +1,14 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index 2ca8bdd2674fb4addf3bbf94ff17abc5c93c6293..dd965d8d190e8cdacbeb3d80995ad1a906e64079 100644
index 7d7e8697f02f90d4f336c9ab0a73a89848e0c21c..d113b439888d26629ce5f6b5d35f8fa12249774b 100644
--- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml
@@ -26,7 +26,13 @@
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
<box id="after-splitter"></box>
</div>
@@ -23,7 +23,13 @@
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
</vbox>
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+<vbox flex="1" id="zen-appcontent-wrapper">
+<html:div id="zen-appcontent-navbar-container"></html:div>
+<hbox id="zen-tabbox-wrapper" flex="1">
+ <html:div id="zen-appcontent-navbar-container"></html:div>
+ <hbox id="zen-tabbox-wrapper" flex="1">
<tabbox id="tabbrowser-tabbox" flex="1" tabcontainer="tabbrowser-tabs">
+#include zen-tabbrowser-elements.inc.xhtml
<tabpanels id="tabbrowser-tabpanels" flex="1" selectedIndex="0"/>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f288919ae0d 100644
index ea79d296e7dd0f8fd812b0677a252af5cf7ad26e..bd95ef5d6b99399c859af1cf71d9d62477f4ac2b 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 b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -2698,6 +2699,11 @@ var XULBrowserWindow = {
@@ -2338,6 +2339,11 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@@ -22,7 +22,7 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) {
@@ -5194,7 +5200,7 @@ function switchToTabHavingURI(
@@ -4814,7 +4820,7 @@ function switchToTabHavingURI(
ignoreQueryString || replaceQueryString,
ignoreFragmentWhenComparing
);
@@ -31,7 +31,7 @@ index b89846a1103827b7e65c0b6c9197e80761e3f5c0..cc7205765244738743db92bfcafc1f28
for (let i = 0; i < browsers.length; i++) {
let browser = browsers[i];
let browserCompare = cleanURL(
@@ -5235,7 +5241,7 @@ function switchToTabHavingURI(
@@ -4857,7 +4863,7 @@ function switchToTabHavingURI(
}
if (!doAdopt) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index 0d0a559a6473149b50f4bf18d059e86907c4acd3..25ad798eb26f04262d069fdaf1f3fb00adec9807 100644
index 51a25aaa5558e6e17246d54a7ed95d5ddf3ecdab..b49984c8711fc9f5f19f0cf6ecca07a8cca0d125 100644
--- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml
@@ -26,6 +26,7 @@
@@ -10,35 +10,28 @@ index 0d0a559a6473149b50f4bf18d059e86907c4acd3..25ad798eb26f04262d069fdaf1f3fb00
persist="screenX screenY width height sizemode"
data-l10n-sync="true">
<head>
@@ -104,6 +105,8 @@
@@ -104,8 +105,11 @@
<title data-l10n-id="browser-main-window-default-title"></title>
+#include zen-preloaded.inc.xhtml
+
# All JS files which are needed by browser.xhtml and other top level windows to
# support MacOS specific features *must* go into the global-scripts.inc file so
# that they can be shared with macWindow.inc.xhtml.
@@ -148,6 +151,7 @@
window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
</script>
<script src="chrome://browser/content/global-scripts.js"></script>
<script src="chrome://browser/content/browser-main.js"></script>
+#include zen-assets.inc.xhtml
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles)
@@ -169,9 +173,11 @@
@@ -127,9 +131,12 @@
</vbox>
</html:template>
-#include navigator-toolbox.inc.xhtml
-
-#include browser-box.inc.xhtml
+ <hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
+ <vbox id="zen-toast-container"></vbox>
+ #include navigator-toolbox.inc.xhtml
+ #include browser-box.inc.xhtml
+ </hbox>
+<hbox id="zen-main-app-wrapper" flex="1" persist="zen-compact-mode">
+ <vbox id="zen-toast-container"></vbox>
#include navigator-toolbox.inc.xhtml
#include browser-box.inc.xhtml
+</hbox>
<html:template id="customizationPanel">
<box id="customization-container" flex="1" hidden="true"><![CDATA[

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c5d0f33a6 100644
index 00c8976d3e258c0875d7da2f3ec823d8907a84c9..b5735712aaa7c2ae2baa4b858e735413b130ca94 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
@@ -11,46 +11,29 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
<script src="chrome://browser/content/navigator-toolbox.js" />
<!-- Menu -->
@@ -17,9 +17,8 @@
@@ -17,9 +17,9 @@
#include browser-menubar.inc
</toolbaritem>
<spacer flex="1" skipintoolbarset="true" style="order: 1000;"/>
-#include titlebar-items.inc.xhtml
</toolbar>
-
+<hbox id="titlebar">
<toolbar id="TabsToolbar"
class="browser-toolbar browser-titlebar"
fullscreentoolbar="true"
@@ -32,7 +31,7 @@
<hbox class="titlebar-spacer" type="pre-tabs"/>
- <hbox flex="1" align="end" class="toolbar-items">
+ <hbox flex="1" align="start" class="toolbar-items">
<toolbartabstop/>
<hbox id="TabsToolbar-customization-target" flex="1">
<toolbarbutton id="firefox-view-button"
@@ -40,6 +39,7 @@
data-l10n-id="toolbar-button-firefox-view-2"
role="button"
aria-pressed="false"
+ hidden="true"
cui-areatype="toolbar"
removable="true"/>
@@ -50,6 +50,10 @@
tooltip="tabbrowser-tab-tooltip"
orient="horizontal"
stopwatchid="FX_TAB_CLICK_MS">
+<html:div id="zen-essentials-container" skipintoolbarset="true"></html:div>
stopwatchid="tabClick">
+<html:div id="zen-essentials-wrapper" skipintoolbarset="true"></html:div>
+<hbox id="zen-current-workspace-indicator-container"></hbox>
+<html:div id="zen-tabs-wrapper">
+<html:div id="zen-browser-tabs-container">
<hbox class="tab-drop-indicator" hidden="true"/>
<html:span id="tab-drag-empty-feedback" role="presentation"/>
# If the name (tabbrowser-arrowscrollbox) or structure of this changes
# significantly, there is an optimization in
@@ -75,6 +79,8 @@
@@ -76,6 +80,8 @@
tooltip="dynamic-shortcut-tooltip"
data-l10n-id="tabs-toolbar-new-tab"/>
<html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
@@ -59,7 +42,7 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
</tabs>
<toolbarbutton id="new-tab-button"
@@ -100,10 +106,10 @@
@@ -101,9 +107,10 @@
#include private-browsing-indicator.inc.xhtml
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
@@ -67,20 +50,7 @@ index feb9e4ef7e872b4cfbf0d55f24a34db275951c66..3ce9b9919ff736885b8aa8943bbbce3c
+#include zen-sidebar-icons.inc.xhtml
</toolbar>
-
+</hbox>
<toolbar id="nav-bar"
class="browser-toolbar chromeclass-location"
data-l10n-id="navbar-accessible"
@@ -489,10 +495,10 @@
consumeanchor="PanelUI-button"
data-l10n-id="appmenu-menu-button-closed2"/>
</toolbaritem>
+#include titlebar-items.inc.xhtml
<hbox class="titlebar-spacer" type="post-tabs"/>
#include private-browsing-indicator.inc.xhtml
<toolbarbutton class="content-analysis-indicator toolbarbutton-1 content-analysis-indicator-icon"/>
-#include titlebar-items.inc.xhtml
</toolbar>
<toolbar id="PersonalToolbar"

View File

@@ -1,16 +1,11 @@
diff --git a/browser/base/content/nsContextMenu.sys.mjs b/browser/base/content/nsContextMenu.sys.mjs
index 94d3c2bb401c2e4246340a6c2d63c9d3561ff5e1..62c599f78748e708c8f36c05935822e8808996b5 100644
index 3bd0ee8af8b696161d18fd2a978f9e25972ed3ad..9e602a942271bd54231dc66363f8db51aea9e78a 100644
--- a/browser/base/content/nsContextMenu.sys.mjs
+++ b/browser/base/content/nsContextMenu.sys.mjs
@@ -1109,6 +1109,13 @@ export class nsContextMenu {
@@ -1111,6 +1111,8 @@ export class nsContextMenu {
!this.isSecureAboutPage()
);
+ this.showItem(
+ "context-zenAddToWebPanel",
+ this.onLink && !this.onMailtoLink && !this.onTelLink
+ );
+
+ this.showItem("context-zenSplitLink", this.onLink && !this.onMailtoLink && !this.onTelLink);
+
let canNotStrip =

View File

@@ -30,11 +30,11 @@
# Scripts used all over the browser
<script>
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenFolders.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesCommon.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenThemesImporter.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenCompactMode.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/ZenUIManager.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenTabUnloader.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenPinnedTabsStorage.mjs", this);
Services.scriptloader.loadSubScript("chrome://browser/content/zen-components/ZenWorkspacesStorage.mjs", this);

View File

@@ -53,7 +53,6 @@
content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs)
content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css)
* content/browser/zen-styles/zen-tabs/vertical-tabs.css (../../zen/tabs/zen-tabs/vertical-tabs.css)
content/browser/zen-styles/zen-tabs/horizontal-tabs.css (../../zen/tabs/zen-tabs/horizontal-tabs.css)
content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs)
content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css)

View File

@@ -2,6 +2,9 @@
<command id="cmd_zenCompactModeToggle" />
<command id="cmd_zenCompactModeShowSidebar" />
<command id="cmd_zenCompactModeShowToolbar" />
<command id="cmd_zenCompactModeHideSidebar" />
<command id="cmd_zenCompactModeHideToolbar" />
<command id="cmd_zenCompactModeHideBoth" />
<command id="cmd_zenWorkspaceForward" />
<command id="cmd_zenWorkspaceBackward" />
@@ -11,6 +14,7 @@
<command id="cmd_zenSplitViewHorizontal" />
<command id="cmd_zenSplitViewUnsplit" />
<command id="cmd_zenSplitViewLinkInNewTab" />
<command id="cmd_zenSplitViewContextMenu" />
<!-- Workspace commands -->
<command id="cmd_zenWorkspaceSwitch1" />

View File

@@ -1,5 +1,5 @@
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left" onpopuphidden="gZenThemePicker.handlePanelClose();" onpopupshowing="gZenThemePicker.handlePanelOpen();">
<panel flip="side" type="arrow" orient="vertical" id="PanelUI-zen-gradient-generator" position="bottomright topright" mainview="true" side="left">
<panelmultiview id="PanelUI-zen-gradient-generator-multiview" mainViewId="PanelUI-zen-gradient-generator-view">
<panelview id="PanelUI-zen-gradient-generator-view" class="PanelUI-subView zen-theme-picker" role="document" mainview-with-header="true" has-custom-header="true">
<hbox>
@@ -34,7 +34,7 @@
<hbox id="PanelUI-zen-gradient-colors-wrapper">
<vbox flex="1">
<label data-l10n-id="zen-panel-ui-gradient-generator-opacity-text"></label>
<html:input type="range" min="0" max="1" value="0.5" step="0.05" oninput="gZenThemePicker.onOpacityChange(event);" id="PanelUI-zen-gradient-generator-opacity" />
<html:input type="range" min="0" max="1" value="0.5" step="0.05" id="PanelUI-zen-gradient-generator-opacity" />
</vbox>
<vbox id="PanelUI-zen-gradient-generator-texture-wrapper">
</vbox>
@@ -45,7 +45,7 @@
<label data-l10n-id="zen-panel-ui-gradient-generator-custom-color"></label>
<hbox>
<html:input type="text" placeholder="#000000" id="PanelUI-zen-gradient-generator-custom-input" />
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton" oncommand="gZenThemePicker.addCustomColor();" data-l10n-id="zen-panel-ui-gradient-generator-custom-color-add">
<toolbarbutton id="PanelUI-zen-gradient-generator-color-custom-add" class="subviewbutton" data-l10n-id="zen-panel-ui-gradient-generator-custom-color-add">
<image></image>
</toolbarbutton>
</hbox>
@@ -57,16 +57,16 @@
</panelmultiview>
</panel>
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left" onpopuphidden="ZenWorkspaces.handlePanelHidden();">
<panel flip="slide" type="arrow" orient="vertical" id="PanelUI-zen-workspaces" position="bottomright topright" mainview="true" side="left">
<panelmultiview id="PanelUI-zen-workspaces-multiview" mainViewId="PanelUI-zen-workspaces-view">
<panelview id="PanelUI-zen-workspaces-view" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true" closemenu="none">
<vbox>
<hbox>
<h3 data-l10n-id="zen-panel-ui-workspaces-text" id="PanelUI-zen-workspaces-header"></h3>
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" oncommand="ZenWorkspaces.toggleReorderMode();" class="subviewbutton">
<toolbarbutton id="PanelUI-zen-workspaces-reorder-mode" class="subviewbutton">
<image></image>
</toolbarbutton>
<toolbarbutton id="PanelUI-zen-workspaces-new" oncommand="ZenWorkspaces.openSaveDialog();" class="subviewbutton">
<toolbarbutton id="PanelUI-zen-workspaces-new" class="subviewbutton">
<image></image>
</toolbarbutton>
</hbox>
@@ -78,14 +78,14 @@
<vbox class="PanelUI-zen-workspaces-user-create">
<h1 data-l10n-id="zen-panel-ui-workspaces-create-text"></h1>
<hbox class="PanelUI-zen-workspaces-creation-wraper">
<hbox class="PanelUI-zen-workspaces-icons-container create" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceCreationNameChange(this);" />
<hbox class="PanelUI-zen-workspaces-icons-container create"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-create-input" type="text" placeholder="Enter workspace name" />
</hbox>
</vbox>
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-create-footer">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" oncommand="ZenWorkspaces.saveWorkspaceFromCreate();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-create-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-save">
</button>
<button id="PanelUI-zen-workspaces-create-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
<button id="PanelUI-zen-workspaces-create-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-create-cancel">
</button>
</html:moz-button-group>
</panelview>
@@ -93,43 +93,39 @@
<vbox class="PanelUI-zen-workspaces-user-create">
<h1 data-l10n-id="zen-panel-ui-workspaces-edit-text"></h1>
<hbox class="PanelUI-zen-workspaces-creation-wraper">
<hbox class="PanelUI-zen-workspaces-icons-container edit" onclick="ZenWorkspaces.onWorkspaceIconContainerClick(event);"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" oninput="ZenWorkspaces.onWorkspaceEditChange();" />
<hbox class="PanelUI-zen-workspaces-icons-container edit"></hbox>
<html:input autofocus="true" id="PanelUI-zen-workspaces-edit-input" type="text" placeholder="Enter workspace name" />
</hbox>
</vbox>
<html:moz-button-group class="panel-footer" id="PanelUI-zen-workspaces-edit-footer">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" oncommand="ZenWorkspaces.saveWorkspaceFromEdit();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
<button disabled="true" default="true" slot="primary" id="PanelUI-zen-workspaces-edit-save" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-save">
</button>
<button id="PanelUI-zen-workspaces-edit-cancel" oncommand="ZenWorkspaces.closeWorkspacesSubView();" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
<button id="PanelUI-zen-workspaces-edit-cancel" class="footer-button" data-l10n-id="zen-panel-ui-workspaces-edit-cancel">
</button>
</html:moz-button-group>
</panelview>
<panelview id="PanelUI-zen-workspaces-icon-picker" class="PanelUI-subView" role="document" mainview-with-header="true" has-custom-header="true">
<vbox id="PanelUI-zen-workspaces-icon-picker-wrapper">
<html:div id="PanelUI-zen-workspaces-icon-search-bar">
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input" oninput="ZenWorkspaces.conductSearch();"/>
<html:input autofocus="true" type="text" id="PanelUI-zen-workspaces-icon-search-input"/>
</html:div>
</vbox>
</panelview>
</panelmultiview>
</panel>
<menupopup id="zenWorkspaceActionsMenu"
onpopupshowing="ZenWorkspaces.updateContextMenu(this);"
onpopuphidden="if (event.target == this) ZenWorkspaces.onContextMenuClose();">
<menuitem id="context_zenOpenWorkspace" oncommand="ZenWorkspaces.openWorkspace();" data-l10n-id="zen-workspaces-panel-context-open"/>
<menupopup id="zenWorkspaceActionsMenu">
<menuitem id="context_zenOpenWorkspace" data-l10n-id="zen-workspaces-panel-context-open"/>
<menuseparator/>
<menuitem id="context_zenSetAsDefaultWorkspace" oncommand="ZenWorkspaces.setDefaultWorkspace();" data-l10n-id="zen-workspaces-panel-context-set-default"/>
<menuitem id="context_zenEditWorkspace" oncommand="ZenWorkspaces.contextEdit(event);" data-l10n-id="zen-workspaces-panel-context-edit"/>
<menuitem id="context_zenEditWorkspace" data-l10n-id="zen-workspaces-panel-context-edit"/>
<menu id="context_zenWorkspacesOpenInContainerTab"
data-l10n-id="zen-workspaces-panel-context-open-in-container-tab"
selection-type="single"
node-type="link"
hide-if-private-browsing="true"
hide-if-usercontext-disabled="true">
<menupopup oncommand="ZenWorkspaces.contextChangeContainerTab(event);"
onpopupshowing="return ZenWorkspaces.createContainerTabMenu(event);" />
<menupopup />
</menu>
<menuseparator/>
<menuitem id="context_zenDeleteWorkspace" oncommand="ZenWorkspaces.contextDelete(event);" data-l10n-id="zen-workspaces-panel-context-delete"/>
<menuitem id="context_zenDeleteWorkspace" data-l10n-id="zen-workspaces-panel-context-delete"/>
</menupopup>

View File

@@ -8,6 +8,6 @@
skipintoolbarset="true"
context="toolbar-context-menu"
mode="icons">
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" data-l10n-id="sidebar-zen-expand" cui-areatype="toolbar" oncommand="gZenVerticalTabsManager.toggleExpand();"></toolbarbutton>
<toolbarbutton removable="true" class="chromeclass-toolbar-additional toolbarbutton-1 zen-sidebar-action-button" id="zen-expand-sidebar-button" command="cmd_zenToggleSidebar" data-l10n-id="sidebar-zen-expand" cui-areatype="toolbar"></toolbarbutton>
<toolbarbutton id="zen-workspaces-button" class="chromeclass-toolbar-additional" overflows="false" removable="false"></toolbarbutton>
</toolbar>

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
index 824c5df20ee13af7af2ce8657506f6f3f457aafc..6ef49535676325768497c1804f91c9e93959199a 100644
index 4401c78d34007fa7481f8b8eeb070d17110821ae..064f14a7adf4ce1b98d58302998272444466c3ee 100644
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -103,3 +103,5 @@ browser.jar:
@@ -105,3 +105,5 @@ browser.jar:
# L10n resources and overrides.
% override chrome://global/locale/appstrings.properties chrome://browser/locale/appstrings.properties

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 7747d90981aea9437bf2d9cf46ec17be0b9ad64c..656d640da0efeb59a4037bb450e0cb1f69dda0ba 100644
index 5911b276fdc9889d3cb61bac3d302ec5239e4a90..a405f8a0204e98fa9de08f1cd7b6761f0fc6198e 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -1270,6 +1270,7 @@ function maybeRecordToHandleTelemetry(uri, isLaunch) {

View File

@@ -1,20 +1,19 @@
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index b8b6d30f0b3c968a8615ca601e06e50261d0dae6..5c2b718b902aed2ef8d7a4b622ba882ee937c655 100644
index a6a7f9165aece774c3f1c15f7e352b11a4bf90f4..a4b6124b85f099c6f12d297fc26f2040370c337c 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -106,6 +106,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.sys.mjs",
clearTimeout: "resource://gre/modules/Timer.sys.mjs",
setTimeout: "resource://gre/modules/Timer.sys.mjs",
+ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs",
});
@@ -8,6 +8,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};
XPCOMUtils.defineLazyServiceGetters(lazy, {
@@ -1896,7 +1897,7 @@ BrowserGlue.prototype = {
lazy.TabCrashHandler.init();
ChromeUtils.defineESModuleGetters(lazy, {
+ gZenUIMigration: "chrome://browser/content/zen-components/ZenUIMigration.mjs",
AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs",
AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
@@ -1886,6 +1887,7 @@ BrowserGlue.prototype = {
lazy.ProcessHangMonitor.init();
-
+ lazy.gZenUIMigration.init(this._isNewProfile, aWindow);
// A channel for "remote troubleshooting" code...
let channel = new lazy.WebChannel(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d16ee46c8 100644
index 91088fab1759b9af908912648d28daa5938a29c9..3f52ee8cd77ac171fd2cbf355ade1371e57d0db5 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -13,6 +13,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -19,7 +19,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
const kSpecialWidgetPfx = "customizableui-special-";
@@ -317,13 +318,11 @@ var CustomizableUIInternal = {
@@ -338,13 +339,11 @@ var CustomizableUIInternal = {
"vertical-spacer",
"urlbar-container",
"spring",
@@ -35,7 +35,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
this.registerArea(
CustomizableUI.AREA_NAVBAR,
{
@@ -331,7 +330,6 @@ var CustomizableUIInternal = {
@@ -352,7 +351,6 @@ var CustomizableUIInternal = {
overflowable: true,
defaultPlacements: navbarPlacements,
verticalTabsDefaultPlacements: [
@@ -43,7 +43,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
"alltabs-button",
],
defaultCollapsed: false,
@@ -356,10 +354,7 @@ var CustomizableUIInternal = {
@@ -377,10 +375,7 @@ var CustomizableUIInternal = {
{
type: CustomizableUI.TYPE_TOOLBAR,
defaultPlacements: [
@@ -54,7 +54,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
],
verticalTabsDefaultPlacements: [],
defaultCollapsed: null,
@@ -422,6 +417,7 @@ var CustomizableUIInternal = {
@@ -462,6 +457,7 @@ var CustomizableUIInternal = {
CustomizableUI.AREA_NAVBAR,
CustomizableUI.AREA_BOOKMARKS,
CustomizableUI.AREA_TABSTRIP,
@@ -62,7 +62,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
]);
if (AppConstants.platform != "macosx") {
toolbars.add(CustomizableUI.AREA_MENUBAR);
@@ -1151,6 +1147,9 @@ var CustomizableUIInternal = {
@@ -1262,6 +1258,9 @@ var CustomizableUIInternal = {
placements = gPlacements.get(area);
}
@@ -72,7 +72,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
// For toolbars that need it, mark as dirty.
let defaultPlacements = areaProperties.get("defaultPlacements");
if (
@@ -1564,7 +1563,7 @@ var CustomizableUIInternal = {
@@ -1769,7 +1768,7 @@ var CustomizableUIInternal = {
lazy.log.info(
"Widget " + aWidgetId + " not found, unable to remove from " + aArea
);
@@ -81,7 +81,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
}
this.notifyDOMChange(widgetNode, null, container, true, () => {
@@ -1574,7 +1573,7 @@ var CustomizableUIInternal = {
@@ -1779,7 +1778,7 @@ var CustomizableUIInternal = {
// We also need to remove the panel context menu if it's there:
this.ensureButtonContextMenu(widgetNode);
if (gPalette.has(aWidgetId) || this.isSpecialWidget(aWidgetId)) {
@@ -90,7 +90,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
} else {
window.gNavToolbox.palette.appendChild(widgetNode);
}
@@ -1704,16 +1703,16 @@ var CustomizableUIInternal = {
@@ -1947,16 +1946,16 @@ var CustomizableUIInternal = {
elem.setAttribute("skipintoolbarset", "true");
}
}
@@ -110,18 +110,18 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
// Handle initial state of vertical tabs.
if (isVerticalTabs) {
// Show the vertical tabs toolbar
@@ -1873,6 +1872,10 @@ var CustomizableUIInternal = {
},
insertWidgetBefore(aNode, aNextNode, aContainer, aArea) {
+ if (aArea === CustomizableUI.AREA_NAVBAR && aNode.ownerGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
@@ -2198,6 +2197,10 @@ var CustomizableUIInternal = {
* The identifier string of the area that aNode is being inserted into.
*/
insertWidgetBefore(aNode, aNextNode, aContainer, aAreaId) {
+ if (aAreaId === CustomizableUI.AREA_NAVBAR && aNode.ownerGlobal.gZenVerticalTabsManager._hasSetSingleToolbar) {
+ aContainer = aNode.ownerDocument.getElementById("zen-sidebar-top-buttons-customization-target");
+ aArea = "zen-sidebar-top-buttons";
+ aAreaId = "zen-sidebar-top-buttons";
+ }
this.notifyDOMChange(aNode, aNextNode, aContainer, false, () => {
this.setLocationAttributes(aNode, aArea);
this.setLocationAttributes(aNode, aAreaId);
aContainer.insertBefore(aNode, aNextNode);
@@ -2744,7 +2747,6 @@ var CustomizableUIInternal = {
@@ -3321,7 +3324,6 @@ var CustomizableUIInternal = {
if (!this.isWidgetRemovable(aWidgetId)) {
return;
}
@@ -129,16 +129,16 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
let placements = gPlacements.get(oldPlacement.area);
let position = placements.indexOf(aWidgetId);
if (position != -1) {
@@ -3735,7 +3737,7 @@ var CustomizableUIInternal = {
}
},
@@ -4556,7 +4558,7 @@ var CustomizableUIInternal = {
* For all registered areas, builds those areas to reflect the current
* placement state of all widgets.
*/
- _rebuildRegisteredAreas() {
+ _rebuildRegisteredAreas(zenDontRebuildCollapsed = false) {
for (let [areaId, areaNodes] of gBuildAreas) {
let placements = gPlacements.get(areaId);
let isFirstChangedToolbar = true;
@@ -3746,7 +3748,7 @@ var CustomizableUIInternal = {
@@ -4567,7 +4569,7 @@ var CustomizableUIInternal = {
if (area.get("type") == CustomizableUI.TYPE_TOOLBAR) {
let defaultCollapsed = area.get("defaultCollapsed");
let win = areaNode.ownerGlobal;
@@ -147,7 +147,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
win.setToolbarVisibility(
areaNode,
typeof defaultCollapsed == "string"
@@ -4923,6 +4925,7 @@ export var CustomizableUI = {
@@ -5858,6 +5860,7 @@ export var CustomizableUI = {
unregisterArea(aName, aDestroyPlacements) {
CustomizableUIInternal.unregisterArea(aName, aDestroyPlacements);
},
@@ -155,7 +155,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
/**
* Add a widget to an area.
* If the area to which you try to add is not known to CustomizableUI,
@@ -6916,11 +6919,11 @@ class OverflowableToolbar {
@@ -7905,11 +7908,11 @@ class OverflowableToolbar {
parseFloat(style.paddingLeft) -
parseFloat(style.paddingRight) -
toolbarChildrenWidth;
@@ -169,7 +169,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
});
lazy.log.debug(
@@ -6930,7 +6933,8 @@ class OverflowableToolbar {
@@ -7919,7 +7922,8 @@ class OverflowableToolbar {
// If the target has min-width: 0, their children might actually overflow
// it, so check for both cases explicitly.
let targetContentWidth = Math.max(targetWidth, targetChildrenWidth);
@@ -179,7 +179,7 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
return { isOverflowing, targetContentWidth, totalAvailWidth };
}
@@ -7024,7 +7028,7 @@ class OverflowableToolbar {
@@ -8013,7 +8017,7 @@ class OverflowableToolbar {
}
}
if (!inserted) {
@@ -188,13 +188,12 @@ index 9392b42a1de7310719a6cc8aaf11bd857e8fa69a..24dc9acd733ae401f8cdfb2351a7275d
}
child.removeAttribute("cui-anchorid");
child.removeAttribute("overflowedItem");
@@ -7186,6 +7190,9 @@ class OverflowableToolbar {
* @param {MouseEvent} aEvent the click event.
*/
#onClickDefaultListButton(aEvent) {
+ if (aEvent.view.gZenVerticalTabsManager._hasSetSingleToolbar && this.#toolbar.id == 'nav-bar') {
+ return;
+ }
if (this.#defaultListButton.open) {
this.#defaultListButton.open = false;
lazy.PanelMultiView.hidePopup(this.#defaultListPanel);
@@ -8358,7 +8362,7 @@ class OverflowableToolbar {
break;
}
case "mousedown": {
- if (aEvent.button != 0) {
+ if (aEvent.button != 0 || this.#toolbar.id == "zen-sidebar-top-buttons") { // Fix https://github.com/zen-browser/desktop/issues/7718
break;
}
if (aEvent.target == this.#defaultListButton) {

View File

@@ -1,9 +1,9 @@
diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs
index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973c70543a9 100644
index 619bb2af5a3a0995fc93fa040696dd2854848ab5..bbc6bad906e9ccaf668ca99f4a0411f564ef1e56 100644
--- a/browser/components/customizableui/CustomizeMode.sys.mjs
+++ b/browser/components/customizableui/CustomizeMode.sys.mjs
@@ -357,7 +357,7 @@ CustomizeMode.prototype = {
this._transitioning = true;
@@ -500,7 +500,7 @@ export class CustomizeMode {
this.#transitioning = true;
let customizer = document.getElementById("customization-container");
- let browser = document.getElementById("browser");
@@ -11,7 +11,7 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
browser.hidden = true;
customizer.hidden = false;
@@ -488,7 +488,7 @@ CustomizeMode.prototype = {
@@ -637,7 +637,7 @@ export class CustomizeMode {
}
let customizer = document.getElementById("customization-container");
@@ -20,9 +20,9 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
customizer.hidden = true;
browser.hidden = false;
@@ -2397,6 +2397,20 @@ CustomizeMode.prototype = {
@@ -3125,6 +3125,20 @@ export class CustomizeMode {
if (makeSpaceImmediately) {
aItem.setAttribute("notransition", "true");
aDraggedOverItem.setAttribute("notransition", "true");
}
+ if (aItem.parentElement.id === "TabsToolbar-customization-target") {
+ // We change the border values so we can properly implement the native vertical tabs
@@ -38,6 +38,6 @@ index c9bdc165ff9afc8c3e43ed2cda0612b32a55450f..34f8af56753e2a898f49247036d47973
+ aItem.style.borderBottomStyle = "solid";
+ }
+ }
aItem.style[prop] = borderWidth + "px";
aItem.style.removeProperty(otherProp);
aDraggedOverItem.style[prop] = borderWidth + "px";
aDraggedOverItem.style.removeProperty(otherProp);
if (makeSpaceImmediately) {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/ToolbarContextMenu.sys.mjs b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
index af22f766a052372a68faca139161cccbf0d768f0..199591ca0609e8902e84a87baf50acc29f84ee3a 100644
index b88b0166fb99bc3d44a2e05798650b8ad6ab9a46..2e66c8294f0ef4f91ae160bd55b7417b55e9f5b2 100644
--- a/browser/components/customizableui/ToolbarContextMenu.sys.mjs
+++ b/browser/components/customizableui/ToolbarContextMenu.sys.mjs
@@ -240,8 +240,8 @@ export var ToolbarContextMenu = {

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js
index 010d0813557efd6d5a3a84ea589989f6e9ff195a..e26cc1be1f56919e6ec5f2432854b284837671ac 100644
index ec52437dba30633a374299a46c856e1df05dec0e..48617e32d56c3b3f525557ddeac6297555c48c04 100644
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -515,8 +515,7 @@ const PanelUI = {
@@ -12,7 +12,7 @@ index 010d0813557efd6d5a3a84ea589989f6e9ff195a..e26cc1be1f56919e6ec5f2432854b284
.appendChild(tempPanel);
let multiView = document.createXULElement("panelmultiview");
@@ -960,7 +959,7 @@ const PanelUI = {
@@ -957,7 +956,7 @@ const PanelUI = {
el.removeAttribute("data-lazy-l10n-id");
});

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658514db39f 100644
index 1f5e163bae58f3f1cac750ca32846cc8a80bd2ca..16034842b4ca5295aa3c9237db55035ecc4016d2 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -58,6 +58,7 @@ class BookmarkState {
@@ -59,6 +59,7 @@ class BookmarkState {
info,
tags = "",
keyword = "",
@@ -10,7 +10,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
isFolder = false,
children = [],
autosave = false,
@@ -82,12 +83,18 @@ class BookmarkState {
@@ -83,12 +84,18 @@ class BookmarkState {
keyword,
parentGuid: info.parentGuid,
index,
@@ -29,7 +29,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
/**
* Save edited title for the bookmark
*
@@ -181,6 +188,14 @@ class BookmarkState {
@@ -182,6 +189,14 @@ class BookmarkState {
"BookmarkState::createBookmark"
);
this._guid = results?.[0];
@@ -44,7 +44,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
return this._guid;
}
@@ -214,6 +229,14 @@ class BookmarkState {
@@ -215,6 +230,14 @@ class BookmarkState {
"BookmarkState::save::createFolder"
);
this._guid = results[0];
@@ -59,7 +59,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
return this._guid;
}
@@ -300,11 +323,97 @@ class BookmarkState {
@@ -301,11 +324,97 @@ class BookmarkState {
await lazy.PlacesTransactions.batch(transactions, "BookmarkState::save");
}
@@ -157,7 +157,7 @@ index fbdd6a34b12d4d957f7a2d9d95df0bfd65ba3f61..baaf34536f557c69fce3cc43e6f12658
/**
* Append transactions to update tags by given information.
*
@@ -902,8 +1011,15 @@ export var PlacesUIUtils = {
@@ -903,8 +1012,15 @@ export var PlacesUIUtils = {
aNode,
aWhere,
aWindow,

View File

@@ -1,10 +1,10 @@
diff --git a/browser/components/preferences/jar.mn b/browser/components/preferences/jar.mn
index 3b60d18e483bc3c4e9b4309f0dc1e4231b7116b1..e5b679b25941a7f1ed52db9fa3f7740a7220b9e4 100644
index 118709048e7de13f6ac10d0047e446b72303428f..c8cc2d7ee551b96be668a7844dab1db5abc9d684 100644
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -23,3 +23,5 @@ browser.jar:
content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg
content/browser/preferences/web-appearance-dark.svg
content/browser/preferences/web-appearance-light.svg
@@ -26,3 +26,5 @@ browser.jar:
content/browser/preferences/widgets/setting-control.mjs (widgets/setting-control/setting-control.mjs)
content/browser/preferences/widgets/setting-group.mjs (widgets/setting-group/setting-group.mjs)
content/browser/preferences/widgets/setting-group.css (widgets/setting-group/setting-group.css)
+
+ content/browser/preferences/zen-settings.js

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 8f6f78419a0876ebe6d0967a88ef03e464dbbd23..9339085014b797033c4ee1ed2e40f2506d1e9797 100644
index aa339be9ba94ed776fa25f2d72f9e6b25dc86cd3..4c6c725942b3d6f2a42938d444ac7645526623cc 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -218,7 +218,7 @@ function getBundleForLocales(newLocales) {
@@ -389,7 +389,7 @@ function getBundleForLocales(newLocales) {
])
);
return new Localization(

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 6386773b287ca6d06a0abe928850c5bb465828ed..b3459a2abcac5f21a5b24189ec1dc88e24626687 100644
index e4746e3408e68273126e6d2baf5afcf80721674b..e478aaf6bfefa6acd9062aeb3e4709ca0d5d779c 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -118,6 +118,7 @@ ChromeUtils.defineLazyGetter(this, "gSubDialog", function () {

View File

@@ -1,30 +1,29 @@
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 951af951598c3edc9bc431dd106e68d006ec4316..eb420d6c5ea346639eee531805aabbe7726c7769 100644
index 43be2b6ac84827bd13723e0211a3ade401934591..513584d7e720451efdb87350ac07d8b2590c1705 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -43,6 +43,8 @@
/>
@@ -44,6 +44,8 @@
<link rel="stylesheet" href="chrome://browser/skin/preferences/privacy.css" />
<link rel="stylesheet" href="chrome://browser/content/preferences/widgets/setting-group.css" />
+#include zen-preferences-links.xhtml
+
<link rel="localization" href="branding/brand.ftl"/>
<link rel="localization" href="browser/browser.ftl"/>
<!-- Used by fontbuilder.js -->
@@ -98,6 +100,12 @@
@@ -105,6 +107,11 @@
<hbox flex="1">
<vbox class="navigation">
+ <search-textbox
+ id="searchInput"
+ data-l10n-id="search-input-box2"
+ data-l10n-attrs="placeholder, style"
+ />
+
+ 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"
@@ -111,6 +119,50 @@
@@ -117,6 +124,50 @@
<label class="category-name" flex="1" data-l10n-id="pane-general-title"></label>
</richlistitem>
@@ -75,21 +74,19 @@ index 951af951598c3edc9bc431dd106e68d006ec4316..eb420d6c5ea346639eee531805aabbe7
<richlistitem id="category-home"
class="category"
value="paneHome"
@@ -229,11 +281,13 @@
@@ -228,11 +279,6 @@
<html:a href="about:policies" target="_blank" data-l10n-id="managed-notice"/>
</hbox>
</hbox>
+#if 0
<search-textbox
id="searchInput"
data-l10n-id="search-input-box2"
data-l10n-attrs="placeholder, style"
/>
+#endif
- <search-textbox
- id="searchInput"
- data-l10n-id="search-input-box2"
- data-l10n-attrs="placeholder, style"
- />
</hbox>
</hbox>
<vbox id="mainPrefPane">
@@ -247,6 +301,10 @@
@@ -246,6 +292,10 @@
#include sync.inc.xhtml
#include experimental.inc.xhtml
#include moreFromMozilla.inc.xhtml

View File

@@ -170,7 +170,6 @@ var gZenMarketplaceManager = {
for (const theme of Object.values(themes).sort((a, b) => a.name.localeCompare(b.name))) {
const sanitizedName = `theme-${theme.name?.replaceAll(/\s/g, '-')?.replaceAll(/[^A-z_-]+/g, '')}`;
const isThemeEnabled = theme.enabled === undefined || theme.enabled;
const fragment = window.MozXULElement.parseXULToFragment(`
<vbox class="zenThemeMarketplaceItem">
<vbox class="zenThemeMarketplaceItemContent">
@@ -181,6 +180,7 @@ var gZenMarketplaceManager = {
</vbox>
<hbox class="zenThemeMarketplaceItemActions">
${theme.preferences ? `<button id="zenThemeMarketplaceItemConfigureButton-${sanitizedName}" class="zenThemeMarketplaceItemConfigureButton" hidden="true"></button>` : ''}
${theme.homepage ? `<button id="zenThemeMarketplaceItemHomePageLink-${sanitizedName}" class="zenThemeMarketplaceItemHomepageButton" zen-theme-id="${theme.id}"></button>` : ''}
<button class="zenThemeMarketplaceItemUninstallButton" data-l10n-id="zen-theme-marketplace-remove-button" zen-theme-id="${theme.id}"></button>
</hbox>
</vbox>
@@ -274,6 +274,16 @@ var gZenMarketplaceManager = {
await this.removeTheme(event.target.getAttribute('zen-theme-id'));
});
if (theme.homepage) {
const homepageButton = fragment.querySelector('.zenThemeMarketplaceItemHomepageButton');
homepageButton.addEventListener('click', () => {
// open the homepage url in a new tab
const url = theme.homepage;
window.open(url, '_blank');
});
}
if (theme.preferences) {
fragment.querySelector('.zenThemeMarketplaceItemConfigureButton').addEventListener('click', () => {
dialog.showModal();
@@ -1024,4 +1034,9 @@ Preferences.addAll([
type: 'bool',
default: true,
},
{
id: 'media.videocontrols.picture-in-picture.enabled',
type: 'bool',
default: true,
},
]);

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 4810eca0825f9a6f07f242e804de2edb7bd697d8..fd4e7661c93be528c2766e27fe22403d3d495292 100644
index c1f8fd1225cfc47c2e171361aa6069d3cbaf3afb..b32a2cf621022a500a2efc7777b4379347dcf353 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -443,7 +443,7 @@ export class SearchOneOffs {
@@ -444,7 +444,7 @@ export class SearchOneOffs {
// For the search-bar, always show the one-off buttons where there is an
// option to add an engine.
let addEngineNeeded = isSearchBar && addEngines.length;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047669c8c94 100644
index 5633e5032f5d50c70512187d27e045b579978927..7604adcd38308c38c7c62d16aa29c860a7726649 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -3186,7 +3186,7 @@ var SessionStoreInternal = {
@@ -3202,7 +3202,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -11,7 +11,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047
return;
}
@@ -3895,6 +3895,8 @@ var SessionStoreInternal = {
@@ -3911,6 +3911,8 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -20,7 +20,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -5399,14 +5401,15 @@ var SessionStoreInternal = {
@@ -5416,14 +5418,15 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -38,7 +38,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047
continue;
}
let tabData = lazy.TabState.collect(tab, TAB_CUSTOM_VALUES.get(tab));
@@ -5425,7 +5428,7 @@ var SessionStoreInternal = {
@@ -5442,7 +5445,7 @@ var SessionStoreInternal = {
// We don't store the Firefox View tab in Session Store, so if it was the last selected "tab" when
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected).
@@ -47,7 +47,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047
selectedIndex = 1;
winData.title = tabbrowser.tabs[0].label;
}
@@ -5582,6 +5585,7 @@ var SessionStoreInternal = {
@@ -5599,6 +5602,7 @@ var SessionStoreInternal = {
winData.tabs,
winData.groups ?? []
);
@@ -55,7 +55,7 @@ index 6e2973abf428b110bfc553522723f327ee84c028..cf707b1aace542b4b42468bbaaffd047
this._log.debug(
`restoreWindow, createTabsForSessionRestore returned ${tabs.length} tabs`
);
@@ -6130,8 +6134,23 @@ var SessionStoreInternal = {
@@ -6148,8 +6152,23 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.

View File

@@ -1,13 +1,13 @@
diff --git a/browser/components/sidebar/browser-sidebar.js b/browser/components/sidebar/browser-sidebar.js
index 371190c058fa1eed91dc91b58608c934100e3a1b..440fe6fb403c3e78b3bfe68fb747d000b4a27521 100644
index 178c05099b671c4ec8d4c225955e65cff73824e2..6abb0ee2d4be94f997ee8d4bc755a393d9759099 100644
--- a/browser/components/sidebar/browser-sidebar.js
+++ b/browser/components/sidebar/browser-sidebar.js
@@ -718,7 +718,7 @@ var SidebarController = {
}
});
} else {
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
[...browser.children].forEach((node, i) => {
node.style.order = i + 1;
});
@@ -729,7 +729,7 @@ var SidebarController = {
setPosition() {
// First reset all ordinals to match DOM ordering.
let contentArea = document.getElementById("tabbrowser-tabbox");
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
[...browser.children].forEach((node, i) => {
node.style.order = i + 1;
});

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/tabbrowser/content/browser-ctrlTab.js b/browser/components/tabbrowser/content/browser-ctrlTab.js
index 6753641cb579032306453be3f5054d7bc7661e8c..e0eda8d77637334ca30ee1842057cb43b4af2c21 100644
index 6753641cb579032306453be3f5054d7bc7661e8c..436ee8940c8a73d238a7aed10768a0a752a3f119 100644
--- a/browser/components/tabbrowser/content/browser-ctrlTab.js
+++ b/browser/components/tabbrowser/content/browser-ctrlTab.js
@@ -252,7 +252,7 @@ var ctrlTab = {
@@ -20,6 +20,15 @@ index 6753641cb579032306453be3f5054d7bc7661e8c..e0eda8d77637334ca30ee1842057cb43
return;
}
@@ -483,7 +483,7 @@ var ctrlTab = {
},
open: function ctrlTab_open() {
- if (this.isOpen) {
+ if (this.isOpen || !this.tabCount) {
return;
}
@@ -761,7 +761,7 @@ var ctrlTab = {
_initRecentlyUsedTabs() {
this._recentlyUsedTabs = Array.prototype.filter.call(

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tab.js b/browser/components/tabbrowser/content/tab.js
index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac96fd868da 100644
index dc92771ebc65095dfebbddc238ee6d4fffd897bf..ae9120f7cc8989cf625ac101d053d82582e32009 100644
--- a/browser/components/tabbrowser/content/tab.js
+++ b/browser/components/tabbrowser/content/tab.js
@@ -16,6 +16,7 @@
@@ -21,6 +21,7 @@
<hbox class="tab-group-line"/>
</vbox>
<hbox class="tab-content" align="center">
@@ -10,7 +10,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
<stack class="tab-icon-stack">
<hbox class="tab-throbber"/>
<hbox class="tab-icon-pending"/>
@@ -32,8 +33,10 @@
@@ -37,8 +38,10 @@
<hbox class="tab-secondary-label">
<label class="tab-icon-sound-label tab-icon-sound-pip-label" data-l10n-id="browser-tab-audio-pip" role="presentation"/>
</hbox>
@@ -21,7 +21,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
</hbox>
</stack>
`;
@@ -167,7 +170,7 @@
@@ -175,7 +178,7 @@
}
set _visuallySelected(val) {
@@ -30,7 +30,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
return;
}
@@ -203,7 +206,7 @@
@@ -211,7 +214,7 @@
}
get visible() {
@@ -39,7 +39,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
get hidden() {
@@ -274,7 +277,7 @@
@@ -282,7 +285,7 @@
return false;
}
@@ -48,7 +48,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
get lastAccessed() {
@@ -446,6 +449,8 @@
@@ -454,6 +457,8 @@
this.style.MozUserFocus = "ignore";
} else if (
event.target.classList.contains("tab-close-button") ||
@@ -57,15 +57,15 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
event.target.classList.contains("tab-icon-overlay") ||
event.target.classList.contains("tab-audio-button")
) {
@@ -544,6 +549,7 @@
if (this.multiselected) {
gBrowser.removeMultiSelectedTabs();
@@ -554,6 +559,7 @@
telemetrySource: lazy.TabMetrics.METRIC_SOURCE.TAB_STRIP,
});
} else {
+ gZenPinnedTabManager._removePinnedAttributes(this, true);
gBrowser.removeTab(this, {
animate: true,
triggeringEvent: event,
@@ -553,6 +559,14 @@
@@ -564,6 +570,14 @@
// (see tabbrowser-tabs 'click' handler).
gBrowser.tabContainer._blockDblClick = true;
}
@@ -80,7 +80,7 @@ index fc3a9730b394341843cfa9f559a792acb34c7d29..18d5fdb6e3368e21c68269c48cf22ac9
}
on_dblclick(event) {
@@ -576,6 +590,8 @@
@@ -587,6 +601,8 @@
animate: true,
triggeringEvent: event,
});

View File

@@ -1,22 +1,13 @@
diff --git a/browser/components/tabbrowser/content/tabbrowser.js b/browser/components/tabbrowser/content/tabbrowser.js
index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69f8d324d1 100644
index 6dece2b9d0462d90a28e75350ce983d87816ef73..e80730ed2db404c0d47f2e29c3235c66f0137ad2 100644
--- a/browser/components/tabbrowser/content/tabbrowser.js
+++ b/browser/components/tabbrowser/content/tabbrowser.js
@@ -424,11 +424,67 @@
@@ -415,11 +415,58 @@
return this.tabContainer.visibleTabs;
}
+ get _numVisiblePinTabs() {
+ let i = 0;
+ for (let tab of this.tabs) {
+ if (!tab.pinned && !tab.hasAttribute("zen-glance-tab")) {
+ break;
+ }
+ if (!tab.hidden) {
+ i += !tab.hasAttribute("zen-glance-tab");
+ }
+ }
+ return i;
+ zenInsertTabAtIndex(...args) {
+ return this.#insertTabAtElementIndex(...args);
+ }
+
+ get _numVisiblePinTabsWithoutCollapsed() {
@@ -72,15 +63,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
}
return i;
}
@@ -558,6 +614,7 @@
@@ -571,6 +618,7 @@
this.tabpanels.appendChild(panel);
let tab = this.tabs[0];
+ ZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !Services.prefs.getBoolPref('zen.workspaces.disable_empty_state_for_testing', false));
+ ZenWorkspaces.handleInitialTab(tab, (!remoteType || remoteType === E10SUtils.PRIVILEGEDABOUT_REMOTE_TYPE) && !gZenUIManager.testingEnabled);
tab.linkedPanel = uniqueId;
this._selectedTab = tab;
this._selectedBrowser = browser;
@@ -823,11 +880,13 @@
@@ -836,11 +884,13 @@
}
this.showTab(aTab);
@@ -90,14 +81,14 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
+ if (this.tabContainer.verticalMode && !handled) {
this.#handleTabMove(aTab, () =>
- this.verticalPinnedTabsContainer.appendChild(aTab)
+ aTab.hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
+ aTab.hasAttribute("zen-essential") ? ZenWorkspaces.getEssentialsSection(aTab).appendChild(aTab) : this.verticalPinnedTabsContainer.insertBefore(aTab, this.verticalPinnedTabsContainer.lastChild)
);
- } else {
+ } else if (!handled) {
this.moveTabTo(aTab, this.pinnedTabCount, { forceStandaloneTab: true });
}
aTab.setAttribute("pinned", "true");
@@ -841,12 +900,15 @@
this.moveTabTo(aTab, {
tabIndex: this.pinnedTabCount,
forceUngrouped: true,
@@ -857,12 +907,15 @@
}
if (this.tabContainer.verticalMode) {
@@ -113,8 +104,8 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
+ }
});
} else {
this.moveTabTo(aTab, this.pinnedTabCount - 1, {
@@ -1029,6 +1091,8 @@
this.moveTabTo(aTab, {
@@ -1046,6 +1099,8 @@
let LOCAL_PROTOCOLS = ["chrome:", "about:", "resource:", "data:"];
@@ -123,7 +114,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (
aIconURL &&
!aLoadingPrincipal &&
@@ -1039,6 +1103,9 @@
@@ -1056,6 +1111,9 @@
);
return;
}
@@ -133,7 +124,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
let browser = this.getBrowserForTab(aTab);
browser.mIconURL = aIconURL;
@@ -1287,6 +1354,7 @@
@@ -1305,6 +1363,7 @@
if (!this._previewMode) {
newTab.recordTimeFromUnloadToReload();
newTab.updateLastAccessed();
@@ -141,7 +132,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
oldTab.updateLastAccessed();
// if this is the foreground window, update the last-seen timestamps.
if (this.ownerGlobal == BrowserWindowTracker.getTopWindow()) {
@@ -1439,6 +1507,9 @@
@@ -1457,6 +1516,9 @@
}
let activeEl = document.activeElement;
@@ -151,7 +142,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
// If focus is on the old tab, move it to the new tab.
if (activeEl == oldTab) {
newTab.focus();
@@ -1762,7 +1833,8 @@
@@ -1780,7 +1842,8 @@
}
_setTabLabel(aTab, aLabel, { beforeTabOpen, isContentTitle, isURL } = {}) {
@@ -161,16 +152,16 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
return false;
}
@@ -1865,7 +1937,7 @@
@@ -1888,7 +1951,7 @@
newIndex = this.selectedTab._tPos + 1;
}
- if (replace) {
+ if (replace && !(!targetTab && this.selectedTab?.hasAttribute('zen-empty-tab'))) {
let browser;
if (targetTab) {
browser = this.getBrowserForTab(targetTab);
@@ -2122,6 +2194,7 @@
if (this.isTabGroupLabel(targetTab)) {
throw new Error(
"Replacing a tab group label with a tab is not supported"
@@ -2152,6 +2215,7 @@
uriIsAboutBlank,
userContextId,
skipLoad,
@@ -178,7 +169,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
} = {}) {
let b = document.createXULElement("browser");
// Use the JSM global to create the permanentKey, so that if the
@@ -2195,8 +2268,7 @@
@@ -2225,8 +2289,7 @@
// we use a different attribute name for this?
b.setAttribute("name", name);
}
@@ -188,7 +179,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
b.setAttribute("transparent", "true");
}
@@ -2373,7 +2445,7 @@
@@ -2391,7 +2454,7 @@
let panel = this.getPanel(browser);
let uniqueId = this._generateUniquePanelID();
@@ -197,7 +188,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
aTab.linkedPanel = uniqueId;
// Inject the <browser> into the DOM if necessary.
@@ -2432,8 +2504,8 @@
@@ -2450,8 +2513,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) {
@@ -208,7 +199,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
} else {
aTab.linkedBrowser.browsingContext.hasSiblings = this.tabs.length > 1;
}
@@ -2655,6 +2727,7 @@
@@ -2679,6 +2742,7 @@
schemelessInput,
hasValidUserGestureActivation = false,
textDirectiveUserActivation = false,
@@ -216,7 +207,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
} = {}
) {
// all callers of addTab that pass a params object need to pass
@@ -2665,6 +2738,12 @@
@@ -2689,6 +2753,12 @@
);
}
@@ -229,7 +220,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (!UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.start("browser.tabs.opening", "initting", window);
}
@@ -2728,6 +2807,16 @@
@@ -2752,6 +2822,16 @@
noInitialLabel,
skipBackgroundNotify,
});
@@ -244,17 +235,17 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
+ t.setAttribute("zen-empty-tab", "true");
+ }
if (insertTab) {
// insert the tab into the tab container in the correct position
this._insertTabAtIndex(t, {
@@ -2752,6 +2841,7 @@
initialBrowsingContextGroupId,
if (typeof index == "number") {
elementIndex = this.#tabIndexToElementIndex(index);
@@ -2779,6 +2859,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
+ _forZenEmptyTab,
}));
if (focusUrlBar) {
@@ -2871,6 +2961,9 @@
@@ -2898,6 +2979,9 @@
}
}
@@ -264,7 +255,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
// Additionally send pinned tab events
if (pinned) {
this._notifyPinnedStatus(t);
@@ -2891,12 +2984,15 @@
@@ -2945,12 +3029,15 @@
* @param {string} [label=]
* @returns {MozTabbrowserTabGroup}
*/
@@ -281,15 +272,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
return group;
}
@@ -2937,6 +3033,7 @@
@@ -2993,6 +3080,7 @@
insertBefore = null,
isUserCreated = false,
isUserTriggered = false,
telemetryUserCreateSource = "unknown",
+ forSplitView = false,
} = {}
) {
if (!tabs?.length) {
@@ -2951,7 +3048,12 @@
@@ -3011,7 +3099,12 @@
id = `${Date.now()}-${Math.round(Math.random() * 100)}`;
}
let group = this._createTabGroup(id, color, false, label);
@@ -303,15 +294,15 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
group,
insertBefore?.group ?? insertBefore
);
@@ -3268,6 +3370,7 @@
initialBrowsingContextGroupId,
@@ -3342,6 +3435,7 @@
openWindowInfo,
skipLoad,
triggeringRemoteType,
+ _forZenEmptyTab
}
) {
// If we don't have a preferred remote type, and we have a remote
@@ -3331,6 +3434,7 @@
// If we don't have a preferred remote type (or it is `NOT_REMOTE`), and
@@ -3411,6 +3505,7 @@
openWindowInfo,
name,
skipLoad,
@@ -319,7 +310,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
});
}
@@ -3509,6 +3613,27 @@
@@ -3589,6 +3684,27 @@
) {
tabWasReused = true;
tab = this.selectedTab;
@@ -347,12 +338,11 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (!tabData.pinned) {
this.unpinTab(tab);
} else {
@@ -3557,8 +3682,28 @@
@@ -3637,7 +3753,27 @@
skipLoad: true,
preferredRemoteType,
});
-
- if (select) {
+ if (tabData.zenWorkspace) {
+ tab.setAttribute("zen-workspace-id", tabData.zenWorkspace);
+ }
@@ -374,22 +364,10 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
+ if (tabData.zenPinnedEntry) {
+ tab.setAttribute("zen-pinned-entry", tabData.zenPinnedEntry);
+ }
+ if (select && !tabData.pinned) {
if (select) {
tabToSelect = tab;
}
}
@@ -3570,8 +3715,8 @@
// inserted in the DOM. If the tab is not yet in the DOM,
// just insert it in the right place from the start.
if (!tab.parentNode) {
- tab._tPos = this.pinnedTabCount;
- this.tabContainer.insertBefore(tab, this.tabs[this.pinnedTabCount]);
+ tab._tPos = this._numVisiblePinTabs;
+ this.tabContainer.insertBefore(tab, this.tabs[this._numVisiblePinTabs]);
tab.toggleAttribute("pinned", true);
this.tabContainer._invalidateCachedTabs();
// Then ensure all the tab open/pinning information is sent.
@@ -3581,7 +3726,8 @@
@@ -3661,7 +3797,8 @@
// needs calling:
shouldUpdateForPinnedTabs = true;
}
@@ -399,7 +377,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
let { groupId } = tabData;
const tabGroup = tabGroupWorkingData.get(groupId);
// if a tab refers to a tab group we don't know, skip any group
@@ -3595,7 +3741,10 @@
@@ -3675,7 +3812,10 @@
tabGroup.stateData.id,
tabGroup.stateData.color,
tabGroup.stateData.collapsed,
@@ -411,7 +389,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
);
tabsFragment.appendChild(tabGroup.node);
}
@@ -3646,6 +3795,9 @@
@@ -3726,6 +3866,9 @@
this.selectedTab = tabToSelect;
this.removeTab(leftoverTab);
}
@@ -421,7 +399,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (tabs.length > 1 || !tabs[0].selected) {
this._updateTabsAfterInsert();
@@ -3830,7 +3982,7 @@
@@ -3912,7 +4055,7 @@
// Ensure we have an index if one was not provided.
if (typeof index != "number") {
// Move the new tab after another tab if needed, to the end otherwise.
@@ -430,7 +408,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (
!bulkOrderedOpen &&
((openerTab &&
@@ -3876,18 +4028,18 @@
@@ -3958,18 +4101,18 @@
// Ensure index is within bounds.
if (tab.pinned) {
@@ -440,38 +418,38 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
+ index = Math.min(index, tab.hasAttribute("zen-essential") ? this._numZenEssentials : this.pinnedTabCount);
} else {
index = Math.max(index, this.pinnedTabCount);
index = Math.min(index, this.tabs.length);
index = Math.min(index, this.tabContainer.ariaFocusableItems.length);
}
/** @type {MozTabbrowserTab|undefined} */
- let tabAfter = this.tabs.at(index);
+ let tabAfter = this.tabs.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index);
- let itemAfter = this.tabContainer.ariaFocusableItems.at(index);
+ let itemAfter = this.tabContainer.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).at(index);
this.tabContainer._invalidateCachedTabs();
- if (tabGroup) {
+ if (tabGroup && !tabGroup.hasAttribute("split-view-group")) {
if (tabAfter && tabAfter.group == tabGroup) {
if (this.isTab(itemAfter) && itemAfter.group == tabGroup) {
// Place at the front of, or between tabs in, the same tab group
this.tabContainer.insertBefore(tab, tabAfter);
@@ -4199,6 +4351,9 @@
this.tabContainer.insertBefore(tab, itemAfter);
@@ -4290,6 +4433,9 @@
return;
}
+ for (let tab of selectedTabs) {
+ gZenPinnedTabManager._removePinnedAttributes(tab, true);
+ }
this.removeTabs(selectedTabs);
this.removeTabs(selectedTabs, { telemetrySource });
}
@@ -4450,6 +4605,7 @@
skipGroupCheck = false,
@@ -4542,6 +4688,7 @@
telemetrySource,
} = {}
) {
+ tabs = tabs.filter(tab => !tab.hasAttribute("zen-empty-tab"));
// When 'closeWindowWithLastTab' pref is enabled, closing all tabs
// can be considered equivalent to closing the window.
if (
@@ -4533,6 +4689,7 @@
@@ -4626,6 +4773,7 @@
if (lastToClose) {
this.removeTab(lastToClose, aParams);
}
@@ -479,16 +457,16 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
} catch (e) {
console.error(e);
}
@@ -4556,6 +4713,7 @@
skipSessionStore,
@@ -4650,6 +4798,7 @@
telemetrySource,
} = {}
) {
+ gZenUIManager.saveScrollbarState();
if (UserInteraction.running("browser.tabs.opening", window)) {
UserInteraction.finish("browser.tabs.opening", window);
}
@@ -4572,6 +4730,12 @@
TelemetryStopwatch.start("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
@@ -4663,6 +4812,12 @@
aTab._closeTimeNoAnimTimerId = Glean.browserTabclose.timeNoAnim.start();
}
+ if (ZenWorkspaces.workspaceEnabled) {
@@ -500,7 +478,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
// Handle requests for synchronously removing an already
// asynchronously closing tab.
if (!animate && aTab.closing) {
@@ -4586,7 +4750,9 @@
@@ -4677,7 +4832,9 @@
// frame created for it (for example, by updating the visually selected
// state).
let tabWidth = window.windowUtils.getBoundsWithoutFlushing(aTab).width;
@@ -511,32 +489,16 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (
!this._beginRemoveTab(aTab, {
closeWindowFastpath: true,
@@ -4600,7 +4766,6 @@
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
return;
}
-
let lockTabSizing =
!this.tabContainer.verticalMode &&
!aTab.pinned &&
@@ -4739,14 +4904,14 @@
!!this.tabsInCollapsedTabGroups.length;
if (
aTab.visible &&
- this.visibleTabs.length == 1 &&
+ this.visibleTabs.length == 1 && !aTab._closingGlance &&
!anyRemainingTabsInCollapsedTabGroups
) {
closeWindow =
@@ -4840,7 +4997,7 @@
closeWindowWithLastTab != null
? closeWindowWithLastTab
: !window.toolbar.visible ||
- Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab");
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow && !ZenWorkspaces._removedByStartupPage;
+ Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab") && !ZenWorkspaces._isClosingWindow && !ZenWorkspaces._removedByStartupPage;
if (closeWindow) {
// We've already called beforeunload on all the relevant tabs if we get here,
@@ -4770,6 +4935,7 @@
@@ -4864,6 +5021,7 @@
newTab = true;
}
@@ -544,7 +506,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
aTab._endRemoveArgs = [closeWindow, newTab];
// swapBrowsersAndCloseOther will take care of closing the window without animation.
@@ -4810,9 +4976,7 @@
@@ -4903,9 +5061,7 @@
aTab._mouseleave();
if (newTab) {
@@ -555,7 +517,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
} else {
TabBarVisibility.update();
}
@@ -4941,6 +5105,8 @@
@@ -5034,6 +5190,8 @@
this.tabs[i]._tPos = i;
}
@@ -564,7 +526,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (!this._windowIsClosing) {
if (wasPinned) {
this.tabContainer._positionPinnedTabs();
@@ -5064,8 +5230,8 @@
@@ -5159,8 +5317,8 @@
return closedCount;
}
@@ -575,7 +537,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
if (unloadBlocked) {
return;
}
@@ -5159,13 +5325,13 @@
@@ -5260,13 +5418,13 @@
!excludeTabs.has(aTab.owner) &&
Services.prefs.getBoolPref("browser.tabs.selectOwnerOnClose")
) {
@@ -591,7 +553,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
);
let tab = this.tabContainer.findNextTab(aTab, {
@@ -5181,7 +5347,7 @@
@@ -5282,7 +5440,7 @@
}
if (tab) {
@@ -600,7 +562,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
}
// If no qualifying visible tab was found, see if there is a tab in
@@ -5202,7 +5368,7 @@
@@ -5303,7 +5461,7 @@
});
}
@@ -609,7 +571,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
}
_blurTab(aTab) {
@@ -5599,10 +5765,10 @@
@@ -5704,10 +5862,10 @@
SessionStore.deleteCustomTabValue(aTab, "hiddenBy");
}
@@ -622,69 +584,68 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
aTab.selected ||
aTab.closing ||
// Tabs that are sharing the screen, microphone or camera cannot be hidden.
@@ -5838,7 +6004,7 @@
moveTabTo(aTab, aIndex, { forceStandaloneTab = false } = {}) {
// Don't allow mixing pinned and unpinned tabs.
if (aTab.pinned) {
- aIndex = Math.min(aIndex, this.pinnedTabCount - 1);
+ aIndex = aTab.hasAttribute('zen-essential') ? Math.min(aIndex, this._numZenEssentials - 1) : Math.min(aIndex, this.pinnedTabCount - 1);
} else {
aIndex = Math.max(aIndex, this.pinnedTabCount);
}
@@ -5848,10 +6014,17 @@
@@ -6001,7 +6159,7 @@
this.#handleTabMove(aTab, () => {
let neighbor = this.tabs[aIndex];
- if (forceStandaloneTab && neighbor.group) {
+ const _tPos = aTab._tPos;
+ if ((forceStandaloneTab && neighbor.group) || neighbor.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group;
// Don't allow mixing pinned and unpinned tabs.
if (this.isTab(element) && element.pinned) {
- tabIndex = Math.min(tabIndex, this.pinnedTabCount - 1);
+ tabIndex = element.hasAttribute('zen-essential') ? Math.min(tabIndex, this._numZenEssentials - 1) : Math.min(tabIndex, this.pinnedTabCount - 1);
} else {
tabIndex = Math.max(tabIndex, this.pinnedTabCount);
}
@@ -6028,9 +6186,16 @@
element,
() => {
let neighbor = this.tabs[tabIndex];
- if (forceUngrouped && neighbor.group) {
+ const _tPos = element._tPos;
+ if ((forceUngrouped && neighbor?.group) || neighbor?.group?.hasAttribute("split-view-group")) {
neighbor = neighbor.group;
}
+ if (element.group?.hasAttribute("split-view-group")) {
+ element = element.group;
+ }
+ if (element.group?.hasAttribute("split-view-group") && neighbor == element.group) {
+ return;
+ }
if (neighbor && this.isTab(element) && tabIndex > element._tPos) {
neighbor.after(element);
} else {
@@ -6099,7 +6264,9 @@
targetElement = targetElement.group;
}
- if (neighbor && aIndex > aTab._tPos) {
+ if (aTab.group?.hasAttribute("split-view-group")) {
+ aTab = aTab.group;
+ }
+ if (aTab.group?.hasAttribute("split-view-group") && neighbor == aTab.group) {
+ return;
+ }
+ if (neighbor && aIndex >= _tPos) {
neighbor.after(aTab);
} else {
this.tabContainer.insertBefore(aTab, neighbor);
@@ -5901,13 +6074,22 @@
* Bug 1955388 - prevent pinned tabs from commingling with non-pinned tabs
* when there are hidden tabs present
*/
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab = tab.group;
+ }
+
if (tab.pinned && !targetElement?.pinned) {
// prevent pinned tab from being dragged past a non-pinned tab
targetElement = this.tabs[this.pinnedTabCount - 1];
moveBefore = false;
}
-
+ if (element.group?.hasAttribute("split-view-group")) {
+ element = element.group;
+ }
// Don't allow mixing pinned and unpinned tabs.
if (element.pinned && !targetElement?.pinned) {
targetElement = this.tabs[this.pinnedTabCount - 1];
@@ -6109,7 +6276,13 @@
moveBefore = true;
}
+ if (targetElement?.group?.hasAttribute("split-view-group")) {
+ targetElement = targetElement.group;
+ }
let getContainer = () => {
+ if (tab.hasAttribute("zen-essential")) {
+ return document.getElementById("zen-essentials-container");
+ if (element.hasAttribute("zen-essential")) {
+ return ZenWorkspaces.getEssentialsSection(element);
+ }
if (tab.pinned && this.tabContainer.verticalMode) {
if (element.pinned && this.tabContainer.verticalMode) {
return this.tabContainer.verticalPinnedTabsContainer;
}
@@ -5937,7 +6119,7 @@
}
moveTabToGroup(aTab, aGroup) {
@@ -6169,7 +6342,7 @@
if (!this.isTab(aTab)) {
throw new Error("Can only move a tab into a tab group");
}
- if (aTab.pinned) {
+ if (aTab.pinned != !!aGroup.pinned) {
return;
}
if (aTab.group && aTab.group.id === aGroup.id) {
@@ -5961,6 +6143,10 @@
@@ -6263,6 +6436,10 @@
moveActionCallback();
@@ -695,16 +656,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
// Clear tabs cache after moving nodes because the order of tabs may have
// changed.
this.tabContainer._invalidateCachedTabs();
@@ -6015,7 +6201,7 @@
createLazyBrowser,
};
- let numPinned = this.pinnedTabCount;
+ let numPinned = this._numVisiblePinTabs;
if (aIndex < numPinned || (aTab.pinned && aIndex == numPinned)) {
params.pinned = true;
}
@@ -6765,7 +6951,7 @@
@@ -7080,7 +7257,7 @@
// preventDefault(). It will still raise the window if appropriate.
break;
}
@@ -713,7 +665,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
window.focus();
aEvent.preventDefault();
break;
@@ -7671,6 +7857,7 @@
@@ -7981,6 +8158,7 @@
aWebProgress.isTopLevel
) {
this.mTab.setAttribute("busy", "true");
@@ -721,7 +673,7 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
gBrowser._tabAttrModified(this.mTab, ["busy"]);
this.mTab._notselectedsinceload = !this.mTab.selected;
}
@@ -8640,7 +8827,7 @@ var TabContextMenu = {
@@ -8954,7 +9132,7 @@ var TabContextMenu = {
);
contextUnpinSelectedTabs.hidden =
!this.contextTab.pinned || !this.multiselected;
@@ -730,20 +682,11 @@ index 5f406ea5d09273c9b70b84eee24c6267f88692f8..be8740305b28cfc7752ad8f48ca94e69
// Move Tab items
let contextMoveTabOptions = document.getElementById(
"context_moveTabOptions"
@@ -8674,7 +8861,7 @@ var TabContextMenu = {
let isFirstTab =
!this.contextTabs[0].group &&
(this.contextTabs[0] == visibleTabs[0] ||
- this.contextTabs[0] == visibleTabs[gBrowser.pinnedTabCount]);
+ this.contextTabs[0] == visibleTabs[gBrowser._numVisiblePinTabs]);
contextMoveTabToStart.disabled = isFirstTab && allSelectedTabsAdjacent;
document.getElementById("context_openTabInWindow").disabled =
@@ -8904,6 +9091,7 @@ var TabContextMenu = {
if (this.contextTab.multiselected) {
gBrowser.removeMultiSelectedTabs();
@@ -9223,6 +9401,7 @@ var TabContextMenu = {
telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP,
});
} else {
+ gZenPinnedTabManager._removePinnedAttributes(this.contextTab, true);
gBrowser.removeTab(this.contextTab, { animate: true });
}
},
gBrowser.removeTab(this.contextTab, {
animate: true,
telemetrySource: gBrowser.TabMetrics.METRIC_SOURCE.TAB_STRIP,

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/tabbrowser/content/tabs.js b/browser/components/tabbrowser/content/tabs.js
index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc977c8415 100644
index ef9c0389ec926e6bc01c0dc3b883beceaf1f7d43..2885d896c4026278dfcb309f12230d6f86275ada 100644
--- a/browser/components/tabbrowser/content/tabs.js
+++ b/browser/components/tabbrowser/content/tabs.js
@@ -93,7 +93,7 @@
@@ -83,7 +83,7 @@
};
this.arrowScrollbox._canScrollToElement = element => {
if (isTab(element)) {
@@ -11,7 +11,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
return true;
};
@@ -347,7 +347,7 @@
@@ -342,7 +342,7 @@
// and we're not hitting the scroll buttons.
if (
event.button != 0 ||
@@ -20,7 +20,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
event.composedTarget.localName == "toolbarbutton"
) {
return;
@@ -396,6 +396,7 @@
@@ -391,6 +391,7 @@
// Reset the "ignored click" flag
target._ignoredCloseButtonClicks = false;
}
@@ -28,8 +28,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
/* Protects from close-tab-button errant doubleclick:
@@ -693,7 +694,7 @@
if (this.#isContainerVerticalPinnedExpanded(tab)) {
@@ -692,7 +693,7 @@
if (this.#isContainerVerticalPinnedGrid(tab)) {
// In expanded vertical mode, the max number of pinned tabs per row is dynamic
// Set this before adjusting dragged tab's position
- let pinnedTabs = this.visibleTabs.slice(0, gBrowser.pinnedTabCount);
@@ -37,7 +37,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let tabsPerRow = 0;
let position = 0;
for (let pinnedTab of pinnedTabs) {
@@ -899,6 +900,10 @@
@@ -764,7 +765,7 @@
} else if (isTabGroupLabel(tab) && !tab.group.collapsed) {
this._lockTabSizing();
this.#keepTabSizeLocked = true;
- tab.group.collapsed = true;
+ tab.group.collapsed = !tab.group.hasAttribute("split-view-group");
expandGroupOnDrop = true;
}
}
@@ -913,6 +914,10 @@
}
let draggedTab = event.dataTransfer.mozGetDataAt(TAB_DROP_TYPE, 0);
@@ -47,8 +56,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
+ }
if (
(effects == "move" || effects == "copy") &&
this == draggedTab.container &&
@@ -1012,6 +1017,18 @@
document == draggedTab.ownerDocument &&
@@ -1069,6 +1074,18 @@
this._tabDropIndicator.hidden = true;
event.stopPropagation();
@@ -60,14 +69,14 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
+ let moved = gZenPinnedTabManager.moveToAnotherTabContainerIfNecessary(event, movingTabs);
+
+ if (moved) {
+ this._finishMoveTogetherSelectedTabs(draggedTab);
+ this.finishMoveTogetherSelectedTabs(draggedTab);
+ return;
+ }
+ }
if (draggedTab && dropEffect == "copy") {
// copy the dropped tab (wherever it's from)
let newIndex = this._getDropIndex(event);
@@ -1050,10 +1067,11 @@
let duplicatedDraggedTab;
let duplicatedTabs = [];
@@ -1108,10 +1125,11 @@
}
} else {
let isPinned = draggedTab.pinned;
@@ -83,8 +92,8 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
);
let size = this.verticalMode ? "height" : "width";
let screenAxis = this.verticalMode ? "screenY" : "screenX";
@@ -1129,7 +1147,7 @@
tab.removeAttribute("tabdrop-samewindow");
@@ -1203,7 +1221,7 @@
item.removeAttribute("tabdrop-samewindow");
resolve();
};
- if (gReduceMotion) {
@@ -92,22 +101,19 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -1246,7 +1264,7 @@
return;
}
}
-
@@ -1327,6 +1345,7 @@
let nextItem = this.ariaFocusableItems[newIndex];
let tabGroup = isTab(nextItem) && nextItem.group;
+ if (gZenViewSplitter.handleTabDrop(event, urls, replace, inBackground)) return;
gBrowser.loadTabs(urls, {
inBackground,
replace,
@@ -1276,13 +1294,25 @@
return;
}
- this._finishMoveTogetherSelectedTabs(draggedTab);
this._finishAnimateTabMove();
@@ -1359,6 +1378,17 @@
this.finishMoveTogetherSelectedTabs(draggedTab);
this.finishAnimateTabMove();
+
+ if (!dt.mozUserCancelled && dt.dropEffect == "none" && !this._isCustomizing) {
+ const moved = gZenViewSplitter.moveTabToSplitView(event, draggedTab);
+ if (moved) {
@@ -118,18 +124,10 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
+ if (gZenViewSplitter._lastOpenedTab) gZenViewSplitter._lastOpenedTab._visuallySelected = false;
+ }
+
+ this._finishMoveTogetherSelectedTabs(draggedTab);
+
this.#expandGroupOnDrop(draggedTab);
if (
dt.mozUserCancelled ||
dt.dropEffect != "none" ||
- this._isCustomizing
+ this._isCustomizing ||
+ draggedTab.pinned
) {
delete draggedTab._dragData;
return;
@@ -1504,7 +1534,7 @@
@@ -1582,7 +1612,7 @@
}
get newTabButton() {
@@ -138,7 +136,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
get verticalMode() {
@@ -1524,29 +1554,41 @@
@@ -1606,29 +1636,41 @@
if (this.#allTabs) {
return this.#allTabs;
}
@@ -158,7 +156,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
this.#allTabs = [
- ...this.verticalPinnedTabsContainer.children,
+ ...document.getElementById("zen-essentials-container").children, ...this.verticalPinnedTabsContainer.children,
+ ...ZenWorkspaces.getCurrentEssentialsContainer().children, ...this.verticalPinnedTabsContainer.children,
...children,
];
+ const lastPinnedTabIdx = gBrowser.pinnedTabCount;
@@ -188,7 +186,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
/**
@@ -1566,7 +1608,7 @@
@@ -1648,7 +1690,7 @@
*/
get visibleTabs() {
if (!this.#visibleTabs) {
@@ -197,7 +195,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
return this.#visibleTabs;
}
@@ -1601,23 +1643,18 @@
@@ -1683,23 +1725,18 @@
}
let elementIndex = 0;
@@ -213,7 +211,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let focusableItems = [];
- for (let child of children) {
+ for (let child of [...document.getElementById("zen-essentials-container").children, ...verticalPinnedTabsContainer.children, ...children]) {
+ for (let child of [...ZenWorkspaces.getCurrentEssentialsContainer().children, ...verticalPinnedTabsContainer.children, ...children]) {
if (isTab(child) && child.visible) {
child.elementIndex = elementIndex++;
focusableItems.push(child);
@@ -225,8 +223,15 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let visibleTabsInGroup = child.tabs.filter(tab => tab.visible);
visibleTabsInGroup.forEach(tab => {
tab.elementIndex = elementIndex++;
@@ -1627,10 +1664,7 @@
@@ -1707,12 +1744,14 @@
focusableItems.push(...visibleTabsInGroup);
}
}
+ let glanceTab = child.querySelector("tab[zen-glance-tab]");
+ if (isTab(child) && glanceTab) {
+ glanceTab.elementIndex = elementIndex++;
+ focusableItems.push(glanceTab);
+ }
}
- this.#focusableItems = [
@@ -237,7 +242,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
return this.#focusableItems;
}
@@ -1638,6 +1672,7 @@
@@ -1720,6 +1759,7 @@
_invalidateCachedTabs() {
this.#allTabs = null;
this._invalidateCachedVisibleTabs();
@@ -245,18 +250,18 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
_invalidateCachedVisibleTabs() {
@@ -1652,8 +1687,8 @@
#isContainerVerticalPinnedExpanded(tab) {
@@ -1734,8 +1774,8 @@
#isContainerVerticalPinnedGrid(tab) {
return (
this.verticalMode &&
- tab.hasAttribute("pinned") &&
- this.hasAttribute("expanded")
- this.hasAttribute("expanded") &&
+ (tab.hasAttribute("zen-essential")) &&
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded"))
+ (this.hasAttribute("expanded") || document.documentElement.hasAttribute("zen-sidebar-expanded")) &&
!this.expandOnHover
);
}
@@ -1668,7 +1703,7 @@
@@ -1751,7 +1791,7 @@
if (node == null) {
// We have a container for non-tab elements at the end of the scrollbox.
@@ -265,7 +270,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
node.before(tab);
@@ -1763,7 +1798,7 @@
@@ -1846,7 +1886,7 @@
// There are separate "new tab" buttons for horizontal tabs toolbar, vertical tabs and
// for when the tab strip is overflowed (which is shared by vertical and horizontal tabs);
// Attach the long click popup to all of them.
@@ -274,16 +279,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
const newTab2 = this.newTabButton;
const newTabVertical = document.getElementById(
"vertical-tabs-newtab-button"
@@ -1846,7 +1881,7 @@
let rect = ele => {
return window.windowUtils.getBoundsWithoutFlushing(ele);
};
- let tab = this.visibleTabs[gBrowser.pinnedTabCount];
+ let tab = this.visibleTabs[gBrowser._numVisiblePinTabs];
if (tab && rect(tab).width <= this._tabClipWidth) {
this.setAttribute("closebuttons", "activetab");
} else {
@@ -1858,10 +1893,12 @@
@@ -1941,10 +1981,12 @@
_handleTabSelect(aInstant) {
let selectedTab = this.selectedItem;
@@ -296,34 +292,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
selectedTab._notselectedsinceload = false;
}
@@ -1873,7 +1910,7 @@
return;
}
- let tabs = this.visibleTabs;
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
if (!tabs.length) {
return;
}
@@ -1909,7 +1946,7 @@
if (isEndTab && !this._hasTabTempMaxWidth) {
return;
}
- let numPinned = gBrowser.pinnedTabCount;
+ let numPinned = gBrowser._numVisiblePinTabs;
// Force tabs to stay the same width, unless we're closing the last tab,
// which case we need to let them expand just enough so that the overall
// tabbar width is the same.
@@ -1924,7 +1961,7 @@
let tabsToReset = [];
for (let i = numPinned; i < tabs.length; i++) {
let tab = tabs[i];
- tab.style.setProperty("max-width", aTabWidth, "important");
+ //tab.style.setProperty("max-width", aTabWidth, "important");
if (!isEndTab) {
// keep tabs the same width
tab.style.transition = "none";
@@ -1990,16 +2027,15 @@
@@ -2085,16 +2127,15 @@
// Move pinned tabs to another container when the tabstrip is toggled to vertical
// and when session restore code calls _positionPinnedTabs; update styling whenever
// the number of pinned tabs changes.
@@ -337,16 +306,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
- let tabs = this.visibleTabs;
+ if (!ZenWorkspaces._hasInitializedTabsStrip) return;
+ let count = ZenWorkspaces.makeSurePinTabIsInCorrectPosition();
+ if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length - count - 1 + document.getElementById("zen-essentials-container").children.length)) {
+ if (gBrowser.pinnedTabCount !== (verticalTabsContainer.children.length - count - 1 + ZenWorkspaces.getCurrentEssentialsContainer().children.length)) {
+ let tabs = this.allTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
for (let i = 0; i < numPinned; i++) {
tabs[i].style.marginInlineStart = "";
- verticalTabsContainer.appendChild(tabs[i]);
+ tabs[i].hasAttribute("zen-essential") ? document.getElementById("zen-essentials-container").appendChild(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i]) : verticalTabsContainer.insertBefore(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i], verticalTabsContainer.lastChild);
+ tabs[i].hasAttribute("zen-essential") ? ZenWorkspaces.getCurrentEssentialsContainer().appendChild(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i]) : verticalTabsContainer.insertBefore(tabs[i].group?.hasAttribute("split-view-group") ? tabs[i].group : tabs[i], verticalTabsContainer.lastChild);
}
}
@@ -2007,9 +2043,7 @@
@@ -2102,9 +2143,7 @@
}
_resetVerticalPinnedTabs() {
@@ -357,18 +326,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
if (!verticalTabsContainer.children.length) {
return;
@@ -2022,8 +2056,8 @@
@@ -2117,7 +2156,7 @@
}
_positionPinnedTabs() {
- let tabs = this.visibleTabs;
- let numPinned = gBrowser.pinnedTabCount;
+ let tabs = this.visibleTabs.filter(tab => !tab.hasAttribute("zen-glance-tab"));
+ let numPinned = gBrowser._numVisiblePinTabs;
let numPinned = gBrowser.pinnedTabCount;
let absPositionHorizontalTabs =
this.overflowing && tabs.length > numPinned && numPinned > 0;
@@ -2032,7 +2066,7 @@
@@ -2127,7 +2166,7 @@
if (this.verticalMode) {
this._updateVerticalPinnedTabs();
@@ -377,7 +344,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let layoutData = this._pinnedTabsLayoutCache;
let uiDensity = document.documentElement.getAttribute("uidensity");
if (!layoutData || layoutData.uiDensity != uiDensity) {
@@ -2104,7 +2138,7 @@
@@ -2191,7 +2230,7 @@
return;
}
@@ -386,7 +353,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let directionX = screenX > dragData.animLastScreenX;
let directionY = screenY > dragData.animLastScreenY;
@@ -2112,7 +2146,7 @@
@@ -2199,7 +2238,7 @@
dragData.animLastScreenX = screenX;
let { width: tabWidth, height: tabHeight } =
@@ -395,14 +362,16 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let shiftSizeX = tabWidth * movingTabs.length;
let shiftSizeY = tabHeight;
dragData.tabWidth = tabWidth;
@@ -2296,11 +2330,15 @@
@@ -2374,12 +2413,16 @@
this.#clearDragOverCreateGroupTimer();
let isPinned = draggedTab.pinned;
- let isPinned = draggedTab.pinned;
- let numPinned = gBrowser.pinnedTabCount;
- let tabs = this.ariaFocusableItems.slice(
- isPinned ? 0 : numPinned,
- isPinned ? numPinned : undefined
+ let isPinned = draggedTab?.group ? draggedTab.group.pinned : draggedTab.pinned;
+ let numPinned = gBrowser._numVisiblePinTabsWithoutCollapsed;
+ let essential = draggedTab.hasAttribute("zen-essential");
+ let tabs = this.ariaFocusableItems.filter(tab => !tab.hasAttribute("zen-glance-tab")).slice(
@@ -415,7 +384,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
if (this.#rtlMode) {
tabs.reverse();
@@ -2314,7 +2352,7 @@
@@ -2393,7 +2436,7 @@
let size = this.verticalMode ? "height" : "width";
let translateAxis = this.verticalMode ? "translateY" : "translateX";
let scrollDirection = this.verticalMode ? "scrollTop" : "scrollLeft";
@@ -424,7 +393,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let translateX = event.screenX - dragData.screenX;
let translateY = event.screenY - dragData.screenY;
@@ -2328,6 +2366,12 @@
@@ -2407,10 +2450,19 @@
let lastTab = tabs.at(-1);
let lastMovingTab = movingTabs.at(-1);
let firstMovingTab = movingTabs[0];
@@ -437,20 +406,24 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let endEdge = ele => ele[screenAxis] + bounds(ele)[size];
let lastMovingTabScreen = endEdge(lastMovingTab);
let firstMovingTabScreen = firstMovingTab[screenAxis];
@@ -2348,7 +2392,11 @@
translate = Math.min(Math.max(translate, firstBound), lastBound);
for (let tab of movingTabs) {
- tab.style.transform = `${translateAxis}(${translate}px)`;
+ if (tab.group?.hasAttribute("split-view-group")) {
+ tab.group.style.transform = `${translateAxis}(${translate}px)`;
+ } else {
+ tab.style.transform = `${translateAxis}(${translate}px)`;
let shiftSize = lastMovingTabScreen - firstMovingTabScreen;
+ if (firstMovingTab.hasAttribute("split-view-group")) {
+ shiftSize += 5; // A hack to allow more space for the group
+ }
let translate = screen - dragData[screenAxis];
if (!isPinned) {
translate +=
@@ -2431,6 +2483,9 @@
// Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement;
}
+ if (item.parentElement?.hasAttribute("split-view-group")) {
+ item = item.parentElement;
+ }
item.style.transform = `${translateAxis}(${translate}px)`;
}
dragData.translatePos = translate;
@@ -2485,6 +2533,9 @@
@@ -2568,6 +2623,9 @@
break;
}
let element = tabs[mid];
@@ -460,7 +433,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let elementForSize = isTabGroupLabel(element)
? element.parentElement
: element;
@@ -2507,6 +2558,10 @@
@@ -2590,6 +2648,10 @@
if (!dropElement) {
dropElement = this.ariaFocusableItems[oldDropElementIndex];
}
@@ -471,7 +444,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
let newDropElementIndex = dropElement
? dropElement.elementIndex
: oldDropElementIndex;
@@ -2515,7 +2570,7 @@
@@ -2598,7 +2660,7 @@
let shouldCreateGroupOnDrop;
let dropBefore;
if (dropElement) {
@@ -480,11 +453,11 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
? dropElement.parentElement
: dropElement;
@@ -2566,12 +2621,12 @@
@@ -2660,12 +2722,12 @@
}
}
- if (gBrowser._tabGroupsEnabled && !isPinned) {
- if (gBrowser._tabGroupsEnabled && isTab(draggedTab) && !isPinned) {
+ if (true) {
let dragOverGroupingThreshold = 1 - moveOverThreshold;
@@ -495,7 +468,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
dropElement != draggedTab &&
isTab(dropElement) &&
!dropElement?.group &&
@@ -2639,7 +2694,7 @@
@@ -2735,7 +2797,7 @@
// Shift background tabs to leave a gap where the dragged tab
// would currently be dropped.
for (let item of tabs) {
@@ -504,7 +477,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
continue;
}
@@ -2648,6 +2703,9 @@
@@ -2744,6 +2806,9 @@
if (isTabGroupLabel(item)) {
// Shift the `.tab-group-label-container` to shift the label element.
item = item.parentElement;
@@ -514,19 +487,19 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
}
item.style.transform = transform;
}
@@ -2697,8 +2755,9 @@
@@ -2796,8 +2861,9 @@
);
}
- _finishAnimateTabMove() {
- if (!this.hasAttribute("movingtab")) {
+ _finishAnimateTabMove(always = false) {
- finishAnimateTabMove() {
- if (!this.#isMovingTab()) {
+ finishAnimateTabMove(always = false) {
+ gZenPinnedTabManager.removeTabContainersDragoverClass();
+ if (!this.hasAttribute("movingtab") && !always) {
+ if (!this.#isMovingTab() && !always) {
return;
}
@@ -2711,6 +2770,12 @@
@@ -2809,6 +2875,12 @@
item = item.parentElement;
}
item.style.transform = "";
@@ -539,7 +512,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
item.removeAttribute("dragover-createGroup");
}
this.removeAttribute("movingtab-createGroup");
@@ -2754,7 +2819,7 @@
@@ -2855,7 +2927,7 @@
let postTransitionCleanup = () => {
movingTab._moveTogetherSelectedTabsData.animate = false;
};
@@ -548,7 +521,7 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
postTransitionCleanup();
} else {
let onTransitionEnd = transitionendEvent => {
@@ -2924,7 +2989,7 @@
@@ -3028,7 +3100,7 @@
}
_notifyBackgroundTab(aTab) {
@@ -557,3 +530,13 @@ index 0fbdbf3aefc467880e6b0bae2615cb145735cb0f..75a30478387494c06e5c8131f55ba5dc
return;
}
@@ -3154,6 +3226,9 @@
return null;
}
}
+ if (target?.group?.hasAttribute("split-view-group")) {
+ target = target.group.labelElement;
+ }
return target;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862f1d17b8d 100644
index 4b69136aa31bfef3a1d3b57ad0c75fe07fa26be0..100f96cb58499dbae490b3772effef0f79aec75b 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -68,6 +68,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
false
);
@@ -16,7 +16,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
const DEFAULT_FORM_HISTORY_NAME = "searchbar-history";
const SEARCH_BUTTON_CLASS = "urlbar-search-button";
@@ -348,7 +355,11 @@ export class UrlbarInput {
@@ -349,7 +356,11 @@ export class UrlbarInput {
// See _on_select(). HTMLInputElement.select() dispatches a "select"
// event but does not set the primary selection.
this._suppressPrimaryAdjustment = true;
@@ -28,7 +28,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
this._suppressPrimaryAdjustment = false;
}
@@ -424,6 +435,10 @@ export class UrlbarInput {
@@ -425,6 +436,10 @@ export class UrlbarInput {
hideSearchTerms = false,
isSameDocument = false
) {
@@ -39,7 +39,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
// We only need to update the searchModeUI on tab switch conditionally
// as we only persist searchMode with ScotchBonnet enabled.
if (
@@ -697,8 +712,11 @@ export class UrlbarInput {
@@ -698,8 +713,11 @@ export class UrlbarInput {
return;
}
}
@@ -52,7 +52,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
}
/**
@@ -1092,7 +1110,11 @@ export class UrlbarInput {
@@ -1093,7 +1111,11 @@ export class UrlbarInput {
}
if (!this.#providesSearchMode(result)) {
@@ -65,7 +65,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
}
this.controller.recordSelectedResult(event, result);
@@ -2124,6 +2146,10 @@ export class UrlbarInput {
@@ -2125,6 +2147,10 @@ export class UrlbarInput {
await this.#updateLayoutBreakoutDimensions();
}
@@ -76,7 +76,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
startLayoutExtend() {
if (!this.#allowBreakout || this.hasAttribute("breakout-extend")) {
// Do not expand if the Urlbar does not support being expanded or it is
@@ -2146,6 +2172,11 @@ export class UrlbarInput {
@@ -2147,6 +2173,11 @@ export class UrlbarInput {
this.setAttribute("breakout-extend", "true");
@@ -88,7 +88,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
// 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")) {
@@ -2165,6 +2196,19 @@ export class UrlbarInput {
@@ -2166,6 +2197,19 @@ export class UrlbarInput {
return;
}
@@ -108,7 +108,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
this.removeAttribute("breakout-extend");
this.#updateTextboxPosition();
}
@@ -2997,7 +3041,7 @@ export class UrlbarInput {
@@ -2998,7 +3042,7 @@ export class UrlbarInput {
*/
_trimValue(val) {
let trimmedValue = lazy.UrlbarPrefs.get("trimURLs")
@@ -117,7 +117,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
: val;
// Only trim value if the directionality doesn't change to RTL and we're not
// showing a strikeout https protocol.
@@ -3367,6 +3411,10 @@ export class UrlbarInput {
@@ -3368,6 +3412,10 @@ export class UrlbarInput {
}
reuseEmpty = true;
}
@@ -128,7 +128,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
if (
where == "tab" &&
reuseEmpty &&
@@ -3374,6 +3422,9 @@ export class UrlbarInput {
@@ -3375,6 +3423,9 @@ export class UrlbarInput {
) {
where = "current";
}
@@ -138,7 +138,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
return where;
}
@@ -3625,7 +3676,7 @@ export class UrlbarInput {
@@ -3626,7 +3677,7 @@ export class UrlbarInput {
pasteAndGo.setAttribute("anonid", "paste-and-go");
pasteAndGo.addEventListener("command", () => {
this._suppressStartQuery = true;
@@ -147,7 +147,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
this.select();
this.window.goDoCommand("cmd_paste");
this.setResultForCurrentValue(null);
@@ -3638,7 +3689,6 @@ export class UrlbarInput {
@@ -3639,7 +3690,6 @@ export class UrlbarInput {
contextMenu.addEventListener("popupshowing", () => {
// Close the results pane when the input field contextual menu is open,
// because paste and go doesn't want a result selection.
@@ -155,7 +155,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
let controller =
this.document.commandDispatcher.getControllerForCommand("cmd_paste");
@@ -4048,6 +4098,11 @@ export class UrlbarInput {
@@ -4053,6 +4103,11 @@ export class UrlbarInput {
}
_on_click(event) {
@@ -167,7 +167,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
if (
event.target == this.inputField ||
event.target == this._inputContainer ||
@@ -4119,7 +4174,7 @@ export class UrlbarInput {
@@ -4124,7 +4179,7 @@ export class UrlbarInput {
}
}
@@ -176,7 +176,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
this.view.autoOpen({ event });
} else {
if (this._untrimOnFocusAfterKeydown) {
@@ -4159,9 +4214,12 @@ export class UrlbarInput {
@@ -4164,9 +4219,12 @@ export class UrlbarInput {
}
_on_mousedown(event) {
@@ -190,7 +190,7 @@ index 6de4c2ac873b1424abee118a143ac377f26beb80..23b4d238d767000b9f0de74cfc13c862
if (
event.target != this.inputField &&
@@ -4171,8 +4229,8 @@ export class UrlbarInput {
@@ -4176,8 +4234,8 @@ export class UrlbarInput {
break;
}

View File

@@ -1,8 +1,8 @@
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index 0e6724f590490354cc4d4bde5176556f7e4b4a7c..bffc52488443d62de46abe5cbdac4504831c4a09 100644
index d5382623595de8daed8cd13ea2eb2de329a4bd92..8e160e0bb5a1cd626753feba2008a24e3bbd84cd 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -610,7 +610,7 @@ export class UrlbarView {
@@ -609,7 +609,7 @@ export class UrlbarView {
!this.input.value ||
this.input.getAttribute("pageproxystate") == "valid"
) {

View File

@@ -1,13 +0,0 @@
diff --git a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
index dcf192d0ab7323d69f1bf505971e57c98ad4397d..a4d88304786af35030391f71bc99eee6cf7c1a64 100644
--- a/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
+++ b/browser/extensions/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
@@ -188,7 +188,7 @@ export class ContentSection extends React.PureComponent {
data-l10n-args='{"num": 4}'
/>
</select>
- {mayHaveSponsoredTopSites && (
+ {false && (
<div className="check-wrapper" role="presentation">
<input
id="sponsored-shortcuts"

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
index df9d63c2713b4237d8acca93f108d5c788caed8d..a80cc02fdec6e1056d26a6b5a1cdc1a602e5cf2a 100644
index a325becabddda511204fc5bd2022edc332cdde7c..6bb29b21f1e6c1d6ea3d38d50f01148e0a51f0d7 100644
--- a/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
+++ b/browser/extensions/newtab/lib/AboutPreferences.sys.mjs
@@ -34,7 +34,7 @@ const PREFS_BEFORE_SECTIONS = () => [
@@ -52,7 +52,7 @@ const PREFS_BEFORE_SECTIONS = () => [
titleString: "home-prefs-shortcuts-header",
descString: "home-prefs-shortcuts-description",
get nestedPrefs() {

View File

@@ -1,8 +1,8 @@
diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
index b3d89213ec27151f05e9990d5a55c6e81ce3655f..3c485f616fa2daba62aacbdde2dfb3122e244821 100644
index 14183ad7165dc91126b4409b26f669409c4e9905..be979225b89b193b9e9c8903de5740dc04a8999f 100644
--- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs
@@ -214,7 +214,7 @@ export const PREFS_CONFIG = new Map([
@@ -215,7 +215,7 @@ export const PREFS_CONFIG = new Map([
"showSponsoredTopSites",
{
title: "Show sponsored top sites",

View File

@@ -1,8 +1,8 @@
diff --git a/browser/modules/URILoadingHelper.sys.mjs b/browser/modules/URILoadingHelper.sys.mjs
index c4428df9e1c43ba7a1dfefa2d55316023325d2db..191bc513862d5247e338c683b11ae891ab914479 100644
index 14bf18132eaee8a0c8fe6e108ac423de91a7d3e2..fa616654fdf8a29d59889227780a98f0f9dc9a20 100644
--- a/browser/modules/URILoadingHelper.sys.mjs
+++ b/browser/modules/URILoadingHelper.sys.mjs
@@ -510,7 +510,7 @@ export const URILoadingHelper = {
@@ -516,7 +516,7 @@ export const URILoadingHelper = {
// page. If a load request bounces off for the currently selected tab,
// we'll open a new tab instead.
let tab = w.gBrowser.getTabForBrowser(targetBrowser);

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs
index 4e5a4f1795c18241d9143d159f7d040142e728d4..f4b0e9a7077076f2fbe8ac17fa6aadf586c6b37c 100644
index 081187147736f56abfe5866a69e00ac13a8dd940..9a980fe858c1a77af7634037aebc332d237e9c11 100644
--- a/browser/themes/BuiltInThemeConfig.sys.mjs
+++ b/browser/themes/BuiltInThemeConfig.sys.mjs
@@ -33,13 +33,6 @@ export const BuiltInThemeConfig = new Map([

View File

@@ -470,10 +470,33 @@ groupbox h2 {
align-items: center;
}
.zenThemeMarketplaceItemHomepageButton {
width: 30px;
min-width: 0;
position: relative;
cursor: pointer;
&::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 18px;
height: 18px;
background-image: url('chrome://browser/skin/home.svg');
background-repeat: no-repeat;
background-size: cover;
fill: currentColor;
-moz-context-properties: fill, fill-opacity;
}
}
.zenThemeMarketplaceItemConfigureButton {
width: 30px;
min-width: 0;
position: relative;
cursor: pointer;
&::before {
content: '';

View File

@@ -1,5 +1,5 @@
diff --git a/browser/themes/shared/tabbrowser/tabs.css b/browser/themes/shared/tabbrowser/tabs.css
index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52c16c5227 100644
index 6ca85d9d4d593271fe49138ea736bd96651c05f5..192acb662eaeaeb67df890de4c9681952b078526 100644
--- a/browser/themes/shared/tabbrowser/tabs.css
+++ b/browser/themes/shared/tabbrowser/tabs.css
@@ -32,7 +32,7 @@
@@ -11,7 +11,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
--tab-hover-background-color: color-mix(in srgb, currentColor 11%, transparent);
--tab-selected-textcolor: var(--toolbar-color);
--tab-selected-bgcolor: var(--toolbar-bgcolor);
@@ -214,8 +214,7 @@
@@ -210,8 +210,7 @@
}
#tabbrowser-tabs[positionpinnedtabs] > #tabbrowser-arrowscrollbox > &[pinned] {
@@ -20,16 +20,16 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
+
}
#tabbrowser-tabs[movingtab] &:is([selected], [multiselected]) {
@@ -254,7 +253,6 @@
#tabbrowser-tabs[movingtab] &:is(:active, [multiselected]) {
@@ -257,7 +256,6 @@
}
:root:not([uidensity=compact]) &[pinned] {
:root:not([uidensity=compact], [sidebar-expand-on-hover]) &[pinned] {
- padding: 0 10px;
}
&:is([selected], [multiselected]) {
@@ -268,6 +266,7 @@
@@ -271,6 +269,7 @@
border-radius: inherit;
position: relative;
overflow: hidden;
@@ -37,7 +37,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
&::before {
position: absolute;
@@ -442,6 +441,7 @@
@@ -458,6 +457,7 @@
.tab-icon-image {
-moz-context-properties: fill, stroke;
fill: currentColor;
@@ -45,7 +45,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
/* Apply crisp rendering for favicons at exactly 2dppx resolution */
@media (resolution: 2dppx) {
@@ -523,7 +523,7 @@
@@ -557,7 +557,7 @@
z-index: 1; /* Overlay tab title */
#tabbrowser-tabs[orient=vertical] & {
@@ -54,7 +54,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
}
&[crashed] {
@@ -531,7 +531,7 @@
@@ -565,7 +565,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:not([crashed]),
@@ -63,7 +63,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
&[soundplaying] {
list-style-image: url("chrome://browser/skin/tabbrowser/tab-audio-playing-small.svg");
}
@@ -561,7 +561,7 @@
@@ -595,7 +595,7 @@
background-image: linear-gradient(var(--audio-overlay-extra-background)),
linear-gradient(var(--toolbox-bgcolor));
-moz-context-properties: fill;
@@ -72,44 +72,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
color-scheme: var(--tab-selected-color-scheme);
border-radius: var(--border-radius-circle);
@@ -593,7 +593,7 @@
}
#tabbrowser-tabs[orient="vertical"]:not([expanded]) &:is([soundplaying], [muted], [activemedia-blocked]),
- &[pinned]:is([soundplaying], [muted], [activemedia-blocked]),
+ &:is([soundplaying], [muted], [activemedia-blocked]),
&[crashed] {
display: revert;
}
@@ -607,7 +607,7 @@
--button-min-height-small: 24px;
--button-border-radius: var(--border-radius-small);
- #tabbrowser-tabs:is([orient="vertical"][expanded], [orient="horizontal"]) &:not([pinned]):not([crashed]) {
+ #tabbrowser-tabs:is([orient="horizontal"]) &:not([pinned]):not([crashed]) {
&:is([soundplaying], [muted], [activemedia-blocked]) {
display: block;
}
@@ -638,14 +638,14 @@
}
&[textoverflow] {
- &[labeldirection=ltr]:not([pinned]),
- &:not([labeldirection], [pinned]):-moz-locale-dir(ltr) {
+ &[labeldirection=ltr],
+ &:not([labeldirection]):-moz-locale-dir(ltr) {
direction: ltr;
mask-image: linear-gradient(to left, transparent, black var(--tab-label-mask-size));
}
- &[labeldirection=rtl]:not([pinned]),
- &:not([labeldirection], [pinned]):-moz-locale-dir(rtl) {
+ &[labeldirection=rtl],
+ &:not([labeldirection]):-moz-locale-dir(rtl) {
direction: rtl;
mask-image: linear-gradient(to right, transparent, black var(--tab-label-mask-size));
}
@@ -1201,7 +1201,7 @@
@@ -1362,7 +1362,7 @@ tab-group {
}
}
@@ -118,7 +81,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
#vertical-tabs-newtab-button {
appearance: none;
min-height: var(--tab-min-height);
@@ -1212,7 +1212,7 @@
@@ -1373,7 +1373,7 @@ tab-group {
margin-inline: var(--tab-inner-inline-margin);
#tabbrowser-tabs[orient="vertical"]:not([expanded]) & > .toolbarbutton-text {
@@ -127,7 +90,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
}
&:hover {
@@ -1236,7 +1236,7 @@
@@ -1397,7 +1397,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.
*/
@@ -136,15 +99,16 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
margin-block: var(--tab-block-margin);
}
@@ -1260,7 +1260,6 @@
}
@@ -1471,8 +1471,6 @@ tab-group {
}
#vertical-pinned-tabs-container {
- --tab-inline-padding: calc((calc(var(--tab-collapsed-background-width) + 2 * var(--tab-pinned-margin-inline-expanded) - var(--icon-size-default)) / 2));
display: none;
grid-template-columns: repeat(auto-fit, minmax(var(--tab-pinned-min-width-expanded), auto));
overflow-y: auto;
@@ -1480,7 +1479,7 @@
:root:not([sidebar-expand-on-hover]) & {
- --tab-inline-padding: calc((var(--tab-collapsed-background-width) + 2 *
- var(--tab-pinned-margin-inline-expanded) - var(--icon-size-default)) / 2);
/* stylelint-disable-next-line media-query-no-invalid */
@media not -moz-pref("sidebar.visibility", "expand-on-hover") {
/* We need these rules to apply at all times when the sidebar.visibility
@@ -1717,7 +1715,7 @@ tab-group {
toolbarbutton:not(#firefox-view-button),
toolbarpaletteitem:not(#wrapper-firefox-view-button)
) ~ #tabbrowser-tabs {
@@ -153,7 +117,7 @@ index bafbb39aac37843e3b6dceb0e81304af51e186cc..92b4fd725118150634ab2ae0a24efb52
padding-inline-start: calc(var(--tab-overflow-pinned-tabs-width) + 2px);
margin-inline-start: 2px;
}
@@ -1514,7 +1513,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
@@ -1751,7 +1749,6 @@ toolbar:not(#TabsToolbar) #firefox-view-button {
list-style-image: url(chrome://global/skin/icons/plus.svg);
}

View File

@@ -24,10 +24,6 @@
list-style-image: url('move-tab.svg') !important;
}
.zen-tab-unsplit-button {
list-style-image: url('unpin.svg') !important;
}
#forward-button,
#zen-sidebar-web-panel-forward {
list-style-image: url('forward.svg') !important;
@@ -63,9 +59,7 @@
list-style-image: url('sidebars-right.svg') !important;
}
#context_zenSplitTabs,
#context-zenAddToWebPanel {
/* TODO: Add split view icon */
#context_zenSplitTabs {
--menu-image: url('sidebars-right.svg') !important;
}
@@ -168,10 +162,6 @@
--menu-image: url('open.svg') !important;
}
#context_zenSetAsDefaultWorkspace {
--menu-image: url('bookmark-hollow.svg') !important;
}
#context_zenEditWorkspace,
#zenToolbarThemePicker {
--menu-image: url('edit-theme.svg') !important;
@@ -271,7 +261,8 @@
#restore-button,
#fullscreen-button,
#zen-glance-sidebar-open,
#appMenu-fullscreen-button2 {
#appMenu-fullscreen-button2,
.zen-tab-unsplit-button {
list-style-image: url('fullscreen.svg') !important;
}

View File

@@ -1,20 +1,13 @@
diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css
index 9af78803f0005a2b89e1c73f52153ed4d9e3154a..b63dc3d050144f048ac6a326acd57cc85fa8a3a7 100644
index 3e75a5f366e76acf4b9457a510b58b0cb8af580f..4962151f34ff52e8d009b82a9a12da99c4745a7a 100644
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -40,14 +40,13 @@
* override these on the tabs toolbar because the accent color is
* arbitrary, so the hardcoded colors from browser-custom-colors might
* not provide sufficient contrast. */
- --toolbarbutton-icon-fill: currentColor;
--toolbarbutton-hover-background: color-mix(in srgb, currentColor 17%, transparent);
--toolbarbutton-active-background: color-mix(in srgb, currentColor 30%, transparent);
@@ -57,7 +57,7 @@
}
}
&[sizemode="normal"] #navigator-toolbox {
- border-top: .5px solid ActiveBorder;
+ /* border-top: .5px solid ActiveBorder; Zen: Remove annoying top border, dont remove */
- &[sizemode="normal"] #navigator-toolbox {
+ &[sizemode="normal"] #browser {
border-top: .5px solid ActiveBorder;
&:-moz-window-inactive {
border-top-color: InactiveBorder;
}

View File

@@ -1,8 +1,8 @@
diff --git a/devtools/startup/DevToolsStartup.sys.mjs b/devtools/startup/DevToolsStartup.sys.mjs
index de5cd910c85a195496eddf38d85b78fb97694ef1..d10d6dfeb25bf01e86d84d3843c5a42551cac3bd 100644
index 91b27e5b5fd938f8c5f141214b934999e0ad871e..d2fdae0b0de64c016abbdd5bf124da278d425b24 100644
--- a/devtools/startup/DevToolsStartup.sys.mjs
+++ b/devtools/startup/DevToolsStartup.sys.mjs
@@ -806,6 +806,7 @@ DevToolsStartup.prototype = {
@@ -813,6 +813,7 @@ DevToolsStartup.prototype = {
// account (see bug 832984).
const mainKeyset = doc.getElementById("mainKeyset");
mainKeyset.parentNode.insertBefore(keyset, mainKeyset);

View File

@@ -1,8 +1,8 @@
diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml
index ffdb908e5760eea8643f3c3f85979cb5f7ff36ae..8ab16b5283f8c15f20b0d630a9b5fc82ec803af5 100644
index 58755773c26952b79df258dd8f55147c77db9c5f..041bd3fe99303621733cd3543e196b6a03950526 100644
--- a/dom/base/use_counter_metrics.yaml
+++ b/dom/base/use_counter_metrics.yaml
@@ -21289,6 +21289,22 @@ use.counter.css.page:
@@ -21402,6 +21402,22 @@ use.counter.css.page:
send_in_pings:
- use-counters
@@ -25,7 +25,7 @@ index ffdb908e5760eea8643f3c3f85979cb5f7ff36ae..8ab16b5283f8c15f20b0d630a9b5fc82
css_transform_origin:
type: counter
description: >
@@ -33259,6 +33275,22 @@ use.counter.css.doc:
@@ -33372,6 +33388,22 @@ use.counter.css.doc:
send_in_pings:
- use-counters

View File

@@ -1,8 +1,8 @@
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp
index 6276dcdb031a0325c481a1ea058d513f5c153944..4aee4acd681d3337cce7799d90db0fa0d777762d 100644
index b3bec3821582d48c79cd88a4efe5c7bae1fd42e6..0bb81a8b0fa9478c894f80cfa81fd04c67fdd79f 100644
--- a/dom/script/ScriptLoader.cpp
+++ b/dom/script/ScriptLoader.cpp
@@ -2626,6 +2626,36 @@ void ScriptLoader::CalculateBytecodeCacheFlag(ScriptLoadRequest* aRequest) {
@@ -2670,6 +2670,36 @@ void ScriptLoader::CalculateBytecodeCacheFlag(ScriptLoadRequest* aRequest) {
hasFetchCountMin = false;
break;
}

View File

View File

@@ -0,0 +1,3 @@
# Temporal patches done to Firefox
**IMPORTANT**: Once they start failing (on new Firefox releases), they should be removed as these patches are imported from future versions of Firefox as temporary solutions while we wait.

View File

@@ -0,0 +1,32 @@
# HG changeset patch
# User Julian Descottes <jdescottes@mozilla.com>
# Date 1744201993 0
# Node ID 2e2d932d75c44447af89224be5e4324dc080c447
# Parent 9f134a1b1a884a857c59517ba0e8f3603e4009dd
Bug 1959377 - Include vector in mac/Sandbox.h to fix build on macos 15.4 r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D244870
diff --git a/security/sandbox/mac/Sandbox.h b/security/sandbox/mac/Sandbox.h
--- a/security/sandbox/mac/Sandbox.h
+++ b/security/sandbox/mac/Sandbox.h
@@ -2,16 +2,17 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* 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/. */
#ifndef mozilla_Sandbox_h
#define mozilla_Sandbox_h
#include <string>
+#include <vector>
#include "mozilla/ipc/UtilityProcessSandboxing.h"
enum MacSandboxType {
MacSandboxType_Default = 0,
MacSandboxType_Content,
MacSandboxType_GMP,
MacSandboxType_RDD,
MacSandboxType_Socket,

View File

@@ -1,8 +1,8 @@
diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp
index 01f724b0c42999107c4622323f849ddd2a6fe5c9..9dafa755c711c43c11835dfe9f7ba1b70b52b9a3 100644
index 0fff882bd3b643e3ab59cfaada984bef0ae7fee4..71e981251fa9395cbb14927d9bd3473c1e18a2cb 100644
--- a/layout/generic/nsIFrame.cpp
+++ b/layout/generic/nsIFrame.cpp
@@ -11694,6 +11694,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
@@ -11721,6 +11721,11 @@ gfx::Matrix nsIFrame::ComputeWidgetTransform() const {
gfx::Matrix4x4 matrix = nsStyleTransformMatrix::ReadTransforms(
uiReset->mMozWindowTransform, refBox, float(appUnitsPerDevPixel));

View File

@@ -1,8 +1,8 @@
diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h
index 97eed3431394e21eb7b8890fd87aea8240e23f2b..898d5876c03f822e9e0f2ec892ee86e0d17daf73 100644
index 472c15a359ecd7ad0834d479f1acc53b4527f5ac..9f8377ab507b5883b92621160987a97e0be80014 100644
--- a/layout/style/nsStyleStruct.h
+++ b/layout/style/nsStyleStruct.h
@@ -1875,6 +1875,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {
@@ -1876,6 +1876,7 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleUIReset {
// The margin of the window region that should be transparent to events.
mozilla::StyleLength mMozWindowInputRegionMargin;
mozilla::StyleTransform mMozWindowTransform;

View File

@@ -1,8 +1,8 @@
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
index 2f0bb8a6e21bec5c89a4a25413bf8d1308210f52..450d8265c128861f3ad5973ec0417b9463ebffd0 100644
index a8ba391326f811ae80510585a3c6ab8d7579f739..5e4569032d4c62e59065262f7069663f9acadad1 100644
--- a/modules/libpref/init/StaticPrefList.yaml
+++ b/modules/libpref/init/StaticPrefList.yaml
@@ -18598,6 +18598,7 @@
@@ -18804,6 +18804,7 @@
mirror: always
#endif

View File

@@ -11,10 +11,3 @@
value: 1
mirror: always
#endif
#ifdef XP_WIN
- name: zen.widget.windows.acrylic
type: bool
value: true
mirror: always
#endif

View File

@@ -1,8 +1,8 @@
diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build
index 9a737b89b791866a522100eac99d981a06524b82..2933072d0e8390ca584d0654920b749a180f41ef 100644
index a83080d963322d7baa581f1ca61f93d42bb5a938..0741be2ffc5449be829af7f6067d1abcdc86d155 100644
--- a/netwerk/protocol/http/moz.build
+++ b/netwerk/protocol/http/moz.build
@@ -218,7 +218,7 @@ LOCAL_INCLUDES += [
@@ -223,7 +223,7 @@ LOCAL_INCLUDES += [
"/netwerk/url-classifier",
]

View File

@@ -1,5 +1,5 @@
diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs
index 2baf0df323c83107a9a38e76bda3a273892b121e..8d03eeb78638c7c1bfc2cfff59571c76af11a607 100644
index cc24406e22f536733b07a9398580a8719b61e134..214f238b38377a8480711ea2d0ec30e99800bb5c 100644
--- a/servo/components/style/gecko/media_features.rs
+++ b/servo/components/style/gecko/media_features.rs
@@ -13,6 +13,9 @@ use crate::values::computed::{CSSPixelLength, Context, Ratio, Resolution};
@@ -12,7 +12,7 @@ index 2baf0df323c83107a9a38e76bda3a273892b121e..8d03eeb78638c7c1bfc2cfff59571c76
fn device_size(device: &Device) -> Size2D<Au> {
let mut width = 0;
@@ -615,6 +618,13 @@ fn eval_moz_overlay_scrollbars(context: &Context) -> bool {
@@ -606,6 +609,13 @@ fn eval_moz_overlay_scrollbars(context: &Context) -> bool {
unsafe { bindings::Gecko_MediaFeatures_UseOverlayScrollbars(context.device().document()) }
}
@@ -26,7 +26,7 @@ index 2baf0df323c83107a9a38e76bda3a273892b121e..8d03eeb78638c7c1bfc2cfff59571c76
fn get_lnf_int(int_id: i32) -> i32 {
unsafe { bindings::Gecko_GetLookAndFeelInt(int_id) }
}
@@ -662,7 +672,7 @@ macro_rules! lnf_int_feature {
@@ -653,7 +663,7 @@ 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.
@@ -35,7 +35,7 @@ index 2baf0df323c83107a9a38e76bda3a273892b121e..8d03eeb78638c7c1bfc2cfff59571c76
feature!(
atom!("width"),
AllowsRanges::Yes,
@@ -927,6 +937,12 @@ pub static MEDIA_FEATURES: [QueryFeatureDescription; 61] = [
@@ -918,6 +928,12 @@ pub static MEDIA_FEATURES: [QueryFeatureDescription; 61] = [
Evaluator::BoolInteger(eval_moz_overlay_scrollbars),
FeatureFlags::CHROME_AND_UA_ONLY,
),

View File

@@ -1,16 +1,14 @@
diff --git a/testing/profiles/mochitest/user.js b/testing/profiles/mochitest/user.js
index a4068ac3f61161d014c49d54ae7a3bf886868f1b..84523e9e10d44269172aa6913699ec50def8166e 100644
index a4068ac3f61161d014c49d54ae7a3bf886868f1b..b9861cfaae19a4a71b75ccc73095dc602df22b12 100644
--- a/testing/profiles/mochitest/user.js
+++ b/testing/profiles/mochitest/user.js
@@ -41,3 +41,11 @@ user_pref("places.history.floodingPrevention.enabled", false);
@@ -41,3 +41,9 @@ user_pref("places.history.floodingPrevention.enabled", false);
// permission, and we can open it and wait for the user to give permission, then
// don't do that.
user_pref("geo.prompt.open_system_prefs", false);
+
+user_pref("zen.keyboard.shortcuts.enabled", false);
+user_pref("zen.welcome-screen.seen", true);
+user_pref("zen.tab-unloader.enabled", false);
+user_pref("zen.workspaces.disable_empty_state_for_testing", true);
+user_pref("zen.watermark.enabled", false);
+user_pref("zen.urlbar.replace-newtab", false);
+user_pref("zen.sidebar.use-google-favicons", false); // Crashes on some platforms
+user_pref("zen.testing.enabled", true);

View File

@@ -1,17 +1,16 @@
diff --git a/testing/profiles/profileserver/user.js b/testing/profiles/profileserver/user.js
index 19ff7d474f6d22d2d386764e2e6942ce6a324470..a1ed4b51f26f458f965fbc29dfa7b8ad451faf7f 100644
index 19ff7d474f6d22d2d386764e2e6942ce6a324470..a68a1f692e050c2a2a7e5e1390dec9556e71d7ed 100644
--- a/testing/profiles/profileserver/user.js
+++ b/testing/profiles/profileserver/user.js
@@ -8,3 +8,12 @@
@@ -8,3 +8,11 @@
user_pref("dom.timeout.enable_budget_timer_throttling", false);
// Turn off update
user_pref("app.update.disabledForTesting", true);
+
+// zen:
+// Disable some of zen's features to better match the default Firefox experience
+user_pref("zen.workspaces.disabled_for_testing", true);
+user_pref("zen.workspaces.disable_empty_state_for_testing", true);
+user_pref("zen.welcome-screen.seen", true);
+user_pref("zen.tab-unloader.enabled", false);
+user_pref("zen.watermark.enabled", false);
+user_pref("zen.glance.enabled", false);
+user_pref("zen.urlbar.replace-newtab", false);
+user_pref("zen.testing.enabled", true);

View File

@@ -0,0 +1,12 @@
diff --git a/toolkit/actors/PictureInPictureChild.sys.mjs b/toolkit/actors/PictureInPictureChild.sys.mjs
index 7ae1aa58bbaeab7a1835a3ea8328735d4f4ecfb1..9d0679dde3c031c2459c09ffbc157f32bc7d003a 100644
--- a/toolkit/actors/PictureInPictureChild.sys.mjs
+++ b/toolkit/actors/PictureInPictureChild.sys.mjs
@@ -291,6 +291,7 @@ export class PictureInPictureLauncherChild extends JSWindowActorChild {
if (
video &&
PictureInPictureChild.videoIsPlaying(video) &&
+ !video.muted &&
PictureInPictureChild.videoIsPiPEligible(video)
) {
this.togglePictureInPicture({ video, reason: "AutoPip" }, false);

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/components/aboutprocesses/content/aboutProcesses.html b/toolkit/components/aboutprocesses/content/aboutProcesses.html
index 3d7085f487eb8eb3fb94dcc89e390dee525d8375..94298c2cb237edce7bb344797c054ba61b9f4d24 100644
index 1d936bcca6a606f062b9438d78a1165445468471..cbefb51920e7b2ad11621ab2b36c69fa63967dfe 100644
--- a/toolkit/components/aboutprocesses/content/aboutProcesses.html
+++ b/toolkit/components/aboutprocesses/content/aboutProcesses.html
@@ -20,6 +20,7 @@

View File

@@ -1,8 +1,18 @@
diff --git a/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs b/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
index 5da0404b2672ba8cce7bcf808bf2373474776654..3b93217b38f25f54d7ef44d151e314bc1c5e5ce3 100644
index 5644bad94bd4741c4c807eaf5633ee18aacd633f..f89a3e24e850df04aebceb1ff70c0bed5a9db7e5 100644
--- a/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
+++ b/toolkit/components/pictureinpicture/PictureInPicture.sys.mjs
@@ -494,7 +494,7 @@ export var PictureInPicture = {
@@ -122,6 +122,9 @@ export class PictureInPictureToggleParent extends JSWindowActorParent {
if (browser.ownerGlobal.gBrowser.selectedBrowser == browser) {
break;
}
+ if (browser.audioMuted) {
+ break;
+ }
let actor = browsingContext.currentWindowGlobal.getActor(
"PictureInPictureLauncher"
);
@@ -490,7 +493,7 @@ export var PictureInPicture = {
// focus the tab's window
tab.ownerGlobal.focus();

View File

@@ -1,12 +1,12 @@
diff --git a/toolkit/content/aboutSupport.xhtml b/toolkit/content/aboutSupport.xhtml
index 05e3d72a6e67900e9b3d9bfd35c89b056c7ca747..55408e77830492765c976dd967ca14a7b74cba97 100644
index 296259cd0360a403e8659e22d0c08e968529a38a..bde1ee8d0a05e6ce2eb3ff8ff8a19ba28c20af98 100644
--- a/toolkit/content/aboutSupport.xhtml
+++ b/toolkit/content/aboutSupport.xhtml
@@ -31,6 +31,7 @@
#ifndef ANDROID
<link rel="localization" href="toolkit/featuregates/features.ftl"/>
#endif
+ <script src="chrome://browser/content/zenThemeModifier.js"></script>
</head>
@@ -10,6 +10,7 @@
<body class="wide-container">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
+ <script src="chrome://browser/content/zenThemeModifier.js"></script>
<meta http-equiv="Content-Security-Policy" content="default-src chrome:; object-src 'none'" />
<meta name="color-scheme" content="light dark" />
<title data-l10n-id="page-title"/>

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/arrowscrollbox.js b/toolkit/content/widgets/arrowscrollbox.js
index 328c770d275ebbaada8a44438eaf738b1a62d985..95460108c6356408170b8a4a40d55a8f0621756b 100644
index f9191af09f1b7a1654aff62807e7dad573afc172..f94a8b3dc5871fba5d0dbed5d487d6e32a1ff29a 100644
--- a/toolkit/content/widgets/arrowscrollbox.js
+++ b/toolkit/content/widgets/arrowscrollbox.js
@@ -98,6 +98,7 @@

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/content/widgets/tabbox.js b/toolkit/content/widgets/tabbox.js
index 717f0583f224be2d09a7966ee5627ebab83cc07f..ec251b99562f2a9b6dcfecc4588e44bbff315612 100644
index 6775a7635c6cdbb276b3a912d0bba07840acb28f..fc5d3b1fab286c657c27b98d56bb616dfab3caef 100644
--- a/toolkit/content/widgets/tabbox.js
+++ b/toolkit/content/widgets/tabbox.js
@@ -213,7 +213,7 @@
@@ -11,7 +11,7 @@ index 717f0583f224be2d09a7966ee5627ebab83cc07f..ec251b99562f2a9b6dcfecc4588e44bb
this._selectedPanel?.classList.add("deck-selected");
}
this.setAttribute("selectedIndex", val);
@@ -609,7 +609,7 @@
@@ -610,7 +610,7 @@
if (!tab) {
return;
}
@@ -20,7 +20,7 @@ index 717f0583f224be2d09a7966ee5627ebab83cc07f..ec251b99562f2a9b6dcfecc4588e44bb
if (otherTab != tab && otherTab.selected) {
otherTab._selected = false;
}
@@ -822,7 +822,7 @@
@@ -823,7 +823,7 @@
if (tab == startTab) {
return null;
}
@@ -29,7 +29,7 @@ index 717f0583f224be2d09a7966ee5627ebab83cc07f..ec251b99562f2a9b6dcfecc4588e44bb
return tab;
}
}
@@ -887,7 +887,7 @@
@@ -888,7 +888,7 @@
let { ariaFocusedItem } = this;
let startTab = ariaFocusedItem;
if (!ariaFocusedItem || !this.allTabs.includes(ariaFocusedItem)) {

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
index dd8d6498f5b7244726274c0588dae68f8261cbc0..ac1e25707a1d2ebf191f04f9e38e092cb3f4aa27 100644
index b7dd298c4ffa1b95531e3646d57a52e524fcf801..da23bcd2a8b4b49ce07f4602f5e624bf4bfbfc8d 100644
--- a/toolkit/modules/moz.build
+++ b/toolkit/modules/moz.build
@@ -286,6 +286,7 @@ for var in (
@@ -282,6 +282,7 @@ for var in (
"DLL_SUFFIX",
"DEBUG_JS_MODULES",
"OMNIJAR_NAME",

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/moz.configure b/toolkit/moz.configure
index e5e517635d639f43de064fdc81a33090c28ca786..67ce7a27d93c3c6f9c8045c2d5796b85bf059113 100644
index 09b3065c214ecceacb6f264cdacbb777252f33ea..97ee12093d6330ae9da4aa1bea2ecd5b76843110 100644
--- a/toolkit/moz.configure
+++ b/toolkit/moz.configure
@@ -22,6 +22,7 @@ def check_moz_app_id(moz_app_id, build_project):

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/mozapps/extensions/AddonManager.sys.mjs b/toolkit/mozapps/extensions/AddonManager.sys.mjs
index 044e2960be887b9272509ceff2fc1a2952fd997c..326ddbc0f10fb4134f8b6116c788bef24bb2d3e8 100644
index 883e8389eec97815adfdb8c62fc15482f6d7f0e7..234c956ba799666a3cba6fd6dcdad774ffc6b79e 100644
--- a/toolkit/mozapps/extensions/AddonManager.sys.mjs
+++ b/toolkit/mozapps/extensions/AddonManager.sys.mjs
@@ -1221,12 +1221,12 @@ var AddonManagerInternal = {

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/mozapps/extensions/content/aboutaddons.html b/toolkit/mozapps/extensions/content/aboutaddons.html
index a075350abd62ffa34874dbd8d5a9a3f9aec3560d..5cad47c50518eeb41b4d9657fa805d8fa1dba470 100644
index 67808c799aca92a0c71731ab0c345bb478522368..5ddcbcecd43b2b04eb4c0e5b86eebd69b142a5a3 100644
--- a/toolkit/mozapps/extensions/content/aboutaddons.html
+++ b/toolkit/mozapps/extensions/content/aboutaddons.html
@@ -73,6 +73,7 @@
@@ -82,6 +82,7 @@
type="module"
src="chrome://global/content/elements/moz-five-star.mjs"
></script>

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
index f6333f54da4cd0e81ef0cdf5720d54480a9c865e..2d098b0675e3efdfd6fa1ac0fed0e293b5367b1e 100644
index 1b01851e2fff6d07a4be8e282bd4b85e934a7978..1354405f0b2938d2f22a3dea000405babdafd665 100644
--- a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
+++ b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs
@@ -138,7 +138,7 @@ const KEY_APP_GLOBAL = "app-global";
@@ -139,7 +139,7 @@ const KEY_APP_GLOBAL = "app-global";
const KEY_APP_PROFILE = "app-profile";
const KEY_APP_TEMPORARY = "app-temporary";
@@ -11,7 +11,7 @@ index f6333f54da4cd0e81ef0cdf5720d54480a9c865e..2d098b0675e3efdfd6fa1ac0fed0e293
// Properties to cache and reload when an addon installation is pending
const PENDING_INSTALL_METADATA = [
@@ -1771,8 +1771,11 @@ const updatedAddonFluentIds = new Map([
@@ -1778,8 +1778,11 @@ const updatedAddonFluentIds = new Map([
updatedAddonFluentIds.get(defaultFluentId) || defaultFluentId;
[formattedMessage] = l10n.formatMessagesSync([{ id: fluentId }]);
}

View File

@@ -1,15 +1,15 @@
diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs b/toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs
index 3af9a7779dd43a6ded906ceaf6768c56d53c8605..c0b597fa3f8073b9bfb4118d5352246a5b54c2d7 100644
index 2cafde2156680a557081c5b82923f14618749358..0f4f5160f649165df80f35fbe72e02786a5b867e 100644
--- a/toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.sys.mjs
@@ -2556,8 +2556,8 @@ export var XPIProvider = {
@@ -2674,8 +2674,8 @@ export var XPIProvider = {
if (AppConstants.platform != "android") {
// Keep version in sync with toolkit/mozapps/extensions/default-theme/manifest.json
this.maybeInstallBuiltinAddon(
- "default-theme@mozilla.org",
- "1.4.1",
+ "firefox-compact-dark@mozilla.org",
+ "1.3",
"resource://default-theme/"
);
}
// Keep version in sync with toolkit/mozapps/extensions/default-theme/manifest.json
this.maybeInstallBuiltinAddon(
- "default-theme@mozilla.org",
- "1.4.1",
+ "firefox-compact-dark@mozilla.org",
+ "1.3",
"resource://default-theme/"
);

View File

@@ -1,5 +1,5 @@
diff --git a/toolkit/profile/nsToolkitProfileService.cpp b/toolkit/profile/nsToolkitProfileService.cpp
index c1b7a4a3c9d01e660ec85cf114a6b1513d8fb7ce..df199875663b2b7aba6a5da33987b759e4e0d41b 100644
index e6722fb8f379c3032301fc3c1c49d894a566c28a..f6c560bb3f2ffdba4eaed876f7679245235fde8c 100644
--- a/toolkit/profile/nsToolkitProfileService.cpp
+++ b/toolkit/profile/nsToolkitProfileService.cpp
@@ -82,6 +82,8 @@ using namespace mozilla;
@@ -11,7 +11,7 @@ index c1b7a4a3c9d01e660ec85cf114a6b1513d8fb7ce..df199875663b2b7aba6a5da33987b759
struct KeyValue {
KeyValue(const char* aKey, const char* aValue) : key(aKey), value(aValue) {}
@@ -1409,7 +1411,7 @@ nsresult nsToolkitProfileService::CreateDefaultProfile(
@@ -1404,7 +1406,7 @@ nsresult nsToolkitProfileService::CreateDefaultProfile(
if (mUseDevEditionProfile) {
name.AssignLiteral(DEV_EDITION_NAME);
} else if (mUseDedicatedProfile) {

View File

@@ -1,8 +1,8 @@
diff --git a/toolkit/themes/shared/aboutReader.css b/toolkit/themes/shared/aboutReader.css
index e91ae235726ec4edfbbdfebca159622a757640e9..21f761c5706c4747f5a990fc61b5f95e2eb63b5d 100644
index 2b06ac3bdb2e122f4553d7e11e1c9462ee45b487..9a78e79523a59448f0425609c311f81c14d4525b 100644
--- a/toolkit/themes/shared/aboutReader.css
+++ b/toolkit/themes/shared/aboutReader.css
@@ -1190,3 +1190,43 @@ pre code {
@@ -1191,3 +1191,43 @@ pre code {
display: block;
overflow: auto;
}

View File

@@ -1,32 +1,15 @@
diff --git a/toolkit/themes/shared/popup.css b/toolkit/themes/shared/popup.css
index ed0caa97db5726a7d1bc1cd0aa7af3fdf99690dc..ce49d7f6900a1184c9aed00c26bd7b42916482aa 100644
index 5701d305fdfc0407ead51aa52eefee38e7429de8..642325e981e9597eaaefefa725852a49b49ee6dc 100644
--- a/toolkit/themes/shared/popup.css
+++ b/toolkit/themes/shared/popup.css
@@ -21,8 +21,8 @@ panel {
@@ -22,8 +22,8 @@ panel {
--panel-border-color: ThreeDShadow;
--panel-width: initial;
- --panel-shadow-margin: 0px;
- --panel-shadow-margin: 4px;
- --panel-shadow: 0 0 var(--panel-shadow-margin) hsla(0,0%,0%,.2);
+ --panel-shadow-margin: 10px;
+ --panel-shadow: var(--zen-big-shadow);
-moz-window-input-region-margin: var(--panel-shadow-margin);
margin: calc(-1 * var(--panel-shadow-margin));
@@ -30,8 +30,6 @@ panel {
--background-color-canvas: var(--panel-background);
@media (-moz-platform: linux) {
- --panel-border-radius: 8px;
- --panel-padding-block: 3px;
@media (prefers-contrast) {
--panel-border-color: color-mix(in srgb, currentColor 60%, transparent);
@@ -208,7 +206,6 @@ panel:where([type="arrow"]) {
}
&[animating] {
- pointer-events: none;
}
}
}

View File

@@ -1,8 +1,8 @@
diff --git a/widget/gtk/nsAppShell.cpp b/widget/gtk/nsAppShell.cpp
index eef6e76a26341d30748c6c4f054092ba0bfdd865..65b6e2583e6e6891dcbf9faeeefed21cc2d40d15 100644
index 117c1d6ae07c9b2539005dd05edf2c622985ac2f..126748a8fa13f3f9c163aca06a1d65f972b91f8f 100644
--- a/widget/gtk/nsAppShell.cpp
+++ b/widget/gtk/nsAppShell.cpp
@@ -419,7 +419,8 @@ nsresult nsAppShell::Init() {
@@ -488,7 +488,8 @@ nsresult nsAppShell::Init() {
gchar* name = gdk_pixbuf_format_get_name(format);
if (strcmp(name, "jpeg") && strcmp(name, "png") && strcmp(name, "gif") &&
strcmp(name, "bmp") && strcmp(name, "ico") && strcmp(name, "xpm") &&

View File

@@ -1,12 +0,0 @@
diff --git a/widget/windows/WinUtils.cpp b/widget/windows/WinUtils.cpp
index 598c96cbb5cd06a986a5793ebe9c5438d419d4a9..de1317749e6a6dd7df644818970d7706a51e6c14 100644
--- a/widget/windows/WinUtils.cpp
+++ b/widget/windows/WinUtils.cpp
@@ -2007,6 +2007,7 @@ bool WinUtils::GetTimezoneName(wchar_t* aBuffer) {
static constexpr nsLiteralCString kMicaPrefs[] = {
"widget.windows.mica"_ns,
"widget.windows.mica.popups"_ns,
+ "zen.widget.windows.acrylic"_ns,
};
static BOOL CALLBACK UpdateMicaInHwnd(HWND aHwnd, LPARAM aLParam) {

View File

@@ -1,21 +0,0 @@
diff --git a/widget/windows/nsWindow.cpp b/widget/windows/nsWindow.cpp
index d2863d5fd9ce5cedc88253a07cb061a660d42e61..5c1097ad16cd6e27e76cc6dfbed85218d36cc36f 100644
--- a/widget/windows/nsWindow.cpp
+++ b/widget/windows/nsWindow.cpp
@@ -165,6 +165,7 @@
#include "mozilla/StaticPrefs_layout.h"
#include "mozilla/StaticPrefs_ui.h"
#include "mozilla/StaticPrefs_widget.h"
+#include "mozilla/StaticPrefs_zen.h"
#include "nsNativeAppSupportWin.h"
#include "nsIGfxInfo.h"
@@ -2546,7 +2547,7 @@ void nsWindow::UpdateMicaBackdrop(bool aForce) {
if (!useBackdrop) {
return DWMSBT_AUTO;
}
- return IsPopup() ? DWMSBT_TRANSIENTWINDOW : DWMSBT_TABBEDWINDOW;
+ return IsPopup() ? DWMSBT_TRANSIENTWINDOW : (StaticPrefs::zen_widget_windows_acrylic() ? DWMSBT_TRANSIENTWINDOW : DWMSBT_TABBEDWINDOW);
}();
::DwmSetWindowAttribute(mWnd, DWMWA_SYSTEMBACKDROP_TYPE, &backdrop,
sizeof backdrop);

36
src/zen/@types/index.d.ts vendored Normal file
View File

@@ -0,0 +1,36 @@
/**
* NOTE: Do not modify this file by hand.
* If you're updating some of the sources, see README for instructions.
*/
/// <reference types="./lib.gecko.dom.d.ts" />
/// <reference types="./lib.gecko.glean.d.ts" />
/// <reference types="./lib.gecko.nsresult.d.ts" />
/// <reference types="./lib.gecko.services.d.ts" />
/// <reference types="./lib.gecko.xpcom.d.ts" />
/// <reference types="./lib.gecko.xpidl.d.ts" />
/// Platform specific XPCOM modules.
/// <reference types="./lib.gecko.darwin.d.ts" />
/// <reference types="./lib.gecko.linux.d.ts" />
/// <reference types="./lib.gecko.win32.d.ts" />
/// Order of references matters here, for overriding type signatures.
/// <reference types="./lib.gecko.tweaks.d.ts" />
declare global {
const Cc: nsXPCComponents_Classes;
const Ci: nsIXPCComponents_Interfaces;
const Components: nsIXPCComponents;
const Cr: nsIXPCComponents_Results;
// Resolve typed generic overloads before the generated ones.
const Cu: nsXPCComponents_Utils & nsIXPCComponents_Utils;
const Services: JSServices;
const uneval: (any) => string;
}
export {};
/// <reference types="./zen.d.ts" />

225
src/zen/@types/lib.gecko.darwin.d.ts vendored Normal file
View File

@@ -0,0 +1,225 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from source XPCOM .idl files.
* If you're updating some of the sources, see README for instructions.
*/
declare global {
// https://searchfox.org/mozilla-central/source/accessible/interfaces/nsIAccessibleMacInterface.idl
interface nsIAccessibleMacNSObjectWrapper extends nsISupports {}
interface nsIAccessibleMacInterface extends nsISupports {
readonly attributeNames: string[];
readonly parameterizedAttributeNames: string[];
readonly actionNames: string[];
getAttributeValue(attributeName: string): any;
getParameterizedAttributeValue(attributeName: string, parameter: any): any;
performAction(actionName: string): void;
isAttributeSettable(attributeName: string): boolean;
setAttributeValue(attributeName: string, attributeValue: any): void;
}
interface nsIAccessibleMacEvent extends nsISupports {
readonly macIface: nsIAccessibleMacInterface;
readonly data: any;
}
// https://searchfox.org/mozilla-central/source/browser/components/migration/nsIKeychainMigrationUtils.idl
interface nsIKeychainMigrationUtils extends nsISupports {
getGenericPassword(aServiceName: string, aAccountName: string): string;
}
// https://searchfox.org/mozilla-central/source/browser/components/shell/nsIMacShellService.idl
interface nsIMacShellService extends nsIShellService {
showDesktopPreferences(): void;
showSecurityPreferences(aPaneID: string): void;
getAvailableApplicationsForProtocol(protocol: string): string[][];
}
// https://searchfox.org/mozilla-central/source/widget/nsIMacDockSupport.idl
interface nsIAppBundleLaunchOptions extends nsISupports {
readonly addsToRecentItems: boolean;
}
interface nsIMacDockSupport extends nsISupports {
dockMenu: nsIStandaloneNativeMenu;
activateApplication(aIgnoreOtherApplications: boolean): void;
badgeText: string;
setBadgeImage(aBadgeImage: imgIContainer, aPaintContext?: nsISVGPaintContext): void;
readonly isAppInDock: boolean;
ensureAppIsPinnedToDock(aAppPath?: string, aAppToReplacePath?: string): boolean;
launchAppBundle(aAppBundle: nsIFile, aArgs: string[], aLaunchOptions?: nsIAppBundleLaunchOptions): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIMacFinderProgress.idl
type nsIMacFinderProgressCanceledCallback = Callable<{
canceled(): void;
}>;
interface nsIMacFinderProgress extends nsISupports {
init(path: string, canceledCallback: nsIMacFinderProgressCanceledCallback): void;
updateProgress(currentProgress: u64, totalProgress: u64): void;
end(): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIMacSharingService.idl
interface nsIMacSharingService extends nsISupports {
getSharingProviders(pageUrl: string): any;
shareUrl(serviceName: string, pageUrl: string, pageTitle: string): void;
openSharingPreferences(): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIMacUserActivityUpdater.idl
interface nsIMacUserActivityUpdater extends nsISupports {
updateLocation(pageUrl: string, pageTitle: string, window: nsIBaseWindow): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIMacWebAppUtils.idl
type nsITrashAppCallback = Callable<{
trashAppFinished(rv: nsresult): void;
}>;
interface nsIMacWebAppUtils extends nsISupports {
pathForAppWithIdentifier(bundleIdentifier: string): string;
launchAppWithIdentifier(bundleIdentifier: string): void;
trashApp(path: string, callback: nsITrashAppCallback): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIStandaloneNativeMenu.idl
interface nsIStandaloneNativeMenu extends nsISupports {
init(aElement: Element): void;
menuWillOpen(): boolean;
activateNativeMenuItemAt(anIndexString: string): void;
forceUpdateNativeMenuAt(anIndexString: string): void;
dump(): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarProgress.idl
interface nsITaskbarProgress extends nsISupports {
readonly STATE_NO_PROGRESS?: 0;
readonly STATE_INDETERMINATE?: 1;
readonly STATE_NORMAL?: 2;
readonly STATE_ERROR?: 3;
readonly STATE_PAUSED?: 4;
setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITouchBarHelper.idl
interface nsITouchBarHelper extends nsISupports {
readonly activeUrl: string;
readonly activeTitle: string;
readonly isUrlbarFocused: boolean;
toggleFocusUrlbar(): void;
unfocusUrlbar(): void;
allItems: nsIArray;
readonly document: Document;
getTouchBarInput(aInputName: string): nsITouchBarInput;
insertRestrictionInUrlbar(aToken: string): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITouchBarInput.idl
type nsITouchBarInputCallback = Callable<{
onCommand(): void;
}>;
interface nsITouchBarInput extends nsISupports {
readonly key: string;
title: string;
image: nsIURI;
type: string;
callback: nsITouchBarInputCallback;
color: u32;
disabled: boolean;
children: nsIArray;
}
// https://searchfox.org/mozilla-central/source/widget/nsITouchBarUpdater.idl
interface nsITouchBarUpdater extends nsISupports {
updateTouchBarInputs(aWindow: nsIBaseWindow, aInputs: nsITouchBarInput[]): void;
enterCustomizeMode(): void;
isTouchBarInitialized(): boolean;
setTouchBarInitialized(aIsInitialized: boolean): void;
showPopover(aWindow: nsIBaseWindow, aPopover: nsITouchBarInput, aShowing: boolean): void;
}
// https://searchfox.org/mozilla-central/source/xpcom/base/nsIMacPreferencesReader.idl
interface nsIMacPreferencesReader extends nsISupports {
policiesEnabled(): boolean;
readPreferences(): any;
}
// https://searchfox.org/mozilla-central/source/xpcom/io/nsILocalFileMac.idl
interface nsILocalFileMac extends nsIFile {
readonly fileSizeWithResFork: i64;
launchWithDoc(aDocToLoad: nsIFile, aLaunchInBackground: boolean): void;
openDocWithApp(aAppToOpenWith: nsIFile, aLaunchInBackground: boolean): void;
isPackage(): boolean;
readonly bundleDisplayName: string;
readonly bundleIdentifier: string;
readonly bundleContentsLastModifiedTime: i64;
hasXAttr(aAttrName: string): boolean;
getXAttr(aAttrName: string): u8[];
setXAttr(aAttrName: string, aAttrValue: u8[]): void;
delXAttr(aAttrName: string): void;
}
interface nsIXPCComponents_Interfaces {
nsIAccessibleMacNSObjectWrapper: nsJSIID<nsIAccessibleMacNSObjectWrapper>;
nsIAccessibleMacInterface: nsJSIID<nsIAccessibleMacInterface>;
nsIAccessibleMacEvent: nsJSIID<nsIAccessibleMacEvent>;
nsIKeychainMigrationUtils: nsJSIID<nsIKeychainMigrationUtils>;
nsIMacShellService: nsJSIID<nsIMacShellService>;
nsIAppBundleLaunchOptions: nsJSIID<nsIAppBundleLaunchOptions>;
nsIMacDockSupport: nsJSIID<nsIMacDockSupport>;
nsIMacFinderProgressCanceledCallback: nsJSIID<nsIMacFinderProgressCanceledCallback>;
nsIMacFinderProgress: nsJSIID<nsIMacFinderProgress>;
nsIMacSharingService: nsJSIID<nsIMacSharingService>;
nsIMacUserActivityUpdater: nsJSIID<nsIMacUserActivityUpdater>;
nsITrashAppCallback: nsJSIID<nsITrashAppCallback>;
nsIMacWebAppUtils: nsJSIID<nsIMacWebAppUtils>;
nsIStandaloneNativeMenu: nsJSIID<nsIStandaloneNativeMenu>;
nsITaskbarProgress: nsJSIID<nsITaskbarProgress>;
nsITouchBarHelper: nsJSIID<nsITouchBarHelper>;
nsITouchBarInputCallback: nsJSIID<nsITouchBarInputCallback>;
nsITouchBarInput: nsJSIID<nsITouchBarInput>;
nsITouchBarUpdater: nsJSIID<nsITouchBarUpdater>;
nsIMacPreferencesReader: nsJSIID<nsIMacPreferencesReader>;
nsILocalFileMac: nsJSIID<nsILocalFileMac>;
}
} // global
// Typedefs from xpidl.
type PRTime = i64;
type nsTaskbarProgressState = i32;
// XPCOM internal utility types.
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
/** Enable interfaces to inherit from enums: pick variants as optional. */
type Enums<enums> = Partial<Pick<enums, keyof enums>>;
/** Callable accepts either form of a [function] interface. */
type Callable<iface> = iface | Extract<iface[keyof iface], Function>;
export {};

32649
src/zen/@types/lib.gecko.dom.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

12
src/zen/@types/lib.gecko.glean.d.ts vendored Normal file
View File

@@ -0,0 +1,12 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from source metrics.yaml files.
* If you're updating some of the sources, see README for instructions.
*/
/// <reference types="./glean/browser_components_search.d.ts" />
/// <reference types="./glean/browser_components_search_pings.d.ts" />
/// <reference types="./glean/toolkit_components_extensions.d.ts" />
/// <reference types="./glean/toolkit_components_places.d.ts" />
/// <reference types="./glean/toolkit_components_search.d.ts" />
/// <reference types="./glean/toolkit_mozapps_extensions.d.ts" />

80
src/zen/@types/lib.gecko.linux.d.ts vendored Normal file
View File

@@ -0,0 +1,80 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from source XPCOM .idl files.
* If you're updating some of the sources, see README for instructions.
*/
declare global {
// https://searchfox.org/mozilla-central/source/browser/components/shell/nsIGNOMEShellService.idl
interface nsIGNOMEShellService extends nsIShellService {
readonly canSetDesktopBackground: boolean;
isDefaultForScheme(aScheme: string): boolean;
}
// https://searchfox.org/mozilla-central/source/browser/components/shell/nsIOpenTabsProvider.idl
interface nsIOpenTabsProvider extends nsISupports {
getOpenTabs(): string[];
switchToOpenTab(url: string): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIApplicationChooser.idl
type nsIApplicationChooserFinishedCallback = Callable<{
done(handlerApp: nsIHandlerApp): void;
}>;
interface nsIApplicationChooser extends nsISupports {
init(parent: mozIDOMWindowProxy, title: string): void;
open(contentType: string, applicationChooserFinishedCallback: nsIApplicationChooserFinishedCallback): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIGtkTaskbarProgress.idl
interface nsIGtkTaskbarProgress extends nsITaskbarProgress {
setPrimaryWindow(aWindow: mozIDOMWindowProxy): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarProgress.idl
interface nsITaskbarProgress extends nsISupports {
readonly STATE_NO_PROGRESS?: 0;
readonly STATE_INDETERMINATE?: 1;
readonly STATE_NORMAL?: 2;
readonly STATE_ERROR?: 3;
readonly STATE_PAUSED?: 4;
setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void;
}
interface nsIXPCComponents_Interfaces {
nsIGNOMEShellService: nsJSIID<nsIGNOMEShellService>;
nsIOpenTabsProvider: nsJSIID<nsIOpenTabsProvider>;
nsIApplicationChooserFinishedCallback: nsJSIID<nsIApplicationChooserFinishedCallback>;
nsIApplicationChooser: nsJSIID<nsIApplicationChooser>;
nsIGtkTaskbarProgress: nsJSIID<nsIGtkTaskbarProgress>;
nsITaskbarProgress: nsJSIID<nsITaskbarProgress>;
}
} // global
// Typedefs from xpidl.
type PRTime = i64;
type nsHandlerInfoAction = i32;
type nsTaskbarProgressState = i32;
// XPCOM internal utility types.
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
/** Enable interfaces to inherit from enums: pick variants as optional. */
type Enums<enums> = Partial<Pick<enums, keyof enums>>;
/** Callable accepts either form of a [function] interface. */
type Callable<iface> = iface | Extract<iface[keyof iface], Function>;
export {};

951
src/zen/@types/lib.gecko.modules.d.ts vendored Normal file
View File

@@ -0,0 +1,951 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated by running "mach ts paths".
*/
export interface LazyModules {
'chrome://browser/content/backup/backup-constants.mjs': typeof import('chrome://browser/content/backup/backup-constants.mjs');
'chrome://browser/content/firefoxview/helpers.mjs': typeof import('chrome://browser/content/firefoxview/helpers.mjs');
'chrome://browser/content/migration/migration-wizard-constants.mjs': typeof import('chrome://browser/content/migration/migration-wizard-constants.mjs');
'chrome://browser/content/nsContextMenu.sys.mjs': typeof import('chrome://browser/content/nsContextMenu.sys.mjs');
'chrome://devtools-startup/content/DevToolsShim.sys.mjs': typeof import('chrome://devtools-startup/content/DevToolsShim.sys.mjs');
'chrome://global/content/ml/EngineProcess.sys.mjs': typeof import('chrome://global/content/ml/EngineProcess.sys.mjs');
'chrome://global/content/ml/HttpInference.sys.mjs': typeof import('chrome://global/content/ml/HttpInference.sys.mjs');
'chrome://global/content/ml/ModelHub.sys.mjs': typeof import('chrome://global/content/ml/ModelHub.sys.mjs');
'chrome://global/content/ml/Utils.sys.mjs': typeof import('chrome://global/content/ml/Utils.sys.mjs');
'chrome://global/content/ml/backends/LlamaPipeline.mjs': typeof import('chrome://global/content/ml/backends/LlamaPipeline.mjs');
'chrome://global/content/ml/backends/ONNXPipeline.mjs': typeof import('chrome://global/content/ml/backends/ONNXPipeline.mjs');
'chrome://global/content/ml/backends/Pipeline.mjs': typeof import('chrome://global/content/ml/backends/Pipeline.mjs');
'chrome://global/content/shopping/ProductValidator.sys.mjs': typeof import('chrome://global/content/shopping/ProductValidator.sys.mjs');
'chrome://global/content/shopping/ShoppingProduct.mjs': typeof import('chrome://global/content/shopping/ShoppingProduct.mjs');
'chrome://global/content/translations/TranslationsTelemetry.sys.mjs': typeof import('chrome://global/content/translations/TranslationsTelemetry.sys.mjs');
'chrome://global/content/translations/TranslationsUtils.mjs': typeof import('chrome://global/content/translations/TranslationsUtils.mjs');
'chrome://global/content/translations/translations-document.sys.mjs': typeof import('chrome://global/content/translations/translations-document.sys.mjs');
'chrome://global/content/translations/translations-engine.sys.mjs': typeof import('chrome://global/content/translations/translations-engine.sys.mjs');
'chrome://mochitests/content/browser/remote/shared/messagehandler/test/browser/resources/modules/ModuleRegistry.sys.mjs': typeof import('chrome://mochitests/content/browser/remote/shared/messagehandler/test/browser/resources/modules/ModuleRegistry.sys.mjs');
'chrome://pocket/content/Pocket.sys.mjs': typeof import('chrome://pocket/content/Pocket.sys.mjs');
'chrome://pocket/content/SaveToPocket.sys.mjs': typeof import('chrome://pocket/content/SaveToPocket.sys.mjs');
'chrome://pocket/content/pktApi.sys.mjs': typeof import('chrome://pocket/content/pktApi.sys.mjs');
'chrome://pocket/content/pktTelemetry.sys.mjs': typeof import('chrome://pocket/content/pktTelemetry.sys.mjs');
'chrome://remote/content/cdp/CDP.sys.mjs': typeof import('chrome://remote/content/cdp/CDP.sys.mjs');
'chrome://remote/content/cdp/CDPConnection.sys.mjs': typeof import('chrome://remote/content/cdp/CDPConnection.sys.mjs');
'chrome://remote/content/cdp/Error.sys.mjs': typeof import('chrome://remote/content/cdp/Error.sys.mjs');
'chrome://remote/content/cdp/JSONHandler.sys.mjs': typeof import('chrome://remote/content/cdp/JSONHandler.sys.mjs');
'chrome://remote/content/cdp/Protocol.sys.mjs': typeof import('chrome://remote/content/cdp/Protocol.sys.mjs');
'chrome://remote/content/cdp/StreamRegistry.sys.mjs': typeof import('chrome://remote/content/cdp/StreamRegistry.sys.mjs');
'chrome://remote/content/cdp/domains/ContentProcessDomains.sys.mjs': typeof import('chrome://remote/content/cdp/domains/ContentProcessDomains.sys.mjs');
'chrome://remote/content/cdp/domains/Domain.sys.mjs': typeof import('chrome://remote/content/cdp/domains/Domain.sys.mjs');
'chrome://remote/content/cdp/domains/DomainCache.sys.mjs': typeof import('chrome://remote/content/cdp/domains/DomainCache.sys.mjs');
'chrome://remote/content/cdp/domains/ParentProcessDomains.sys.mjs': typeof import('chrome://remote/content/cdp/domains/ParentProcessDomains.sys.mjs');
'chrome://remote/content/cdp/domains/content/DOM.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/DOM.sys.mjs');
'chrome://remote/content/cdp/domains/content/Emulation.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Emulation.sys.mjs');
'chrome://remote/content/cdp/domains/content/Input.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Input.sys.mjs');
'chrome://remote/content/cdp/domains/content/Log.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Log.sys.mjs');
'chrome://remote/content/cdp/domains/content/Network.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Network.sys.mjs');
'chrome://remote/content/cdp/domains/content/Page.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Page.sys.mjs');
'chrome://remote/content/cdp/domains/content/Performance.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Performance.sys.mjs');
'chrome://remote/content/cdp/domains/content/Runtime.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Runtime.sys.mjs');
'chrome://remote/content/cdp/domains/content/Security.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/Security.sys.mjs');
'chrome://remote/content/cdp/domains/content/runtime/ExecutionContext.sys.mjs': typeof import('chrome://remote/content/cdp/domains/content/runtime/ExecutionContext.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Browser.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Browser.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Emulation.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Emulation.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Fetch.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Fetch.sys.mjs');
'chrome://remote/content/cdp/domains/parent/IO.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/IO.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Input.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Input.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Network.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Network.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Page.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Page.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Security.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Security.sys.mjs');
'chrome://remote/content/cdp/domains/parent/SystemInfo.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/SystemInfo.sys.mjs');
'chrome://remote/content/cdp/domains/parent/Target.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/Target.sys.mjs');
'chrome://remote/content/cdp/domains/parent/page/DialogHandler.sys.mjs': typeof import('chrome://remote/content/cdp/domains/parent/page/DialogHandler.sys.mjs');
'chrome://remote/content/cdp/observers/ChannelEventSink.sys.mjs': typeof import('chrome://remote/content/cdp/observers/ChannelEventSink.sys.mjs');
'chrome://remote/content/cdp/observers/ContextObserver.sys.mjs': typeof import('chrome://remote/content/cdp/observers/ContextObserver.sys.mjs');
'chrome://remote/content/cdp/observers/NetworkObserver.sys.mjs': typeof import('chrome://remote/content/cdp/observers/NetworkObserver.sys.mjs');
'chrome://remote/content/cdp/observers/TargetObserver.sys.mjs': typeof import('chrome://remote/content/cdp/observers/TargetObserver.sys.mjs');
'chrome://remote/content/cdp/sessions/MainProcessSession.sys.mjs': typeof import('chrome://remote/content/cdp/sessions/MainProcessSession.sys.mjs');
'chrome://remote/content/cdp/sessions/TabSession.sys.mjs': typeof import('chrome://remote/content/cdp/sessions/TabSession.sys.mjs');
'chrome://remote/content/cdp/targets/MainProcessTarget.sys.mjs': typeof import('chrome://remote/content/cdp/targets/MainProcessTarget.sys.mjs');
'chrome://remote/content/cdp/targets/TabTarget.sys.mjs': typeof import('chrome://remote/content/cdp/targets/TabTarget.sys.mjs');
'chrome://remote/content/cdp/targets/TargetList.sys.mjs': typeof import('chrome://remote/content/cdp/targets/TargetList.sys.mjs');
'chrome://remote/content/components/Marionette.sys.mjs': typeof import('chrome://remote/content/components/Marionette.sys.mjs');
'chrome://remote/content/components/RemoteAgent.sys.mjs': typeof import('chrome://remote/content/components/RemoteAgent.sys.mjs');
'chrome://remote/content/marionette/actors/MarionetteCommandsParent.sys.mjs': typeof import('chrome://remote/content/marionette/actors/MarionetteCommandsParent.sys.mjs');
'chrome://remote/content/marionette/actors/MarionetteEventsParent.sys.mjs': typeof import('chrome://remote/content/marionette/actors/MarionetteEventsParent.sys.mjs');
'chrome://remote/content/marionette/atom.sys.mjs': typeof import('chrome://remote/content/marionette/atom.sys.mjs');
'chrome://remote/content/marionette/browser.sys.mjs': typeof import('chrome://remote/content/marionette/browser.sys.mjs');
'chrome://remote/content/marionette/cert.sys.mjs': typeof import('chrome://remote/content/marionette/cert.sys.mjs');
'chrome://remote/content/marionette/cookie.sys.mjs': typeof import('chrome://remote/content/marionette/cookie.sys.mjs');
'chrome://remote/content/marionette/driver.sys.mjs': typeof import('chrome://remote/content/marionette/driver.sys.mjs');
'chrome://remote/content/marionette/evaluate.sys.mjs': typeof import('chrome://remote/content/marionette/evaluate.sys.mjs');
'chrome://remote/content/marionette/interaction.sys.mjs': typeof import('chrome://remote/content/marionette/interaction.sys.mjs');
'chrome://remote/content/marionette/json.sys.mjs': typeof import('chrome://remote/content/marionette/json.sys.mjs');
'chrome://remote/content/marionette/l10n.sys.mjs': typeof import('chrome://remote/content/marionette/l10n.sys.mjs');
'chrome://remote/content/marionette/message.sys.mjs': typeof import('chrome://remote/content/marionette/message.sys.mjs');
'chrome://remote/content/marionette/navigate.sys.mjs': typeof import('chrome://remote/content/marionette/navigate.sys.mjs');
'chrome://remote/content/marionette/packets.sys.mjs': typeof import('chrome://remote/content/marionette/packets.sys.mjs');
'chrome://remote/content/marionette/prefs.sys.mjs': typeof import('chrome://remote/content/marionette/prefs.sys.mjs');
'chrome://remote/content/marionette/reftest.sys.mjs': typeof import('chrome://remote/content/marionette/reftest.sys.mjs');
'chrome://remote/content/marionette/server.sys.mjs': typeof import('chrome://remote/content/marionette/server.sys.mjs');
'chrome://remote/content/marionette/stream-utils.sys.mjs': typeof import('chrome://remote/content/marionette/stream-utils.sys.mjs');
'chrome://remote/content/marionette/sync.sys.mjs': typeof import('chrome://remote/content/marionette/sync.sys.mjs');
'chrome://remote/content/marionette/transport.sys.mjs': typeof import('chrome://remote/content/marionette/transport.sys.mjs');
'chrome://remote/content/marionette/web-reference.sys.mjs': typeof import('chrome://remote/content/marionette/web-reference.sys.mjs');
'chrome://remote/content/marionette/webauthn.sys.mjs': typeof import('chrome://remote/content/marionette/webauthn.sys.mjs');
'chrome://remote/content/server/WebSocketHandshake.sys.mjs': typeof import('chrome://remote/content/server/WebSocketHandshake.sys.mjs');
'chrome://remote/content/server/WebSocketTransport.sys.mjs': typeof import('chrome://remote/content/server/WebSocketTransport.sys.mjs');
'chrome://remote/content/server/httpd.sys.mjs': typeof import('chrome://remote/content/server/httpd.sys.mjs');
'chrome://remote/content/shared/Addon.sys.mjs': typeof import('chrome://remote/content/shared/Addon.sys.mjs');
'chrome://remote/content/shared/AppInfo.sys.mjs': typeof import('chrome://remote/content/shared/AppInfo.sys.mjs');
'chrome://remote/content/shared/AsyncQueue.sys.mjs': typeof import('chrome://remote/content/shared/AsyncQueue.sys.mjs');
'chrome://remote/content/shared/Browser.sys.mjs': typeof import('chrome://remote/content/shared/Browser.sys.mjs');
'chrome://remote/content/shared/Capture.sys.mjs': typeof import('chrome://remote/content/shared/Capture.sys.mjs');
'chrome://remote/content/shared/ChallengeHeaderParser.sys.mjs': typeof import('chrome://remote/content/shared/ChallengeHeaderParser.sys.mjs');
'chrome://remote/content/shared/DOM.sys.mjs': typeof import('chrome://remote/content/shared/DOM.sys.mjs');
'chrome://remote/content/shared/Format.sys.mjs': typeof import('chrome://remote/content/shared/Format.sys.mjs');
'chrome://remote/content/shared/Log.sys.mjs': typeof import('chrome://remote/content/shared/Log.sys.mjs');
'chrome://remote/content/shared/MobileTabBrowser.sys.mjs': typeof import('chrome://remote/content/shared/MobileTabBrowser.sys.mjs');
'chrome://remote/content/shared/Navigate.sys.mjs': typeof import('chrome://remote/content/shared/Navigate.sys.mjs');
'chrome://remote/content/shared/NavigationManager.sys.mjs': typeof import('chrome://remote/content/shared/NavigationManager.sys.mjs');
'chrome://remote/content/shared/NetworkCacheManager.sys.mjs': typeof import('chrome://remote/content/shared/NetworkCacheManager.sys.mjs');
'chrome://remote/content/shared/NetworkDecodedBodySizeMap.sys.mjs': typeof import('chrome://remote/content/shared/NetworkDecodedBodySizeMap.sys.mjs');
'chrome://remote/content/shared/NetworkRequest.sys.mjs': typeof import('chrome://remote/content/shared/NetworkRequest.sys.mjs');
'chrome://remote/content/shared/NetworkResponse.sys.mjs': typeof import('chrome://remote/content/shared/NetworkResponse.sys.mjs');
'chrome://remote/content/shared/PDF.sys.mjs': typeof import('chrome://remote/content/shared/PDF.sys.mjs');
'chrome://remote/content/shared/Permissions.sys.mjs': typeof import('chrome://remote/content/shared/Permissions.sys.mjs');
'chrome://remote/content/shared/Prompt.sys.mjs': typeof import('chrome://remote/content/shared/Prompt.sys.mjs');
'chrome://remote/content/shared/Realm.sys.mjs': typeof import('chrome://remote/content/shared/Realm.sys.mjs');
'chrome://remote/content/shared/RecommendedPreferences.sys.mjs': typeof import('chrome://remote/content/shared/RecommendedPreferences.sys.mjs');
'chrome://remote/content/shared/Stack.sys.mjs': typeof import('chrome://remote/content/shared/Stack.sys.mjs');
'chrome://remote/content/shared/Sync.sys.mjs': typeof import('chrome://remote/content/shared/Sync.sys.mjs');
'chrome://remote/content/shared/TabManager.sys.mjs': typeof import('chrome://remote/content/shared/TabManager.sys.mjs');
'chrome://remote/content/shared/UUID.sys.mjs': typeof import('chrome://remote/content/shared/UUID.sys.mjs');
'chrome://remote/content/shared/UserContextManager.sys.mjs': typeof import('chrome://remote/content/shared/UserContextManager.sys.mjs');
'chrome://remote/content/shared/WindowManager.sys.mjs': typeof import('chrome://remote/content/shared/WindowManager.sys.mjs');
'chrome://remote/content/shared/js-window-actors/NavigationListenerActor.sys.mjs': typeof import('chrome://remote/content/shared/js-window-actors/NavigationListenerActor.sys.mjs');
'chrome://remote/content/shared/listeners/BeforeStopRequestListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/BeforeStopRequestListener.sys.mjs');
'chrome://remote/content/shared/listeners/BrowsingContextListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/BrowsingContextListener.sys.mjs');
'chrome://remote/content/shared/listeners/CachedResourceListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/CachedResourceListener.sys.mjs');
'chrome://remote/content/shared/listeners/ConsoleAPIListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/ConsoleAPIListener.sys.mjs');
'chrome://remote/content/shared/listeners/ConsoleListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/ConsoleListener.sys.mjs');
'chrome://remote/content/shared/listeners/ContextualIdentityListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/ContextualIdentityListener.sys.mjs');
'chrome://remote/content/shared/listeners/LoadListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/LoadListener.sys.mjs');
'chrome://remote/content/shared/listeners/NavigationListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/NavigationListener.sys.mjs');
'chrome://remote/content/shared/listeners/NetworkEventRecord.sys.mjs': typeof import('chrome://remote/content/shared/listeners/NetworkEventRecord.sys.mjs');
'chrome://remote/content/shared/listeners/NetworkListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/NetworkListener.sys.mjs');
'chrome://remote/content/shared/listeners/PromptListener.sys.mjs': typeof import('chrome://remote/content/shared/listeners/PromptListener.sys.mjs');
'chrome://remote/content/shared/messagehandler/Errors.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/Errors.sys.mjs');
'chrome://remote/content/shared/messagehandler/EventsDispatcher.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/EventsDispatcher.sys.mjs');
'chrome://remote/content/shared/messagehandler/MessageHandler.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/MessageHandler.sys.mjs');
'chrome://remote/content/shared/messagehandler/MessageHandlerRegistry.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/MessageHandlerRegistry.sys.mjs');
'chrome://remote/content/shared/messagehandler/ModuleCache.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/ModuleCache.sys.mjs');
'chrome://remote/content/shared/messagehandler/RootMessageHandler.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/RootMessageHandler.sys.mjs');
'chrome://remote/content/shared/messagehandler/RootMessageHandlerRegistry.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/RootMessageHandlerRegistry.sys.mjs');
'chrome://remote/content/shared/messagehandler/WindowGlobalMessageHandler.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/WindowGlobalMessageHandler.sys.mjs');
'chrome://remote/content/shared/messagehandler/sessiondata/SessionData.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/sessiondata/SessionData.sys.mjs');
'chrome://remote/content/shared/messagehandler/sessiondata/SessionDataReader.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/sessiondata/SessionDataReader.sys.mjs');
'chrome://remote/content/shared/messagehandler/transports/BrowsingContextUtils.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/transports/BrowsingContextUtils.sys.mjs');
'chrome://remote/content/shared/messagehandler/transports/RootTransport.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/transports/RootTransport.sys.mjs');
'chrome://remote/content/shared/messagehandler/transports/js-window-actors/MessageHandlerFrameActor.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/transports/js-window-actors/MessageHandlerFrameActor.sys.mjs');
'chrome://remote/content/shared/messagehandler/transports/js-window-actors/MessageHandlerFrameChild.sys.mjs': typeof import('chrome://remote/content/shared/messagehandler/transports/js-window-actors/MessageHandlerFrameChild.sys.mjs');
'chrome://remote/content/shared/webdriver/Accessibility.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Accessibility.sys.mjs');
'chrome://remote/content/shared/webdriver/Actions.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Actions.sys.mjs');
'chrome://remote/content/shared/webdriver/Assert.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Assert.sys.mjs');
'chrome://remote/content/shared/webdriver/Capabilities.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Capabilities.sys.mjs');
'chrome://remote/content/shared/webdriver/Errors.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Errors.sys.mjs');
'chrome://remote/content/shared/webdriver/Event.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Event.sys.mjs');
'chrome://remote/content/shared/webdriver/KeyData.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/KeyData.sys.mjs');
'chrome://remote/content/shared/webdriver/NodeCache.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/NodeCache.sys.mjs');
'chrome://remote/content/shared/webdriver/Session.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/Session.sys.mjs');
'chrome://remote/content/shared/webdriver/URLPattern.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/URLPattern.sys.mjs');
'chrome://remote/content/shared/webdriver/UserPromptHandler.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/UserPromptHandler.sys.mjs');
'chrome://remote/content/shared/webdriver/process-actors/WebDriverProcessDataParent.sys.mjs': typeof import('chrome://remote/content/shared/webdriver/process-actors/WebDriverProcessDataParent.sys.mjs');
'chrome://remote/content/webdriver-bidi/NewSessionHandler.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/NewSessionHandler.sys.mjs');
'chrome://remote/content/webdriver-bidi/RemoteValue.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/RemoteValue.sys.mjs');
'chrome://remote/content/webdriver-bidi/WebDriverBiDi.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/WebDriverBiDi.sys.mjs');
'chrome://remote/content/webdriver-bidi/WebDriverBiDiConnection.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/WebDriverBiDiConnection.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/Intercept.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/Intercept.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/ModuleRegistry.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/ModuleRegistry.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/browser.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/browser.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/browsingContext.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/browsingContext.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/input.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/input.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/log.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/log.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/network.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/network.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/permissions.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/permissions.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/script.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/script.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/session.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/session.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/storage.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/storage.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/root/webExtension.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/root/webExtension.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/browsingContext.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/browsingContext.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/log.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/log.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/network.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/network.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/script.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal-in-root/script.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/_configuration.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/_configuration.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/browsingContext.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/browsingContext.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/input.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/input.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/log.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/log.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/network.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/network.sys.mjs');
'chrome://remote/content/webdriver-bidi/modules/windowglobal/script.sys.mjs': typeof import('chrome://remote/content/webdriver-bidi/modules/windowglobal/script.sys.mjs');
'moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs': typeof import('moz-src:///browser/components/search/BrowserSearchTelemetry.sys.mjs');
'moz-src:///browser/components/search/OpenSearchManager.sys.mjs': typeof import('moz-src:///browser/components/search/OpenSearchManager.sys.mjs');
'moz-src:///browser/components/search/SERPCategorization.sys.mjs': typeof import('moz-src:///browser/components/search/SERPCategorization.sys.mjs');
'moz-src:///browser/components/search/SearchOneOffs.sys.mjs': typeof import('moz-src:///browser/components/search/SearchOneOffs.sys.mjs');
'moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs': typeof import('moz-src:///browser/components/search/SearchSERPTelemetry.sys.mjs');
'moz-src:///browser/components/search/SearchUIUtils.sys.mjs': typeof import('moz-src:///browser/components/search/SearchUIUtils.sys.mjs');
'moz-src:///browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/AsyncTabSwitcher.sys.mjs');
'moz-src:///browser/components/tabbrowser/GroupsList.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/GroupsList.sys.mjs');
'moz-src:///browser/components/tabbrowser/NewTabPagePreloading.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/NewTabPagePreloading.sys.mjs');
'moz-src:///browser/components/tabbrowser/OpenInTabsUtils.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/OpenInTabsUtils.sys.mjs');
'moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/SmartTabGrouping.sys.mjs');
'moz-src:///browser/components/tabbrowser/TabsList.sys.mjs': typeof import('moz-src:///browser/components/tabbrowser/TabsList.sys.mjs');
'moz-src:///toolkit/components/reader/AboutReader.sys.mjs': typeof import('moz-src:///toolkit/components/reader/AboutReader.sys.mjs');
'moz-src:///toolkit/components/reader/ReaderMode.sys.mjs': typeof import('moz-src:///toolkit/components/reader/ReaderMode.sys.mjs');
'moz-src:///toolkit/components/reader/ReaderWorker.sys.mjs': typeof import('moz-src:///toolkit/components/reader/ReaderWorker.sys.mjs');
'resource:///actors/AboutNewTabParent.sys.mjs': typeof import('resource:///actors/AboutNewTabParent.sys.mjs');
'resource:///actors/AboutReaderParent.sys.mjs': typeof import('resource:///actors/AboutReaderParent.sys.mjs');
'resource:///actors/AboutWelcomeParent.sys.mjs': typeof import('resource:///actors/AboutWelcomeParent.sys.mjs');
'resource:///actors/ClickHandlerParent.sys.mjs': typeof import('resource:///actors/ClickHandlerParent.sys.mjs');
'resource:///actors/ContentSearchParent.sys.mjs': typeof import('resource:///actors/ContentSearchParent.sys.mjs');
'resource:///actors/ContextMenuChild.sys.mjs': typeof import('resource:///actors/ContextMenuChild.sys.mjs');
'resource:///actors/LinkHandlerParent.sys.mjs': typeof import('resource:///actors/LinkHandlerParent.sys.mjs');
'resource:///actors/PluginParent.sys.mjs': typeof import('resource:///actors/PluginParent.sys.mjs');
'resource:///actors/SearchSERPTelemetryChild.sys.mjs': typeof import('resource:///actors/SearchSERPTelemetryChild.sys.mjs');
'resource:///actors/ShoppingSidebarParent.sys.mjs': typeof import('resource:///actors/ShoppingSidebarParent.sys.mjs');
'resource:///actors/WebRTCChild.sys.mjs': typeof import('resource:///actors/WebRTCChild.sys.mjs');
'resource:///modules/360seMigrationUtils.sys.mjs': typeof import('resource:///modules/360seMigrationUtils.sys.mjs');
'resource:///modules/AboutHomeStartupCache.sys.mjs': typeof import('resource:///modules/AboutHomeStartupCache.sys.mjs');
'resource:///modules/AboutNewTab.sys.mjs': typeof import('resource:///modules/AboutNewTab.sys.mjs');
'resource:///modules/AboutNewTabRedirector.sys.mjs': typeof import('resource:///modules/AboutNewTabRedirector.sys.mjs');
'resource:///modules/ActionsProviderContextualSearch.sys.mjs': typeof import('resource:///modules/ActionsProviderContextualSearch.sys.mjs');
'resource:///modules/ActionsProviderQuickActions.sys.mjs': typeof import('resource:///modules/ActionsProviderQuickActions.sys.mjs');
'resource:///modules/AttributionCode.sys.mjs': typeof import('resource:///modules/AttributionCode.sys.mjs');
'resource:///modules/BrowserGlue.sys.mjs': typeof import('resource:///modules/BrowserGlue.sys.mjs');
'resource:///modules/BrowserUIUtils.sys.mjs': typeof import('resource:///modules/BrowserUIUtils.sys.mjs');
'resource:///modules/BrowserUsageTelemetry.sys.mjs': typeof import('resource:///modules/BrowserUsageTelemetry.sys.mjs');
'resource:///modules/BrowserWindowTracker.sys.mjs': typeof import('resource:///modules/BrowserWindowTracker.sys.mjs');
'resource:///modules/BuiltInThemeConfig.sys.mjs': typeof import('resource:///modules/BuiltInThemeConfig.sys.mjs');
'resource:///modules/BuiltInThemes.sys.mjs': typeof import('resource:///modules/BuiltInThemes.sys.mjs');
'resource:///modules/ChromeMigrationUtils.sys.mjs': typeof import('resource:///modules/ChromeMigrationUtils.sys.mjs');
'resource:///modules/ContentAnalysis.sys.mjs': typeof import('resource:///modules/ContentAnalysis.sys.mjs');
'resource:///modules/ContentCrashHandlers.sys.mjs': typeof import('resource:///modules/ContentCrashHandlers.sys.mjs');
'resource:///modules/CustomizableUI.sys.mjs': typeof import('resource:///modules/CustomizableUI.sys.mjs');
'resource:///modules/CustomizableWidgets.sys.mjs': typeof import('resource:///modules/CustomizableWidgets.sys.mjs');
'resource:///modules/Discovery.sys.mjs': typeof import('resource:///modules/Discovery.sys.mjs');
'resource:///modules/DoHConfig.sys.mjs': typeof import('resource:///modules/DoHConfig.sys.mjs');
'resource:///modules/DoHController.sys.mjs': typeof import('resource:///modules/DoHController.sys.mjs');
'resource:///modules/DoHHeuristics.sys.mjs': typeof import('resource:///modules/DoHHeuristics.sys.mjs');
'resource:///modules/DownloadSpamProtection.sys.mjs': typeof import('resource:///modules/DownloadSpamProtection.sys.mjs');
'resource:///modules/DownloadsCommon.sys.mjs': typeof import('resource:///modules/DownloadsCommon.sys.mjs');
'resource:///modules/DownloadsViewUI.sys.mjs': typeof import('resource:///modules/DownloadsViewUI.sys.mjs');
'resource:///modules/DownloadsViewableInternally.sys.mjs': typeof import('resource:///modules/DownloadsViewableInternally.sys.mjs');
'resource:///modules/DragPositionManager.sys.mjs': typeof import('resource:///modules/DragPositionManager.sys.mjs');
'resource:///modules/ESEDBReader.sys.mjs': typeof import('resource:///modules/ESEDBReader.sys.mjs');
'resource:///modules/EveryWindow.sys.mjs': typeof import('resource:///modules/EveryWindow.sys.mjs');
'resource:///modules/ExtensionBrowsingData.sys.mjs': typeof import('resource:///modules/ExtensionBrowsingData.sys.mjs');
'resource:///modules/ExtensionControlledPopup.sys.mjs': typeof import('resource:///modules/ExtensionControlledPopup.sys.mjs');
'resource:///modules/ExtensionPopups.sys.mjs': typeof import('resource:///modules/ExtensionPopups.sys.mjs');
'resource:///modules/ExtensionsUI.sys.mjs': typeof import('resource:///modules/ExtensionsUI.sys.mjs');
'resource:///modules/FaviconLoader.sys.mjs': typeof import('resource:///modules/FaviconLoader.sys.mjs');
'resource:///modules/FileMigrators.sys.mjs': typeof import('resource:///modules/FileMigrators.sys.mjs');
'resource:///modules/FilePickerCrashed.sys.mjs': typeof import('resource:///modules/FilePickerCrashed.sys.mjs');
'resource:///modules/FilterAdult.sys.mjs': typeof import('resource:///modules/FilterAdult.sys.mjs');
'resource:///modules/FirefoxBridgeExtensionUtils.sys.mjs': typeof import('resource:///modules/FirefoxBridgeExtensionUtils.sys.mjs');
'resource:///modules/FirefoxProfileMigrator.sys.mjs': typeof import('resource:///modules/FirefoxProfileMigrator.sys.mjs');
'resource:///modules/GenAI.sys.mjs': typeof import('resource:///modules/GenAI.sys.mjs');
'resource:///modules/HeadlessShell.sys.mjs': typeof import('resource:///modules/HeadlessShell.sys.mjs');
'resource:///modules/HistoryController.sys.mjs': typeof import('resource:///modules/HistoryController.sys.mjs');
'resource:///modules/HomePage.sys.mjs': typeof import('resource:///modules/HomePage.sys.mjs');
'resource:///modules/Interactions.sys.mjs': typeof import('resource:///modules/Interactions.sys.mjs');
'resource:///modules/InteractionsBlocklist.sys.mjs': typeof import('resource:///modules/InteractionsBlocklist.sys.mjs');
'resource:///modules/InternalTestingProfileMigrator.sys.mjs': typeof import('resource:///modules/InternalTestingProfileMigrator.sys.mjs');
'resource:///modules/LaterRun.sys.mjs': typeof import('resource:///modules/LaterRun.sys.mjs');
'resource:///modules/LinksCache.sys.mjs': typeof import('resource:///modules/LinksCache.sys.mjs');
'resource:///modules/LoginBreaches.sys.mjs': typeof import('resource:///modules/LoginBreaches.sys.mjs');
'resource:///modules/MacAttribution.sys.mjs': typeof import('resource:///modules/MacAttribution.sys.mjs');
'resource:///modules/MerinoClient.sys.mjs': typeof import('resource:///modules/MerinoClient.sys.mjs');
'resource:///modules/MigrationUtils.sys.mjs': typeof import('resource:///modules/MigrationUtils.sys.mjs');
'resource:///modules/OpenTabs.sys.mjs': typeof import('resource:///modules/OpenTabs.sys.mjs');
'resource:///modules/PageActions.sys.mjs': typeof import('resource:///modules/PageActions.sys.mjs');
'resource:///modules/PanelMultiView.sys.mjs': typeof import('resource:///modules/PanelMultiView.sys.mjs');
'resource:///modules/PartnerLinkAttribution.sys.mjs': typeof import('resource:///modules/PartnerLinkAttribution.sys.mjs');
'resource:///modules/PermissionUI.sys.mjs': typeof import('resource:///modules/PermissionUI.sys.mjs');
'resource:///modules/PlacesUIUtils.sys.mjs': typeof import('resource:///modules/PlacesUIUtils.sys.mjs');
'resource:///modules/PopupBlockerObserver.sys.mjs': typeof import('resource:///modules/PopupBlockerObserver.sys.mjs');
'resource:///modules/ProcessHangMonitor.sys.mjs': typeof import('resource:///modules/ProcessHangMonitor.sys.mjs');
'resource:///modules/QuickActionsLoaderDefault.sys.mjs': typeof import('resource:///modules/QuickActionsLoaderDefault.sys.mjs');
'resource:///modules/QuickSuggest.sys.mjs': typeof import('resource:///modules/QuickSuggest.sys.mjs');
'resource:///modules/ReportBrokenSite.sys.mjs': typeof import('resource:///modules/ReportBrokenSite.sys.mjs');
'resource:///modules/ResetPBMPanel.sys.mjs': typeof import('resource:///modules/ResetPBMPanel.sys.mjs');
'resource:///modules/ReviewCheckerManager.sys.mjs': typeof import('resource:///modules/ReviewCheckerManager.sys.mjs');
'resource:///modules/SafariProfileMigrator.sys.mjs': typeof import('resource:///modules/SafariProfileMigrator.sys.mjs');
'resource:///modules/Sanitizer.sys.mjs': typeof import('resource:///modules/Sanitizer.sys.mjs');
'resource:///modules/ScreenshotsOverlayChild.sys.mjs': typeof import('resource:///modules/ScreenshotsOverlayChild.sys.mjs');
'resource:///modules/ScreenshotsUtils.sys.mjs': typeof import('resource:///modules/ScreenshotsUtils.sys.mjs');
'resource:///modules/SearchModeSwitcher.sys.mjs': typeof import('resource:///modules/SearchModeSwitcher.sys.mjs');
'resource:///modules/SelectionChangedMenulist.sys.mjs': typeof import('resource:///modules/SelectionChangedMenulist.sys.mjs');
'resource:///modules/ShellService.sys.mjs': typeof import('resource:///modules/ShellService.sys.mjs');
'resource:///modules/ShoppingUtils.sys.mjs': typeof import('resource:///modules/ShoppingUtils.sys.mjs');
'resource:///modules/SidebarManager.sys.mjs': typeof import('resource:///modules/SidebarManager.sys.mjs');
'resource:///modules/SidebarState.sys.mjs': typeof import('resource:///modules/SidebarState.sys.mjs');
'resource:///modules/SiteDataManager.sys.mjs': typeof import('resource:///modules/SiteDataManager.sys.mjs');
'resource:///modules/SitePermissions.sys.mjs': typeof import('resource:///modules/SitePermissions.sys.mjs');
'resource:///modules/SyncedTabsController.sys.mjs': typeof import('resource:///modules/SyncedTabsController.sys.mjs');
'resource:///modules/TRRPerformance.sys.mjs': typeof import('resource:///modules/TRRPerformance.sys.mjs');
'resource:///modules/TaskbarTabUI.sys.mjs': typeof import('resource:///modules/TaskbarTabUI.sys.mjs');
'resource:///modules/ThemeVariableMap.sys.mjs': typeof import('resource:///modules/ThemeVariableMap.sys.mjs');
'resource:///modules/ToolbarContextMenu.sys.mjs': typeof import('resource:///modules/ToolbarContextMenu.sys.mjs');
'resource:///modules/TransientPrefs.sys.mjs': typeof import('resource:///modules/TransientPrefs.sys.mjs');
'resource:///modules/UITour.sys.mjs': typeof import('resource:///modules/UITour.sys.mjs');
'resource:///modules/URILoadingHelper.sys.mjs': typeof import('resource:///modules/URILoadingHelper.sys.mjs');
'resource:///modules/UrlbarController.sys.mjs': typeof import('resource:///modules/UrlbarController.sys.mjs');
'resource:///modules/UrlbarEventBufferer.sys.mjs': typeof import('resource:///modules/UrlbarEventBufferer.sys.mjs');
'resource:///modules/UrlbarInput.sys.mjs': typeof import('resource:///modules/UrlbarInput.sys.mjs');
'resource:///modules/UrlbarPrefs.sys.mjs': typeof import('resource:///modules/UrlbarPrefs.sys.mjs');
'resource:///modules/UrlbarProviderAutofill.sys.mjs': typeof import('resource:///modules/UrlbarProviderAutofill.sys.mjs');
'resource:///modules/UrlbarProviderCalculator.sys.mjs': typeof import('resource:///modules/UrlbarProviderCalculator.sys.mjs');
'resource:///modules/UrlbarProviderClipboard.sys.mjs': typeof import('resource:///modules/UrlbarProviderClipboard.sys.mjs');
'resource:///modules/UrlbarProviderGlobalActions.sys.mjs': typeof import('resource:///modules/UrlbarProviderGlobalActions.sys.mjs');
'resource:///modules/UrlbarProviderInterventions.sys.mjs': typeof import('resource:///modules/UrlbarProviderInterventions.sys.mjs');
'resource:///modules/UrlbarProviderOpenTabs.sys.mjs': typeof import('resource:///modules/UrlbarProviderOpenTabs.sys.mjs');
'resource:///modules/UrlbarProviderPlaces.sys.mjs': typeof import('resource:///modules/UrlbarProviderPlaces.sys.mjs');
'resource:///modules/UrlbarProviderQuickSuggest.sys.mjs': typeof import('resource:///modules/UrlbarProviderQuickSuggest.sys.mjs');
'resource:///modules/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs': typeof import('resource:///modules/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs');
'resource:///modules/UrlbarProviderRecentSearches.sys.mjs': typeof import('resource:///modules/UrlbarProviderRecentSearches.sys.mjs');
'resource:///modules/UrlbarProviderSearchSuggestions.sys.mjs': typeof import('resource:///modules/UrlbarProviderSearchSuggestions.sys.mjs');
'resource:///modules/UrlbarProviderSearchTips.sys.mjs': typeof import('resource:///modules/UrlbarProviderSearchTips.sys.mjs');
'resource:///modules/UrlbarProviderTabToSearch.sys.mjs': typeof import('resource:///modules/UrlbarProviderTabToSearch.sys.mjs');
'resource:///modules/UrlbarProviderTopSites.sys.mjs': typeof import('resource:///modules/UrlbarProviderTopSites.sys.mjs');
'resource:///modules/UrlbarProviderUnitConversion.sys.mjs': typeof import('resource:///modules/UrlbarProviderUnitConversion.sys.mjs');
'resource:///modules/UrlbarProvidersManager.sys.mjs': typeof import('resource:///modules/UrlbarProvidersManager.sys.mjs');
'resource:///modules/UrlbarResult.sys.mjs': typeof import('resource:///modules/UrlbarResult.sys.mjs');
'resource:///modules/UrlbarSearchOneOffs.sys.mjs': typeof import('resource:///modules/UrlbarSearchOneOffs.sys.mjs');
'resource:///modules/UrlbarSearchTermsPersistence.sys.mjs': typeof import('resource:///modules/UrlbarSearchTermsPersistence.sys.mjs');
'resource:///modules/UrlbarSearchUtils.sys.mjs': typeof import('resource:///modules/UrlbarSearchUtils.sys.mjs');
'resource:///modules/UrlbarTokenizer.sys.mjs': typeof import('resource:///modules/UrlbarTokenizer.sys.mjs');
'resource:///modules/UrlbarUtils.sys.mjs': typeof import('resource:///modules/UrlbarUtils.sys.mjs');
'resource:///modules/UrlbarValueFormatter.sys.mjs': typeof import('resource:///modules/UrlbarValueFormatter.sys.mjs');
'resource:///modules/UrlbarView.sys.mjs': typeof import('resource:///modules/UrlbarView.sys.mjs');
'resource:///modules/WebProtocolHandlerRegistrar.sys.mjs': typeof import('resource:///modules/WebProtocolHandlerRegistrar.sys.mjs');
'resource:///modules/ZoomUI.sys.mjs': typeof import('resource:///modules/ZoomUI.sys.mjs');
'resource:///modules/aboutwelcome/AWScreenUtils.sys.mjs': typeof import('resource:///modules/aboutwelcome/AWScreenUtils.sys.mjs');
'resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs': typeof import('resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs');
'resource:///modules/aboutwelcome/AboutWelcomeDefaults.sys.mjs': typeof import('resource:///modules/aboutwelcome/AboutWelcomeDefaults.sys.mjs');
'resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs': typeof import('resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs');
'resource:///modules/asrouter/ASRouter.sys.mjs': typeof import('resource:///modules/asrouter/ASRouter.sys.mjs');
'resource:///modules/asrouter/ASRouterDefaultConfig.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterDefaultConfig.sys.mjs');
'resource:///modules/asrouter/ASRouterNewTabHook.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterNewTabHook.sys.mjs');
'resource:///modules/asrouter/ASRouterPreferences.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterPreferences.sys.mjs');
'resource:///modules/asrouter/ASRouterStorage.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterStorage.sys.mjs');
'resource:///modules/asrouter/ASRouterTargeting.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterTargeting.sys.mjs');
'resource:///modules/asrouter/ASRouterTriggerListeners.sys.mjs': typeof import('resource:///modules/asrouter/ASRouterTriggerListeners.sys.mjs');
'resource:///modules/asrouter/ActorConstants.mjs': typeof import('resource:///modules/asrouter/ActorConstants.mjs');
'resource:///modules/asrouter/BookmarksBarButton.sys.mjs': typeof import('resource:///modules/asrouter/BookmarksBarButton.sys.mjs');
'resource:///modules/asrouter/CFRMessageProvider.sys.mjs': typeof import('resource:///modules/asrouter/CFRMessageProvider.sys.mjs');
'resource:///modules/asrouter/CFRPageActions.sys.mjs': typeof import('resource:///modules/asrouter/CFRPageActions.sys.mjs');
'resource:///modules/asrouter/FeatureCallout.sys.mjs': typeof import('resource:///modules/asrouter/FeatureCallout.sys.mjs');
'resource:///modules/asrouter/FeatureCalloutBroker.sys.mjs': typeof import('resource:///modules/asrouter/FeatureCalloutBroker.sys.mjs');
'resource:///modules/asrouter/FeatureCalloutMessages.sys.mjs': typeof import('resource:///modules/asrouter/FeatureCalloutMessages.sys.mjs');
'resource:///modules/asrouter/InfoBar.sys.mjs': typeof import('resource:///modules/asrouter/InfoBar.sys.mjs');
'resource:///modules/asrouter/MenuMessage.sys.mjs': typeof import('resource:///modules/asrouter/MenuMessage.sys.mjs');
'resource:///modules/asrouter/MomentsPageHub.sys.mjs': typeof import('resource:///modules/asrouter/MomentsPageHub.sys.mjs');
'resource:///modules/asrouter/OnboardingMessageProvider.sys.mjs': typeof import('resource:///modules/asrouter/OnboardingMessageProvider.sys.mjs');
'resource:///modules/asrouter/PageEventManager.sys.mjs': typeof import('resource:///modules/asrouter/PageEventManager.sys.mjs');
'resource:///modules/asrouter/PanelTestProvider.sys.mjs': typeof import('resource:///modules/asrouter/PanelTestProvider.sys.mjs');
'resource:///modules/asrouter/RemoteL10n.sys.mjs': typeof import('resource:///modules/asrouter/RemoteL10n.sys.mjs');
'resource:///modules/asrouter/Spotlight.sys.mjs': typeof import('resource:///modules/asrouter/Spotlight.sys.mjs');
'resource:///modules/asrouter/ToastNotification.sys.mjs': typeof import('resource:///modules/asrouter/ToastNotification.sys.mjs');
'resource:///modules/asrouter/ToolbarBadgeHub.sys.mjs': typeof import('resource:///modules/asrouter/ToolbarBadgeHub.sys.mjs');
'resource:///modules/backup/ArchiveEncryption.sys.mjs': typeof import('resource:///modules/backup/ArchiveEncryption.sys.mjs');
'resource:///modules/backup/ArchiveEncryptionState.sys.mjs': typeof import('resource:///modules/backup/ArchiveEncryptionState.sys.mjs');
'resource:///modules/backup/ArchiveUtils.sys.mjs': typeof import('resource:///modules/backup/ArchiveUtils.sys.mjs');
'resource:///modules/backup/BackupError.mjs': typeof import('resource:///modules/backup/BackupError.mjs');
'resource:///modules/backup/BackupService.sys.mjs': typeof import('resource:///modules/backup/BackupService.sys.mjs');
'resource:///modules/firefox-view-synced-tabs-error-handler.sys.mjs': typeof import('resource:///modules/firefox-view-synced-tabs-error-handler.sys.mjs');
'resource:///modules/firefox-view-tabs-setup-manager.sys.mjs': typeof import('resource:///modules/firefox-view-tabs-setup-manager.sys.mjs');
'resource:///modules/pagedata/OpenGraphPageData.sys.mjs': typeof import('resource:///modules/pagedata/OpenGraphPageData.sys.mjs');
'resource:///modules/pagedata/PageDataSchema.sys.mjs': typeof import('resource:///modules/pagedata/PageDataSchema.sys.mjs');
'resource:///modules/pagedata/PageDataService.sys.mjs': typeof import('resource:///modules/pagedata/PageDataService.sys.mjs');
'resource:///modules/pagedata/SchemaOrgPageData.sys.mjs': typeof import('resource:///modules/pagedata/SchemaOrgPageData.sys.mjs');
'resource:///modules/pagedata/TwitterPageData.sys.mjs': typeof import('resource:///modules/pagedata/TwitterPageData.sys.mjs');
'resource:///modules/policies/BookmarksPolicies.sys.mjs': typeof import('resource:///modules/policies/BookmarksPolicies.sys.mjs');
'resource:///modules/policies/Policies.sys.mjs': typeof import('resource:///modules/policies/Policies.sys.mjs');
'resource:///modules/policies/ProxyPolicies.sys.mjs': typeof import('resource:///modules/policies/ProxyPolicies.sys.mjs');
'resource:///modules/policies/WebsiteFilter.sys.mjs': typeof import('resource:///modules/policies/WebsiteFilter.sys.mjs');
'resource:///modules/policies/schema.sys.mjs': typeof import('resource:///modules/policies/schema.sys.mjs');
'resource:///modules/profiles/SelectableProfileService.sys.mjs': typeof import('resource:///modules/profiles/SelectableProfileService.sys.mjs');
'resource:///modules/sessionstore/PageWireframes.sys.mjs': typeof import('resource:///modules/sessionstore/PageWireframes.sys.mjs');
'resource:///modules/sessionstore/RecentlyClosedTabsAndWindowsMenuUtils.sys.mjs': typeof import('resource:///modules/sessionstore/RecentlyClosedTabsAndWindowsMenuUtils.sys.mjs');
'resource:///modules/sessionstore/RunState.sys.mjs': typeof import('resource:///modules/sessionstore/RunState.sys.mjs');
'resource:///modules/sessionstore/SessionCookies.sys.mjs': typeof import('resource:///modules/sessionstore/SessionCookies.sys.mjs');
'resource:///modules/sessionstore/SessionFile.sys.mjs': typeof import('resource:///modules/sessionstore/SessionFile.sys.mjs');
'resource:///modules/sessionstore/SessionLogger.sys.mjs': typeof import('resource:///modules/sessionstore/SessionLogger.sys.mjs');
'resource:///modules/sessionstore/SessionMigration.sys.mjs': typeof import('resource:///modules/sessionstore/SessionMigration.sys.mjs');
'resource:///modules/sessionstore/SessionSaver.sys.mjs': typeof import('resource:///modules/sessionstore/SessionSaver.sys.mjs');
'resource:///modules/sessionstore/SessionStartup.sys.mjs': typeof import('resource:///modules/sessionstore/SessionStartup.sys.mjs');
'resource:///modules/sessionstore/SessionStore.sys.mjs': typeof import('resource:///modules/sessionstore/SessionStore.sys.mjs');
'resource:///modules/sessionstore/SessionWriter.sys.mjs': typeof import('resource:///modules/sessionstore/SessionWriter.sys.mjs');
'resource:///modules/sessionstore/StartupPerformance.sys.mjs': typeof import('resource:///modules/sessionstore/StartupPerformance.sys.mjs');
'resource:///modules/sessionstore/TabAttributes.sys.mjs': typeof import('resource:///modules/sessionstore/TabAttributes.sys.mjs');
'resource:///modules/sessionstore/TabGroupState.sys.mjs': typeof import('resource:///modules/sessionstore/TabGroupState.sys.mjs');
'resource:///modules/sessionstore/TabState.sys.mjs': typeof import('resource:///modules/sessionstore/TabState.sys.mjs');
'resource:///modules/sessionstore/TabStateCache.sys.mjs': typeof import('resource:///modules/sessionstore/TabStateCache.sys.mjs');
'resource:///modules/sessionstore/TabStateFlusher.sys.mjs': typeof import('resource:///modules/sessionstore/TabStateFlusher.sys.mjs');
'resource:///modules/topsites/TippyTopProvider.sys.mjs': typeof import('resource:///modules/topsites/TippyTopProvider.sys.mjs');
'resource:///modules/topsites/TopSites.sys.mjs': typeof import('resource:///modules/topsites/TopSites.sys.mjs');
'resource:///modules/topsites/constants.mjs': typeof import('resource:///modules/topsites/constants.mjs');
'resource:///modules/urlbar/private/AmpSuggestions.sys.mjs': typeof import('resource:///modules/urlbar/private/AmpSuggestions.sys.mjs');
'resource:///modules/urlbar/private/GeolocationUtils.sys.mjs': typeof import('resource:///modules/urlbar/private/GeolocationUtils.sys.mjs');
'resource:///modules/urlbar/private/MLSuggest.sys.mjs': typeof import('resource:///modules/urlbar/private/MLSuggest.sys.mjs');
'resource:///modules/webrtcUI.sys.mjs': typeof import('resource:///modules/webrtcUI.sys.mjs');
'resource://autofill/FormAutofill.sys.mjs': typeof import('resource://autofill/FormAutofill.sys.mjs');
'resource://autofill/FormAutofillContent.sys.mjs': typeof import('resource://autofill/FormAutofillContent.sys.mjs');
'resource://autofill/FormAutofillParent.sys.mjs': typeof import('resource://autofill/FormAutofillParent.sys.mjs');
'resource://autofill/FormAutofillPreferences.sys.mjs': typeof import('resource://autofill/FormAutofillPreferences.sys.mjs');
'resource://autofill/FormAutofillPrompter.sys.mjs': typeof import('resource://autofill/FormAutofillPrompter.sys.mjs');
'resource://autofill/FormAutofillStorage.sys.mjs': typeof import('resource://autofill/FormAutofillStorage.sys.mjs');
'resource://autofill/MLAutofill.sys.mjs': typeof import('resource://autofill/MLAutofill.sys.mjs');
'resource://autofill/ProfileAutoCompleteResult.sys.mjs': typeof import('resource://autofill/ProfileAutoCompleteResult.sys.mjs');
'resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs': typeof import('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');
'resource://devtools/client/performance-new/popup/menu-button.sys.mjs': typeof import('resource://devtools/client/performance-new/popup/menu-button.sys.mjs');
'resource://devtools/client/shared/components/reps/reps/rep-utils.mjs': typeof import('resource://devtools/client/shared/components/reps/reps/rep-utils.mjs');
'resource://devtools/client/shared/focus.mjs': typeof import('resource://devtools/client/shared/focus.mjs');
'resource://devtools/client/storage/VariablesView.sys.mjs': typeof import('resource://devtools/client/storage/VariablesView.sys.mjs');
'resource://devtools/server/actors/targets/target-actor-registry.sys.mjs': typeof import('resource://devtools/server/actors/targets/target-actor-registry.sys.mjs');
'resource://devtools/server/actors/watcher/SessionDataHelpers.sys.mjs': typeof import('resource://devtools/server/actors/watcher/SessionDataHelpers.sys.mjs');
'resource://devtools/server/actors/watcher/browsing-context-helpers.sys.mjs': typeof import('resource://devtools/server/actors/watcher/browsing-context-helpers.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/content_script.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/content_script.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/process.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/process.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/service_worker.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/service_worker.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/shared_worker.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/shared_worker.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/window-global.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/window-global.sys.mjs');
'resource://devtools/server/connectors/js-process-actor/target-watchers/worker.sys.mjs': typeof import('resource://devtools/server/connectors/js-process-actor/target-watchers/worker.sys.mjs');
'resource://devtools/server/tracer/tracer.sys.mjs': typeof import('resource://devtools/server/tracer/tracer.sys.mjs');
'resource://devtools/shared/DevToolsInfaillibleUtils.sys.mjs': typeof import('resource://devtools/shared/DevToolsInfaillibleUtils.sys.mjs');
'resource://devtools/shared/highlighters.mjs': typeof import('resource://devtools/shared/highlighters.mjs');
'resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs': typeof import('resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs');
'resource://devtools/shared/loader/Loader.sys.mjs': typeof import('resource://devtools/shared/loader/Loader.sys.mjs');
'resource://devtools/shared/network-observer/ChannelMap.sys.mjs': typeof import('resource://devtools/shared/network-observer/ChannelMap.sys.mjs');
'resource://devtools/shared/network-observer/NetworkAuthListener.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkAuthListener.sys.mjs');
'resource://devtools/shared/network-observer/NetworkHelper.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkHelper.sys.mjs');
'resource://devtools/shared/network-observer/NetworkObserver.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkObserver.sys.mjs');
'resource://devtools/shared/network-observer/NetworkOverride.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkOverride.sys.mjs');
'resource://devtools/shared/network-observer/NetworkResponseListener.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkResponseListener.sys.mjs');
'resource://devtools/shared/network-observer/NetworkThrottleManager.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkThrottleManager.sys.mjs');
'resource://devtools/shared/network-observer/NetworkUtils.sys.mjs': typeof import('resource://devtools/shared/network-observer/NetworkUtils.sys.mjs');
'resource://devtools/shared/network-observer/WildcardToRegexp.sys.mjs': typeof import('resource://devtools/shared/network-observer/WildcardToRegexp.sys.mjs');
'resource://devtools/shared/platform/CacheEntry.sys.mjs': typeof import('resource://devtools/shared/platform/CacheEntry.sys.mjs');
'resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs': typeof import('resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs');
'resource://devtools/shared/validate-breakpoint.sys.mjs': typeof import('resource://devtools/shared/validate-breakpoint.sys.mjs');
'resource://devtools/shared/worker/worker.sys.mjs': typeof import('resource://devtools/shared/worker/worker.sys.mjs');
'resource://gre/actors/AutoCompleteParent.sys.mjs': typeof import('resource://gre/actors/AutoCompleteParent.sys.mjs');
'resource://gre/actors/FormHandlerChild.sys.mjs': typeof import('resource://gre/actors/FormHandlerChild.sys.mjs');
'resource://gre/actors/MLEngineParent.sys.mjs': typeof import('resource://gre/actors/MLEngineParent.sys.mjs');
'resource://gre/actors/PopupBlockingParent.sys.mjs': typeof import('resource://gre/actors/PopupBlockingParent.sys.mjs');
'resource://gre/actors/SelectParent.sys.mjs': typeof import('resource://gre/actors/SelectParent.sys.mjs');
'resource://gre/actors/TranslationsParent.sys.mjs': typeof import('resource://gre/actors/TranslationsParent.sys.mjs');
'resource://gre/actors/ViewSourcePageChild.sys.mjs': typeof import('resource://gre/actors/ViewSourcePageChild.sys.mjs');
'resource://gre/modules/AboutPagesUtils.sys.mjs': typeof import('resource://gre/modules/AboutPagesUtils.sys.mjs');
'resource://gre/modules/AbuseReporter.sys.mjs': typeof import('resource://gre/modules/AbuseReporter.sys.mjs');
'resource://gre/modules/ActorManagerParent.sys.mjs': typeof import('resource://gre/modules/ActorManagerParent.sys.mjs');
'resource://gre/modules/AddonManager.sys.mjs': typeof import('resource://gre/modules/AddonManager.sys.mjs');
'resource://gre/modules/AddonSearchEngine.sys.mjs': typeof import('resource://gre/modules/AddonSearchEngine.sys.mjs');
'resource://gre/modules/AndroidLog.sys.mjs': typeof import('resource://gre/modules/AndroidLog.sys.mjs');
'resource://gre/modules/AppConstants.sys.mjs': typeof import('resource://gre/modules/AppConstants.sys.mjs');
'resource://gre/modules/AppMenuNotifications.sys.mjs': typeof import('resource://gre/modules/AppMenuNotifications.sys.mjs');
'resource://gre/modules/AppProvidedSearchEngine.sys.mjs': typeof import('resource://gre/modules/AppProvidedSearchEngine.sys.mjs');
'resource://gre/modules/AppUpdater.sys.mjs': typeof import('resource://gre/modules/AppUpdater.sys.mjs');
'resource://gre/modules/AsyncPrefs.sys.mjs': typeof import('resource://gre/modules/AsyncPrefs.sys.mjs');
'resource://gre/modules/AsyncShutdown.sys.mjs': typeof import('resource://gre/modules/AsyncShutdown.sys.mjs');
'resource://gre/modules/BackgroundPageThumbs.sys.mjs': typeof import('resource://gre/modules/BackgroundPageThumbs.sys.mjs');
'resource://gre/modules/BackgroundTasksUtils.sys.mjs': typeof import('resource://gre/modules/BackgroundTasksUtils.sys.mjs');
'resource://gre/modules/BackgroundUpdate.sys.mjs': typeof import('resource://gre/modules/BackgroundUpdate.sys.mjs');
'resource://gre/modules/BinarySearch.sys.mjs': typeof import('resource://gre/modules/BinarySearch.sys.mjs');
'resource://gre/modules/Blocklist.sys.mjs': typeof import('resource://gre/modules/Blocklist.sys.mjs');
'resource://gre/modules/BookmarkHTMLUtils.sys.mjs': typeof import('resource://gre/modules/BookmarkHTMLUtils.sys.mjs');
'resource://gre/modules/BookmarkJSONUtils.sys.mjs': typeof import('resource://gre/modules/BookmarkJSONUtils.sys.mjs');
'resource://gre/modules/BookmarkList.sys.mjs': typeof import('resource://gre/modules/BookmarkList.sys.mjs');
'resource://gre/modules/Bookmarks.sys.mjs': typeof import('resource://gre/modules/Bookmarks.sys.mjs');
'resource://gre/modules/BrowserTelemetryUtils.sys.mjs': typeof import('resource://gre/modules/BrowserTelemetryUtils.sys.mjs');
'resource://gre/modules/BrowserUtils.sys.mjs': typeof import('resource://gre/modules/BrowserUtils.sys.mjs');
'resource://gre/modules/CSV.sys.mjs': typeof import('resource://gre/modules/CSV.sys.mjs');
'resource://gre/modules/CanonicalJSON.sys.mjs': typeof import('resource://gre/modules/CanonicalJSON.sys.mjs');
'resource://gre/modules/CaptchaDetectionPingUtils.sys.mjs': typeof import('resource://gre/modules/CaptchaDetectionPingUtils.sys.mjs');
'resource://gre/modules/CaptchaResponseObserver.sys.mjs': typeof import('resource://gre/modules/CaptchaResponseObserver.sys.mjs');
'resource://gre/modules/CertUtils.sys.mjs': typeof import('resource://gre/modules/CertUtils.sys.mjs');
'resource://gre/modules/ChildCrashHandler.sys.mjs': typeof import('resource://gre/modules/ChildCrashHandler.sys.mjs');
'resource://gre/modules/ClientID.sys.mjs': typeof import('resource://gre/modules/ClientID.sys.mjs');
'resource://gre/modules/ClipboardContextMenu.sys.mjs': typeof import('resource://gre/modules/ClipboardContextMenu.sys.mjs');
'resource://gre/modules/Color.sys.mjs': typeof import('resource://gre/modules/Color.sys.mjs');
'resource://gre/modules/CommonDialog.sys.mjs': typeof import('resource://gre/modules/CommonDialog.sys.mjs');
'resource://gre/modules/ConduitsParent.sys.mjs': typeof import('resource://gre/modules/ConduitsParent.sys.mjs');
'resource://gre/modules/Console.sys.mjs': typeof import('resource://gre/modules/Console.sys.mjs');
'resource://gre/modules/ContentBlockingAllowList.sys.mjs': typeof import('resource://gre/modules/ContentBlockingAllowList.sys.mjs');
'resource://gre/modules/ContentDOMReference.sys.mjs': typeof import('resource://gre/modules/ContentDOMReference.sys.mjs');
'resource://gre/modules/ContentPrefUtils.sys.mjs': typeof import('resource://gre/modules/ContentPrefUtils.sys.mjs');
'resource://gre/modules/ContentRelevancyManager.sys.mjs': typeof import('resource://gre/modules/ContentRelevancyManager.sys.mjs');
'resource://gre/modules/ContextualIdentityService.sys.mjs': typeof import('resource://gre/modules/ContextualIdentityService.sys.mjs');
'resource://gre/modules/CoveragePing.sys.mjs': typeof import('resource://gre/modules/CoveragePing.sys.mjs');
'resource://gre/modules/CrashMonitor.sys.mjs': typeof import('resource://gre/modules/CrashMonitor.sys.mjs');
'resource://gre/modules/CrashService.sys.mjs': typeof import('resource://gre/modules/CrashService.sys.mjs');
'resource://gre/modules/CrashSubmit.sys.mjs': typeof import('resource://gre/modules/CrashSubmit.sys.mjs');
'resource://gre/modules/CreditCard.sys.mjs': typeof import('resource://gre/modules/CreditCard.sys.mjs');
'resource://gre/modules/DAPTelemetrySender.sys.mjs': typeof import('resource://gre/modules/DAPTelemetrySender.sys.mjs');
'resource://gre/modules/DAPVisitCounter.sys.mjs': typeof import('resource://gre/modules/DAPVisitCounter.sys.mjs');
'resource://gre/modules/DateTimePickerPanel.sys.mjs': typeof import('resource://gre/modules/DateTimePickerPanel.sys.mjs');
'resource://gre/modules/DeferredTask.sys.mjs': typeof import('resource://gre/modules/DeferredTask.sys.mjs');
'resource://gre/modules/DownloadCore.sys.mjs': typeof import('resource://gre/modules/DownloadCore.sys.mjs');
'resource://gre/modules/DownloadHistory.sys.mjs': typeof import('resource://gre/modules/DownloadHistory.sys.mjs');
'resource://gre/modules/DownloadLastDir.sys.mjs': typeof import('resource://gre/modules/DownloadLastDir.sys.mjs');
'resource://gre/modules/DownloadList.sys.mjs': typeof import('resource://gre/modules/DownloadList.sys.mjs');
'resource://gre/modules/DownloadPaths.sys.mjs': typeof import('resource://gre/modules/DownloadPaths.sys.mjs');
'resource://gre/modules/DownloadStore.sys.mjs': typeof import('resource://gre/modules/DownloadStore.sys.mjs');
'resource://gre/modules/DownloadUIHelper.sys.mjs': typeof import('resource://gre/modules/DownloadUIHelper.sys.mjs');
'resource://gre/modules/DownloadUtils.sys.mjs': typeof import('resource://gre/modules/DownloadUtils.sys.mjs');
'resource://gre/modules/Downloads.sys.mjs': typeof import('resource://gre/modules/Downloads.sys.mjs');
'resource://gre/modules/E10SUtils.sys.mjs': typeof import('resource://gre/modules/E10SUtils.sys.mjs');
'resource://gre/modules/EssentialDomainsRemoteSettings.sys.mjs': typeof import('resource://gre/modules/EssentialDomainsRemoteSettings.sys.mjs');
'resource://gre/modules/EventEmitter.sys.mjs': typeof import('resource://gre/modules/EventEmitter.sys.mjs');
'resource://gre/modules/EventPing.sys.mjs': typeof import('resource://gre/modules/EventPing.sys.mjs');
'resource://gre/modules/Extension.sys.mjs': typeof import('resource://gre/modules/Extension.sys.mjs');
'resource://gre/modules/ExtensionActivityLog.sys.mjs': typeof import('resource://gre/modules/ExtensionActivityLog.sys.mjs');
'resource://gre/modules/ExtensionChild.sys.mjs': typeof import('resource://gre/modules/ExtensionChild.sys.mjs');
'resource://gre/modules/ExtensionChildDevToolsUtils.sys.mjs': typeof import('resource://gre/modules/ExtensionChildDevToolsUtils.sys.mjs');
'resource://gre/modules/ExtensionCommon.sys.mjs': typeof import('resource://gre/modules/ExtensionCommon.sys.mjs');
'resource://gre/modules/ExtensionContent.sys.mjs': typeof import('resource://gre/modules/ExtensionContent.sys.mjs');
'resource://gre/modules/ExtensionDNR.sys.mjs': typeof import('resource://gre/modules/ExtensionDNR.sys.mjs');
'resource://gre/modules/ExtensionDNRLimits.sys.mjs': typeof import('resource://gre/modules/ExtensionDNRLimits.sys.mjs');
'resource://gre/modules/ExtensionDNRStore.sys.mjs': typeof import('resource://gre/modules/ExtensionDNRStore.sys.mjs');
'resource://gre/modules/ExtensionMenus.sys.mjs': typeof import('resource://gre/modules/ExtensionMenus.sys.mjs');
'resource://gre/modules/ExtensionPageChild.sys.mjs': typeof import('resource://gre/modules/ExtensionPageChild.sys.mjs');
'resource://gre/modules/ExtensionParent.sys.mjs': typeof import('resource://gre/modules/ExtensionParent.sys.mjs');
'resource://gre/modules/ExtensionPermissionMessages.sys.mjs': typeof import('resource://gre/modules/ExtensionPermissionMessages.sys.mjs');
'resource://gre/modules/ExtensionPermissions.sys.mjs': typeof import('resource://gre/modules/ExtensionPermissions.sys.mjs');
'resource://gre/modules/ExtensionPreferencesManager.sys.mjs': typeof import('resource://gre/modules/ExtensionPreferencesManager.sys.mjs');
'resource://gre/modules/ExtensionProcessScript.sys.mjs': typeof import('resource://gre/modules/ExtensionProcessScript.sys.mjs');
'resource://gre/modules/ExtensionScriptingStore.sys.mjs': typeof import('resource://gre/modules/ExtensionScriptingStore.sys.mjs');
'resource://gre/modules/ExtensionSearchHandler.sys.mjs': typeof import('resource://gre/modules/ExtensionSearchHandler.sys.mjs');
'resource://gre/modules/ExtensionSettingsStore.sys.mjs': typeof import('resource://gre/modules/ExtensionSettingsStore.sys.mjs');
'resource://gre/modules/ExtensionShortcuts.sys.mjs': typeof import('resource://gre/modules/ExtensionShortcuts.sys.mjs');
'resource://gre/modules/ExtensionStorage.sys.mjs': typeof import('resource://gre/modules/ExtensionStorage.sys.mjs');
'resource://gre/modules/ExtensionStorageComponents.sys.mjs': typeof import('resource://gre/modules/ExtensionStorageComponents.sys.mjs');
'resource://gre/modules/ExtensionStorageIDB.sys.mjs': typeof import('resource://gre/modules/ExtensionStorageIDB.sys.mjs');
'resource://gre/modules/ExtensionStorageSync.sys.mjs': typeof import('resource://gre/modules/ExtensionStorageSync.sys.mjs');
'resource://gre/modules/ExtensionStorageSyncKinto.sys.mjs': typeof import('resource://gre/modules/ExtensionStorageSyncKinto.sys.mjs');
'resource://gre/modules/ExtensionTelemetry.sys.mjs': typeof import('resource://gre/modules/ExtensionTelemetry.sys.mjs');
'resource://gre/modules/ExtensionUserScripts.sys.mjs': typeof import('resource://gre/modules/ExtensionUserScripts.sys.mjs');
'resource://gre/modules/ExtensionUserScriptsContent.sys.mjs': typeof import('resource://gre/modules/ExtensionUserScriptsContent.sys.mjs');
'resource://gre/modules/ExtensionUtils.sys.mjs': typeof import('resource://gre/modules/ExtensionUtils.sys.mjs');
'resource://gre/modules/ExtensionWorkerChild.sys.mjs': typeof import('resource://gre/modules/ExtensionWorkerChild.sys.mjs');
'resource://gre/modules/FileUtils.sys.mjs': typeof import('resource://gre/modules/FileUtils.sys.mjs');
'resource://gre/modules/FillHelpers.sys.mjs': typeof import('resource://gre/modules/FillHelpers.sys.mjs');
'resource://gre/modules/FindContent.sys.mjs': typeof import('resource://gre/modules/FindContent.sys.mjs');
'resource://gre/modules/Finder.sys.mjs': typeof import('resource://gre/modules/Finder.sys.mjs');
'resource://gre/modules/FinderHighlighter.sys.mjs': typeof import('resource://gre/modules/FinderHighlighter.sys.mjs');
'resource://gre/modules/FinderIterator.sys.mjs': typeof import('resource://gre/modules/FinderIterator.sys.mjs');
'resource://gre/modules/FinderParent.sys.mjs': typeof import('resource://gre/modules/FinderParent.sys.mjs');
'resource://gre/modules/FirefoxRelay.sys.mjs': typeof import('resource://gre/modules/FirefoxRelay.sys.mjs');
'resource://gre/modules/FirstStartup.sys.mjs': typeof import('resource://gre/modules/FirstStartup.sys.mjs');
'resource://gre/modules/ForgetAboutSite.sys.mjs': typeof import('resource://gre/modules/ForgetAboutSite.sys.mjs');
'resource://gre/modules/FormHistory.sys.mjs': typeof import('resource://gre/modules/FormHistory.sys.mjs');
'resource://gre/modules/FormHistoryAutoComplete.sys.mjs': typeof import('resource://gre/modules/FormHistoryAutoComplete.sys.mjs');
'resource://gre/modules/FormLikeFactory.sys.mjs': typeof import('resource://gre/modules/FormLikeFactory.sys.mjs');
'resource://gre/modules/FormScenarios.sys.mjs': typeof import('resource://gre/modules/FormScenarios.sys.mjs');
'resource://gre/modules/FxAccounts.sys.mjs': typeof import('resource://gre/modules/FxAccounts.sys.mjs');
'resource://gre/modules/FxAccountsClient.sys.mjs': typeof import('resource://gre/modules/FxAccountsClient.sys.mjs');
'resource://gre/modules/FxAccountsCommands.sys.mjs': typeof import('resource://gre/modules/FxAccountsCommands.sys.mjs');
'resource://gre/modules/FxAccountsCommon.sys.mjs': typeof import('resource://gre/modules/FxAccountsCommon.sys.mjs');
'resource://gre/modules/FxAccountsConfig.sys.mjs': typeof import('resource://gre/modules/FxAccountsConfig.sys.mjs');
'resource://gre/modules/FxAccountsDevice.sys.mjs': typeof import('resource://gre/modules/FxAccountsDevice.sys.mjs');
'resource://gre/modules/FxAccountsKeys.sys.mjs': typeof import('resource://gre/modules/FxAccountsKeys.sys.mjs');
'resource://gre/modules/FxAccountsOAuth.sys.mjs': typeof import('resource://gre/modules/FxAccountsOAuth.sys.mjs');
'resource://gre/modules/FxAccountsPairing.sys.mjs': typeof import('resource://gre/modules/FxAccountsPairing.sys.mjs');
'resource://gre/modules/FxAccountsPairingChannel.sys.mjs': typeof import('resource://gre/modules/FxAccountsPairingChannel.sys.mjs');
'resource://gre/modules/FxAccountsProfile.sys.mjs': typeof import('resource://gre/modules/FxAccountsProfile.sys.mjs');
'resource://gre/modules/FxAccountsProfileClient.sys.mjs': typeof import('resource://gre/modules/FxAccountsProfileClient.sys.mjs');
'resource://gre/modules/FxAccountsStorage.sys.mjs': typeof import('resource://gre/modules/FxAccountsStorage.sys.mjs');
'resource://gre/modules/FxAccountsTelemetry.sys.mjs': typeof import('resource://gre/modules/FxAccountsTelemetry.sys.mjs');
'resource://gre/modules/FxAccountsWebChannel.sys.mjs': typeof import('resource://gre/modules/FxAccountsWebChannel.sys.mjs');
'resource://gre/modules/GMPInstallManager.sys.mjs': typeof import('resource://gre/modules/GMPInstallManager.sys.mjs');
'resource://gre/modules/GeckoViewActorManager.sys.mjs': typeof import('resource://gre/modules/GeckoViewActorManager.sys.mjs');
'resource://gre/modules/GeckoViewAutocomplete.sys.mjs': typeof import('resource://gre/modules/GeckoViewAutocomplete.sys.mjs');
'resource://gre/modules/GeckoViewAutofill.sys.mjs': typeof import('resource://gre/modules/GeckoViewAutofill.sys.mjs');
'resource://gre/modules/GeckoViewClipboardPermission.sys.mjs': typeof import('resource://gre/modules/GeckoViewClipboardPermission.sys.mjs');
'resource://gre/modules/GeckoViewIdentityCredential.sys.mjs': typeof import('resource://gre/modules/GeckoViewIdentityCredential.sys.mjs');
'resource://gre/modules/GeckoViewPrompter.sys.mjs': typeof import('resource://gre/modules/GeckoViewPrompter.sys.mjs');
'resource://gre/modules/GeckoViewSettings.sys.mjs': typeof import('resource://gre/modules/GeckoViewSettings.sys.mjs');
'resource://gre/modules/GeckoViewTab.sys.mjs': typeof import('resource://gre/modules/GeckoViewTab.sys.mjs');
'resource://gre/modules/GeckoViewTelemetry.sys.mjs': typeof import('resource://gre/modules/GeckoViewTelemetry.sys.mjs');
'resource://gre/modules/GeckoViewTestUtils.sys.mjs': typeof import('resource://gre/modules/GeckoViewTestUtils.sys.mjs');
'resource://gre/modules/GeckoViewUtils.sys.mjs': typeof import('resource://gre/modules/GeckoViewUtils.sys.mjs');
'resource://gre/modules/GeckoViewWebExtension.sys.mjs': typeof import('resource://gre/modules/GeckoViewWebExtension.sys.mjs');
'resource://gre/modules/Geometry.sys.mjs': typeof import('resource://gre/modules/Geometry.sys.mjs');
'resource://gre/modules/HPKEConfigManager.sys.mjs': typeof import('resource://gre/modules/HPKEConfigManager.sys.mjs');
'resource://gre/modules/HealthPing.sys.mjs': typeof import('resource://gre/modules/HealthPing.sys.mjs');
'resource://gre/modules/HiddenFrame.sys.mjs': typeof import('resource://gre/modules/HiddenFrame.sys.mjs');
'resource://gre/modules/History.sys.mjs': typeof import('resource://gre/modules/History.sys.mjs');
'resource://gre/modules/IgnoreLists.sys.mjs': typeof import('resource://gre/modules/IgnoreLists.sys.mjs');
'resource://gre/modules/IndexedDB.sys.mjs': typeof import('resource://gre/modules/IndexedDB.sys.mjs');
'resource://gre/modules/InlineSpellChecker.sys.mjs': typeof import('resource://gre/modules/InlineSpellChecker.sys.mjs');
'resource://gre/modules/InlineSpellCheckerContent.sys.mjs': typeof import('resource://gre/modules/InlineSpellCheckerContent.sys.mjs');
'resource://gre/modules/InsecurePasswordUtils.sys.mjs': typeof import('resource://gre/modules/InsecurePasswordUtils.sys.mjs');
'resource://gre/modules/Integration.sys.mjs': typeof import('resource://gre/modules/Integration.sys.mjs');
'resource://gre/modules/JSONFile.sys.mjs': typeof import('resource://gre/modules/JSONFile.sys.mjs');
'resource://gre/modules/JsonSchema.sys.mjs': typeof import('resource://gre/modules/JsonSchema.sys.mjs');
'resource://gre/modules/KeywordUtils.sys.mjs': typeof import('resource://gre/modules/KeywordUtils.sys.mjs');
'resource://gre/modules/LangPackMatcher.sys.mjs': typeof import('resource://gre/modules/LangPackMatcher.sys.mjs');
'resource://gre/modules/LayoutUtils.sys.mjs': typeof import('resource://gre/modules/LayoutUtils.sys.mjs');
'resource://gre/modules/LightweightThemeConsumer.sys.mjs': typeof import('resource://gre/modules/LightweightThemeConsumer.sys.mjs');
'resource://gre/modules/LightweightThemeManager.sys.mjs': typeof import('resource://gre/modules/LightweightThemeManager.sys.mjs');
'resource://gre/modules/LoadURIDelegate.sys.mjs': typeof import('resource://gre/modules/LoadURIDelegate.sys.mjs');
'resource://gre/modules/LocationHelper.sys.mjs': typeof import('resource://gre/modules/LocationHelper.sys.mjs');
'resource://gre/modules/Log.sys.mjs': typeof import('resource://gre/modules/Log.sys.mjs');
'resource://gre/modules/LoginAutoComplete.sys.mjs': typeof import('resource://gre/modules/LoginAutoComplete.sys.mjs');
'resource://gre/modules/LoginCSVImport.sys.mjs': typeof import('resource://gre/modules/LoginCSVImport.sys.mjs');
'resource://gre/modules/LoginExport.sys.mjs': typeof import('resource://gre/modules/LoginExport.sys.mjs');
'resource://gre/modules/LoginHelper.sys.mjs': typeof import('resource://gre/modules/LoginHelper.sys.mjs');
'resource://gre/modules/LoginManager.shared.sys.mjs': typeof import('resource://gre/modules/LoginManager.shared.sys.mjs');
'resource://gre/modules/LoginManagerChild.sys.mjs': typeof import('resource://gre/modules/LoginManagerChild.sys.mjs');
'resource://gre/modules/LoginManagerContextMenu.sys.mjs': typeof import('resource://gre/modules/LoginManagerContextMenu.sys.mjs');
'resource://gre/modules/LoginManagerParent.sys.mjs': typeof import('resource://gre/modules/LoginManagerParent.sys.mjs');
'resource://gre/modules/LoginManagerTelemetry.sys.mjs': typeof import('resource://gre/modules/LoginManagerTelemetry.sys.mjs');
'resource://gre/modules/LoginRecipes.sys.mjs': typeof import('resource://gre/modules/LoginRecipes.sys.mjs');
'resource://gre/modules/LoginStore.sys.mjs': typeof import('resource://gre/modules/LoginStore.sys.mjs');
'resource://gre/modules/ManifestFinder.sys.mjs': typeof import('resource://gre/modules/ManifestFinder.sys.mjs');
'resource://gre/modules/ManifestIcons.sys.mjs': typeof import('resource://gre/modules/ManifestIcons.sys.mjs');
'resource://gre/modules/ManifestObtainer.sys.mjs': typeof import('resource://gre/modules/ManifestObtainer.sys.mjs');
'resource://gre/modules/MatchURLFilters.sys.mjs': typeof import('resource://gre/modules/MatchURLFilters.sys.mjs');
'resource://gre/modules/MediaUtils.sys.mjs': typeof import('resource://gre/modules/MediaUtils.sys.mjs');
'resource://gre/modules/MessageManagerProxy.sys.mjs': typeof import('resource://gre/modules/MessageManagerProxy.sys.mjs');
'resource://gre/modules/Messaging.sys.mjs': typeof import('resource://gre/modules/Messaging.sys.mjs');
'resource://gre/modules/ModulesPing.sys.mjs': typeof import('resource://gre/modules/ModulesPing.sys.mjs');
'resource://gre/modules/NLP.sys.mjs': typeof import('resource://gre/modules/NLP.sys.mjs');
'resource://gre/modules/NativeManifests.sys.mjs': typeof import('resource://gre/modules/NativeManifests.sys.mjs');
'resource://gre/modules/NativeMessaging.sys.mjs': typeof import('resource://gre/modules/NativeMessaging.sys.mjs');
'resource://gre/modules/NetUtil.sys.mjs': typeof import('resource://gre/modules/NetUtil.sys.mjs');
'resource://gre/modules/NewTabUtils.sys.mjs': typeof import('resource://gre/modules/NewTabUtils.sys.mjs');
'resource://gre/modules/OSCrypto_win.sys.mjs': typeof import('resource://gre/modules/OSCrypto_win.sys.mjs');
'resource://gre/modules/OSKeyStore.sys.mjs': typeof import('resource://gre/modules/OSKeyStore.sys.mjs');
'resource://gre/modules/ObjectUtils.sys.mjs': typeof import('resource://gre/modules/ObjectUtils.sys.mjs');
'resource://gre/modules/ObliviousHTTP.sys.mjs': typeof import('resource://gre/modules/ObliviousHTTP.sys.mjs');
'resource://gre/modules/OpenSearchEngine.sys.mjs': typeof import('resource://gre/modules/OpenSearchEngine.sys.mjs');
'resource://gre/modules/OpenSearchLoader.sys.mjs': typeof import('resource://gre/modules/OpenSearchLoader.sys.mjs');
'resource://gre/modules/OsEnvironment.sys.mjs': typeof import('resource://gre/modules/OsEnvironment.sys.mjs');
'resource://gre/modules/PageThumbUtils.sys.mjs': typeof import('resource://gre/modules/PageThumbUtils.sys.mjs');
'resource://gre/modules/PageThumbs.sys.mjs': typeof import('resource://gre/modules/PageThumbs.sys.mjs');
'resource://gre/modules/PermissionsUtils.sys.mjs': typeof import('resource://gre/modules/PermissionsUtils.sys.mjs');
'resource://gre/modules/PictureInPicture.sys.mjs': typeof import('resource://gre/modules/PictureInPicture.sys.mjs');
'resource://gre/modules/PictureInPictureControls.sys.mjs': typeof import('resource://gre/modules/PictureInPictureControls.sys.mjs');
'resource://gre/modules/PlacesBackups.sys.mjs': typeof import('resource://gre/modules/PlacesBackups.sys.mjs');
'resource://gre/modules/PlacesDBUtils.sys.mjs': typeof import('resource://gre/modules/PlacesDBUtils.sys.mjs');
'resource://gre/modules/PlacesPreviews.sys.mjs': typeof import('resource://gre/modules/PlacesPreviews.sys.mjs');
'resource://gre/modules/PlacesQuery.sys.mjs': typeof import('resource://gre/modules/PlacesQuery.sys.mjs');
'resource://gre/modules/PlacesSyncUtils.sys.mjs': typeof import('resource://gre/modules/PlacesSyncUtils.sys.mjs');
'resource://gre/modules/PlacesTransactions.sys.mjs': typeof import('resource://gre/modules/PlacesTransactions.sys.mjs');
'resource://gre/modules/PlacesUtils.sys.mjs': typeof import('resource://gre/modules/PlacesUtils.sys.mjs');
'resource://gre/modules/PolicySearchEngine.sys.mjs': typeof import('resource://gre/modules/PolicySearchEngine.sys.mjs');
'resource://gre/modules/Preferences.sys.mjs': typeof import('resource://gre/modules/Preferences.sys.mjs');
'resource://gre/modules/PrincipalsCollector.sys.mjs': typeof import('resource://gre/modules/PrincipalsCollector.sys.mjs');
'resource://gre/modules/PrivateBrowsingUtils.sys.mjs': typeof import('resource://gre/modules/PrivateBrowsingUtils.sys.mjs');
'resource://gre/modules/ProcessType.sys.mjs': typeof import('resource://gre/modules/ProcessType.sys.mjs');
'resource://gre/modules/ProfileAge.sys.mjs': typeof import('resource://gre/modules/ProfileAge.sys.mjs');
'resource://gre/modules/PromiseWorker.sys.mjs': typeof import('resource://gre/modules/PromiseWorker.sys.mjs');
'resource://gre/modules/PromptUtils.sys.mjs': typeof import('resource://gre/modules/PromptUtils.sys.mjs');
'resource://gre/modules/PropertyListUtils.sys.mjs': typeof import('resource://gre/modules/PropertyListUtils.sys.mjs');
'resource://gre/modules/ProxyChannelFilter.sys.mjs': typeof import('resource://gre/modules/ProxyChannelFilter.sys.mjs');
'resource://gre/modules/PushBroadcastService.sys.mjs': typeof import('resource://gre/modules/PushBroadcastService.sys.mjs');
'resource://gre/modules/PushCrypto.sys.mjs': typeof import('resource://gre/modules/PushCrypto.sys.mjs');
'resource://gre/modules/PushService.sys.mjs': typeof import('resource://gre/modules/PushService.sys.mjs');
'resource://gre/modules/PushServiceWebSocket.sys.mjs': typeof import('resource://gre/modules/PushServiceWebSocket.sys.mjs');
'resource://gre/modules/RFPHelper.sys.mjs': typeof import('resource://gre/modules/RFPHelper.sys.mjs');
'resource://gre/modules/Readerable.sys.mjs': typeof import('resource://gre/modules/Readerable.sys.mjs');
'resource://gre/modules/Region.sys.mjs': typeof import('resource://gre/modules/Region.sys.mjs');
'resource://gre/modules/RemotePageAccessManager.sys.mjs': typeof import('resource://gre/modules/RemotePageAccessManager.sys.mjs');
'resource://gre/modules/RemoteSettingsCrashPull.sys.mjs': typeof import('resource://gre/modules/RemoteSettingsCrashPull.sys.mjs');
'resource://gre/modules/RemoteWebNavigation.sys.mjs': typeof import('resource://gre/modules/RemoteWebNavigation.sys.mjs');
'resource://gre/modules/ResetProfile.sys.mjs': typeof import('resource://gre/modules/ResetProfile.sys.mjs');
'resource://gre/modules/ResponsivenessMonitor.sys.mjs': typeof import('resource://gre/modules/ResponsivenessMonitor.sys.mjs');
'resource://gre/modules/RustRelevancy.sys.mjs': typeof import('resource://gre/modules/RustRelevancy.sys.mjs');
'resource://gre/modules/RustSearch.sys.mjs': typeof import('resource://gre/modules/RustSearch.sys.mjs');
'resource://gre/modules/RustSuggest.sys.mjs': typeof import('resource://gre/modules/RustSuggest.sys.mjs');
'resource://gre/modules/RustTabs.sys.mjs': typeof import('resource://gre/modules/RustTabs.sys.mjs');
'resource://gre/modules/RustWebextstorage.sys.mjs': typeof import('resource://gre/modules/RustWebextstorage.sys.mjs');
'resource://gre/modules/SafeBrowsing.sys.mjs': typeof import('resource://gre/modules/SafeBrowsing.sys.mjs');
'resource://gre/modules/SandboxUtils.sys.mjs': typeof import('resource://gre/modules/SandboxUtils.sys.mjs');
'resource://gre/modules/Schemas.sys.mjs': typeof import('resource://gre/modules/Schemas.sys.mjs');
'resource://gre/modules/SearchEngine.sys.mjs': typeof import('resource://gre/modules/SearchEngine.sys.mjs');
'resource://gre/modules/SearchEngineSelector.sys.mjs': typeof import('resource://gre/modules/SearchEngineSelector.sys.mjs');
'resource://gre/modules/SearchService.sys.mjs': typeof import('resource://gre/modules/SearchService.sys.mjs');
'resource://gre/modules/SearchSettings.sys.mjs': typeof import('resource://gre/modules/SearchSettings.sys.mjs');
'resource://gre/modules/SearchShortcuts.sys.mjs': typeof import('resource://gre/modules/SearchShortcuts.sys.mjs');
'resource://gre/modules/SearchStaticData.sys.mjs': typeof import('resource://gre/modules/SearchStaticData.sys.mjs');
'resource://gre/modules/SearchSuggestionController.sys.mjs': typeof import('resource://gre/modules/SearchSuggestionController.sys.mjs');
'resource://gre/modules/SearchUtils.sys.mjs': typeof import('resource://gre/modules/SearchUtils.sys.mjs');
'resource://gre/modules/SecurityInfo.sys.mjs': typeof import('resource://gre/modules/SecurityInfo.sys.mjs');
'resource://gre/modules/SelectionUtils.sys.mjs': typeof import('resource://gre/modules/SelectionUtils.sys.mjs');
'resource://gre/modules/ServiceRequest.sys.mjs': typeof import('resource://gre/modules/ServiceRequest.sys.mjs');
'resource://gre/modules/ServiceWorkerCleanUp.sys.mjs': typeof import('resource://gre/modules/ServiceWorkerCleanUp.sys.mjs');
'resource://gre/modules/ShortcutUtils.sys.mjs': typeof import('resource://gre/modules/ShortcutUtils.sys.mjs');
'resource://gre/modules/Sqlite.sys.mjs': typeof import('resource://gre/modules/Sqlite.sys.mjs');
'resource://gre/modules/SubDialog.sys.mjs': typeof import('resource://gre/modules/SubDialog.sys.mjs');
'resource://gre/modules/Subprocess.sys.mjs': typeof import('resource://gre/modules/Subprocess.sys.mjs');
'resource://gre/modules/SyncedBookmarksMirror.sys.mjs': typeof import('resource://gre/modules/SyncedBookmarksMirror.sys.mjs');
'resource://gre/modules/TaskScheduler.sys.mjs': typeof import('resource://gre/modules/TaskScheduler.sys.mjs');
'resource://gre/modules/TaskSchedulerMacOSImpl.sys.mjs': typeof import('resource://gre/modules/TaskSchedulerMacOSImpl.sys.mjs');
'resource://gre/modules/TaskSchedulerWinImpl.sys.mjs': typeof import('resource://gre/modules/TaskSchedulerWinImpl.sys.mjs');
'resource://gre/modules/TelemetryArchive.sys.mjs': typeof import('resource://gre/modules/TelemetryArchive.sys.mjs');
'resource://gre/modules/TelemetryController.sys.mjs': typeof import('resource://gre/modules/TelemetryController.sys.mjs');
'resource://gre/modules/TelemetryEnvironment.sys.mjs': typeof import('resource://gre/modules/TelemetryEnvironment.sys.mjs');
'resource://gre/modules/TelemetryReportingPolicy.sys.mjs': typeof import('resource://gre/modules/TelemetryReportingPolicy.sys.mjs');
'resource://gre/modules/TelemetryScheduler.sys.mjs': typeof import('resource://gre/modules/TelemetryScheduler.sys.mjs');
'resource://gre/modules/TelemetrySend.sys.mjs': typeof import('resource://gre/modules/TelemetrySend.sys.mjs');
'resource://gre/modules/TelemetrySession.sys.mjs': typeof import('resource://gre/modules/TelemetrySession.sys.mjs');
'resource://gre/modules/TelemetryStorage.sys.mjs': typeof import('resource://gre/modules/TelemetryStorage.sys.mjs');
'resource://gre/modules/TelemetryTimestamps.sys.mjs': typeof import('resource://gre/modules/TelemetryTimestamps.sys.mjs');
'resource://gre/modules/TelemetryUtils.sys.mjs': typeof import('resource://gre/modules/TelemetryUtils.sys.mjs');
'resource://gre/modules/Timer.sys.mjs': typeof import('resource://gre/modules/Timer.sys.mjs');
'resource://gre/modules/UninstallPing.sys.mjs': typeof import('resource://gre/modules/UninstallPing.sys.mjs');
'resource://gre/modules/UntrustedModulesPing.sys.mjs': typeof import('resource://gre/modules/UntrustedModulesPing.sys.mjs');
'resource://gre/modules/UpdateListener.sys.mjs': typeof import('resource://gre/modules/UpdateListener.sys.mjs');
'resource://gre/modules/UpdateLog.sys.mjs': typeof import('resource://gre/modules/UpdateLog.sys.mjs');
'resource://gre/modules/UpdatePing.sys.mjs': typeof import('resource://gre/modules/UpdatePing.sys.mjs');
'resource://gre/modules/UpdateService.sys.mjs': typeof import('resource://gre/modules/UpdateService.sys.mjs');
'resource://gre/modules/UpdateUtils.sys.mjs': typeof import('resource://gre/modules/UpdateUtils.sys.mjs');
'resource://gre/modules/UsageReporting.sys.mjs': typeof import('resource://gre/modules/UsageReporting.sys.mjs');
'resource://gre/modules/UserSearchEngine.sys.mjs': typeof import('resource://gre/modules/UserSearchEngine.sys.mjs');
'resource://gre/modules/WebAuthnFeature.sys.mjs': typeof import('resource://gre/modules/WebAuthnFeature.sys.mjs');
'resource://gre/modules/WebChannel.sys.mjs': typeof import('resource://gre/modules/WebChannel.sys.mjs');
'resource://gre/modules/WebNavigation.sys.mjs': typeof import('resource://gre/modules/WebNavigation.sys.mjs');
'resource://gre/modules/WebNavigationFrames.sys.mjs': typeof import('resource://gre/modules/WebNavigationFrames.sys.mjs');
'resource://gre/modules/WebRequest.sys.mjs': typeof import('resource://gre/modules/WebRequest.sys.mjs');
'resource://gre/modules/WebRequestUpload.sys.mjs': typeof import('resource://gre/modules/WebRequestUpload.sys.mjs');
'resource://gre/modules/WindowsLaunchOnLogin.sys.mjs': typeof import('resource://gre/modules/WindowsLaunchOnLogin.sys.mjs');
'resource://gre/modules/WindowsRegistry.sys.mjs': typeof import('resource://gre/modules/WindowsRegistry.sys.mjs');
'resource://gre/modules/addons/AddonRepository.sys.mjs': typeof import('resource://gre/modules/addons/AddonRepository.sys.mjs');
'resource://gre/modules/addons/AddonSettings.sys.mjs': typeof import('resource://gre/modules/addons/AddonSettings.sys.mjs');
'resource://gre/modules/addons/ProductAddonChecker.sys.mjs': typeof import('resource://gre/modules/addons/ProductAddonChecker.sys.mjs');
'resource://gre/modules/addons/XPIDatabase.sys.mjs': typeof import('resource://gre/modules/addons/XPIDatabase.sys.mjs');
'resource://gre/modules/addons/XPIInstall.sys.mjs': typeof import('resource://gre/modules/addons/XPIInstall.sys.mjs');
'resource://gre/modules/addons/XPIProvider.sys.mjs': typeof import('resource://gre/modules/addons/XPIProvider.sys.mjs');
'resource://gre/modules/addons/siteperms-addon-utils.sys.mjs': typeof import('resource://gre/modules/addons/siteperms-addon-utils.sys.mjs');
'resource://gre/modules/components-utils/ClientEnvironment.sys.mjs': typeof import('resource://gre/modules/components-utils/ClientEnvironment.sys.mjs');
'resource://gre/modules/components-utils/FilterExpressions.sys.mjs': typeof import('resource://gre/modules/components-utils/FilterExpressions.sys.mjs');
'resource://gre/modules/components-utils/JsonSchemaValidator.sys.mjs': typeof import('resource://gre/modules/components-utils/JsonSchemaValidator.sys.mjs');
'resource://gre/modules/components-utils/Sampling.sys.mjs': typeof import('resource://gre/modules/components-utils/Sampling.sys.mjs');
'resource://gre/modules/components-utils/WindowsInstallsInfo.sys.mjs': typeof import('resource://gre/modules/components-utils/WindowsInstallsInfo.sys.mjs');
'resource://gre/modules/components-utils/WindowsVersionInfo.sys.mjs': typeof import('resource://gre/modules/components-utils/WindowsVersionInfo.sys.mjs');
'resource://gre/modules/components-utils/mozjexl.sys.mjs': typeof import('resource://gre/modules/components-utils/mozjexl.sys.mjs');
'resource://gre/modules/contentrelevancy/private/InputUtils.sys.mjs': typeof import('resource://gre/modules/contentrelevancy/private/InputUtils.sys.mjs');
'resource://gre/modules/ctypes.sys.mjs': typeof import('resource://gre/modules/ctypes.sys.mjs');
'resource://gre/modules/handlers/HandlerList.sys.mjs': typeof import('resource://gre/modules/handlers/HandlerList.sys.mjs');
'resource://gre/modules/jsdebugger.sys.mjs': typeof import('resource://gre/modules/jsdebugger.sys.mjs');
'resource://gre/modules/kvstore.sys.mjs': typeof import('resource://gre/modules/kvstore.sys.mjs');
'resource://gre/modules/media/IdpSandbox.sys.mjs': typeof import('resource://gre/modules/media/IdpSandbox.sys.mjs');
'resource://gre/modules/media/PeerConnectionIdp.sys.mjs': typeof import('resource://gre/modules/media/PeerConnectionIdp.sys.mjs');
'resource://gre/modules/narrate/NarrateControls.sys.mjs': typeof import('resource://gre/modules/narrate/NarrateControls.sys.mjs');
'resource://gre/modules/policies/WindowsGPOParser.sys.mjs': typeof import('resource://gre/modules/policies/WindowsGPOParser.sys.mjs');
'resource://gre/modules/policies/macOSPoliciesParser.sys.mjs': typeof import('resource://gre/modules/policies/macOSPoliciesParser.sys.mjs');
'resource://gre/modules/psm/RemoteSecuritySettings.sys.mjs': typeof import('resource://gre/modules/psm/RemoteSecuritySettings.sys.mjs');
'resource://gre/modules/reflect.sys.mjs': typeof import('resource://gre/modules/reflect.sys.mjs');
'resource://gre/modules/sessionstore/PrivacyFilter.sys.mjs': typeof import('resource://gre/modules/sessionstore/PrivacyFilter.sys.mjs');
'resource://gre/modules/sessionstore/PrivacyLevel.sys.mjs': typeof import('resource://gre/modules/sessionstore/PrivacyLevel.sys.mjs');
'resource://gre/modules/sessionstore/SessionHistory.sys.mjs': typeof import('resource://gre/modules/sessionstore/SessionHistory.sys.mjs');
'resource://gre/modules/sessionstore/SessionStoreHelper.sys.mjs': typeof import('resource://gre/modules/sessionstore/SessionStoreHelper.sys.mjs');
'resource://gre/modules/shared/AddressComponent.sys.mjs': typeof import('resource://gre/modules/shared/AddressComponent.sys.mjs');
'resource://gre/modules/shared/AddressMetaData.sys.mjs': typeof import('resource://gre/modules/shared/AddressMetaData.sys.mjs');
'resource://gre/modules/shared/AddressMetaDataExtension.sys.mjs': typeof import('resource://gre/modules/shared/AddressMetaDataExtension.sys.mjs');
'resource://gre/modules/shared/AddressMetaDataLoader.sys.mjs': typeof import('resource://gre/modules/shared/AddressMetaDataLoader.sys.mjs');
'resource://gre/modules/shared/AddressParser.sys.mjs': typeof import('resource://gre/modules/shared/AddressParser.sys.mjs');
'resource://gre/modules/shared/AutofillFormFactory.sys.mjs': typeof import('resource://gre/modules/shared/AutofillFormFactory.sys.mjs');
'resource://gre/modules/shared/AutofillTelemetry.sys.mjs': typeof import('resource://gre/modules/shared/AutofillTelemetry.sys.mjs');
'resource://gre/modules/shared/CreditCardRecord.sys.mjs': typeof import('resource://gre/modules/shared/CreditCardRecord.sys.mjs');
'resource://gre/modules/shared/CreditCardRuleset.sys.mjs': typeof import('resource://gre/modules/shared/CreditCardRuleset.sys.mjs');
'resource://gre/modules/shared/FieldScanner.sys.mjs': typeof import('resource://gre/modules/shared/FieldScanner.sys.mjs');
'resource://gre/modules/shared/FormAutofillHandler.sys.mjs': typeof import('resource://gre/modules/shared/FormAutofillHandler.sys.mjs');
'resource://gre/modules/shared/FormAutofillHeuristics.sys.mjs': typeof import('resource://gre/modules/shared/FormAutofillHeuristics.sys.mjs');
'resource://gre/modules/shared/FormAutofillNameUtils.sys.mjs': typeof import('resource://gre/modules/shared/FormAutofillNameUtils.sys.mjs');
'resource://gre/modules/shared/FormAutofillSection.sys.mjs': typeof import('resource://gre/modules/shared/FormAutofillSection.sys.mjs');
'resource://gre/modules/shared/FormAutofillUtils.sys.mjs': typeof import('resource://gre/modules/shared/FormAutofillUtils.sys.mjs');
'resource://gre/modules/shared/FormStateManager.sys.mjs': typeof import('resource://gre/modules/shared/FormStateManager.sys.mjs');
'resource://gre/modules/shared/LabelUtils.sys.mjs': typeof import('resource://gre/modules/shared/LabelUtils.sys.mjs');
'resource://gre/modules/shared/LoginFormFactory.sys.mjs': typeof import('resource://gre/modules/shared/LoginFormFactory.sys.mjs');
'resource://gre/modules/shared/PasswordGenerator.sys.mjs': typeof import('resource://gre/modules/shared/PasswordGenerator.sys.mjs');
'resource://gre/modules/shared/PasswordRulesParser.sys.mjs': typeof import('resource://gre/modules/shared/PasswordRulesParser.sys.mjs');
'resource://gre/modules/shared/PhoneNumber.sys.mjs': typeof import('resource://gre/modules/shared/PhoneNumber.sys.mjs');
'resource://gre/modules/shared/PhoneNumberNormalizer.sys.mjs': typeof import('resource://gre/modules/shared/PhoneNumberNormalizer.sys.mjs');
'resource://gre/modules/subprocess/subprocess_unix.sys.mjs': typeof import('resource://gre/modules/subprocess/subprocess_unix.sys.mjs');
'resource://gre/modules/subprocess/subprocess_win.sys.mjs': typeof import('resource://gre/modules/subprocess/subprocess_win.sys.mjs');
'resource://gre/modules/translations/LanguageDetector.sys.mjs': typeof import('resource://gre/modules/translations/LanguageDetector.sys.mjs');
'resource://gre/modules/workers/PromiseWorker.mjs': typeof import('resource://gre/modules/workers/PromiseWorker.mjs');
'resource://messaging-system/lib/SpecialMessageActions.sys.mjs': typeof import('resource://messaging-system/lib/SpecialMessageActions.sys.mjs');
'resource://messaging-system/targeting/Targeting.sys.mjs': typeof import('resource://messaging-system/targeting/Targeting.sys.mjs');
'resource://mozscreenshots/Screenshot.sys.mjs': typeof import('resource://mozscreenshots/Screenshot.sys.mjs');
'resource://newtab/common/Actions.mjs': typeof import('resource://newtab/common/Actions.mjs');
'resource://newtab/lib/AboutPreferences.sys.mjs': typeof import('resource://newtab/lib/AboutPreferences.sys.mjs');
'resource://newtab/lib/ActivityStream.sys.mjs': typeof import('resource://newtab/lib/ActivityStream.sys.mjs');
'resource://newtab/lib/ActivityStreamMessageChannel.sys.mjs': typeof import('resource://newtab/lib/ActivityStreamMessageChannel.sys.mjs');
'resource://newtab/lib/ActivityStreamPrefs.sys.mjs': typeof import('resource://newtab/lib/ActivityStreamPrefs.sys.mjs');
'resource://newtab/lib/AdsFeed.sys.mjs': typeof import('resource://newtab/lib/AdsFeed.sys.mjs');
'resource://newtab/lib/DefaultSites.sys.mjs': typeof import('resource://newtab/lib/DefaultSites.sys.mjs');
'resource://newtab/lib/DiscoveryStreamFeed.sys.mjs': typeof import('resource://newtab/lib/DiscoveryStreamFeed.sys.mjs');
'resource://newtab/lib/DownloadsManager.sys.mjs': typeof import('resource://newtab/lib/DownloadsManager.sys.mjs');
'resource://newtab/lib/FaviconFeed.sys.mjs': typeof import('resource://newtab/lib/FaviconFeed.sys.mjs');
'resource://newtab/lib/HighlightsFeed.sys.mjs': typeof import('resource://newtab/lib/HighlightsFeed.sys.mjs');
'resource://newtab/lib/NewTabInit.sys.mjs': typeof import('resource://newtab/lib/NewTabInit.sys.mjs');
'resource://newtab/lib/PersistentCache.sys.mjs': typeof import('resource://newtab/lib/PersistentCache.sys.mjs');
'resource://newtab/lib/PersonalityProvider/PersonalityProvider.sys.mjs': typeof import('resource://newtab/lib/PersonalityProvider/PersonalityProvider.sys.mjs');
'resource://newtab/lib/PlacesFeed.sys.mjs': typeof import('resource://newtab/lib/PlacesFeed.sys.mjs');
'resource://newtab/lib/PrefsFeed.sys.mjs': typeof import('resource://newtab/lib/PrefsFeed.sys.mjs');
'resource://newtab/lib/RecommendationProvider.sys.mjs': typeof import('resource://newtab/lib/RecommendationProvider.sys.mjs');
'resource://newtab/lib/Screenshots.sys.mjs': typeof import('resource://newtab/lib/Screenshots.sys.mjs');
'resource://newtab/lib/SectionsManager.sys.mjs': typeof import('resource://newtab/lib/SectionsManager.sys.mjs');
'resource://newtab/lib/Store.sys.mjs': typeof import('resource://newtab/lib/Store.sys.mjs');
'resource://newtab/lib/SystemTickFeed.sys.mjs': typeof import('resource://newtab/lib/SystemTickFeed.sys.mjs');
'resource://newtab/lib/TelemetryFeed.sys.mjs': typeof import('resource://newtab/lib/TelemetryFeed.sys.mjs');
'resource://newtab/lib/TopSitesFeed.sys.mjs': typeof import('resource://newtab/lib/TopSitesFeed.sys.mjs');
'resource://newtab/lib/TopStoriesFeed.sys.mjs': typeof import('resource://newtab/lib/TopStoriesFeed.sys.mjs');
'resource://newtab/lib/UTEventReporting.sys.mjs': typeof import('resource://newtab/lib/UTEventReporting.sys.mjs');
'resource://newtab/lib/WallpaperFeed.sys.mjs': typeof import('resource://newtab/lib/WallpaperFeed.sys.mjs');
'resource://newtab/lib/WeatherFeed.sys.mjs': typeof import('resource://newtab/lib/WeatherFeed.sys.mjs');
'resource://nimbus/ExperimentAPI.sys.mjs': typeof import('resource://nimbus/ExperimentAPI.sys.mjs');
'resource://nimbus/FeatureManifest.sys.mjs': typeof import('resource://nimbus/FeatureManifest.sys.mjs');
'resource://nimbus/FirefoxLabs.sys.mjs': typeof import('resource://nimbus/FirefoxLabs.sys.mjs');
'resource://nimbus/lib/ExperimentManager.sys.mjs': typeof import('resource://nimbus/lib/ExperimentManager.sys.mjs');
'resource://nimbus/lib/ExperimentStore.sys.mjs': typeof import('resource://nimbus/lib/ExperimentStore.sys.mjs');
'resource://nimbus/lib/Migrations.sys.mjs': typeof import('resource://nimbus/lib/Migrations.sys.mjs');
'resource://nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs': typeof import('resource://nimbus/lib/RemoteSettingsExperimentLoader.sys.mjs');
'resource://nimbus/lib/TargetingContextRecorder.sys.mjs': typeof import('resource://nimbus/lib/TargetingContextRecorder.sys.mjs');
'resource://normandy-content/AboutPages.sys.mjs': typeof import('resource://normandy-content/AboutPages.sys.mjs');
'resource://normandy/Normandy.sys.mjs': typeof import('resource://normandy/Normandy.sys.mjs');
'resource://normandy/NormandyMigrations.sys.mjs': typeof import('resource://normandy/NormandyMigrations.sys.mjs');
'resource://normandy/actions/AddonRollbackAction.sys.mjs': typeof import('resource://normandy/actions/AddonRollbackAction.sys.mjs');
'resource://normandy/actions/AddonRolloutAction.sys.mjs': typeof import('resource://normandy/actions/AddonRolloutAction.sys.mjs');
'resource://normandy/actions/BaseAction.sys.mjs': typeof import('resource://normandy/actions/BaseAction.sys.mjs');
'resource://normandy/actions/BranchedAddonStudyAction.sys.mjs': typeof import('resource://normandy/actions/BranchedAddonStudyAction.sys.mjs');
'resource://normandy/actions/ConsoleLogAction.sys.mjs': typeof import('resource://normandy/actions/ConsoleLogAction.sys.mjs');
'resource://normandy/actions/MessagingExperimentAction.sys.mjs': typeof import('resource://normandy/actions/MessagingExperimentAction.sys.mjs');
'resource://normandy/actions/PreferenceExperimentAction.sys.mjs': typeof import('resource://normandy/actions/PreferenceExperimentAction.sys.mjs');
'resource://normandy/actions/PreferenceRollbackAction.sys.mjs': typeof import('resource://normandy/actions/PreferenceRollbackAction.sys.mjs');
'resource://normandy/actions/PreferenceRolloutAction.sys.mjs': typeof import('resource://normandy/actions/PreferenceRolloutAction.sys.mjs');
'resource://normandy/actions/ShowHeartbeatAction.sys.mjs': typeof import('resource://normandy/actions/ShowHeartbeatAction.sys.mjs');
'resource://normandy/actions/schemas/index.sys.mjs': typeof import('resource://normandy/actions/schemas/index.sys.mjs');
'resource://normandy/lib/ActionsManager.sys.mjs': typeof import('resource://normandy/lib/ActionsManager.sys.mjs');
'resource://normandy/lib/AddonRollouts.sys.mjs': typeof import('resource://normandy/lib/AddonRollouts.sys.mjs');
'resource://normandy/lib/AddonStudies.sys.mjs': typeof import('resource://normandy/lib/AddonStudies.sys.mjs');
'resource://normandy/lib/CleanupManager.sys.mjs': typeof import('resource://normandy/lib/CleanupManager.sys.mjs');
'resource://normandy/lib/ClientEnvironment.sys.mjs': typeof import('resource://normandy/lib/ClientEnvironment.sys.mjs');
'resource://normandy/lib/Heartbeat.sys.mjs': typeof import('resource://normandy/lib/Heartbeat.sys.mjs');
'resource://normandy/lib/LegacyHeartbeat.sys.mjs': typeof import('resource://normandy/lib/LegacyHeartbeat.sys.mjs');
'resource://normandy/lib/LogManager.sys.mjs': typeof import('resource://normandy/lib/LogManager.sys.mjs');
'resource://normandy/lib/NormandyAddonManager.sys.mjs': typeof import('resource://normandy/lib/NormandyAddonManager.sys.mjs');
'resource://normandy/lib/NormandyApi.sys.mjs': typeof import('resource://normandy/lib/NormandyApi.sys.mjs');
'resource://normandy/lib/NormandyUtils.sys.mjs': typeof import('resource://normandy/lib/NormandyUtils.sys.mjs');
'resource://normandy/lib/PrefUtils.sys.mjs': typeof import('resource://normandy/lib/PrefUtils.sys.mjs');
'resource://normandy/lib/PreferenceExperiments.sys.mjs': typeof import('resource://normandy/lib/PreferenceExperiments.sys.mjs');
'resource://normandy/lib/PreferenceRollouts.sys.mjs': typeof import('resource://normandy/lib/PreferenceRollouts.sys.mjs');
'resource://normandy/lib/RecipeRunner.sys.mjs': typeof import('resource://normandy/lib/RecipeRunner.sys.mjs');
'resource://normandy/lib/ShieldPreferences.sys.mjs': typeof import('resource://normandy/lib/ShieldPreferences.sys.mjs');
'resource://normandy/lib/Storage.sys.mjs': typeof import('resource://normandy/lib/Storage.sys.mjs');
'resource://normandy/lib/TelemetryEvents.sys.mjs': typeof import('resource://normandy/lib/TelemetryEvents.sys.mjs');
'resource://normandy/lib/Uptake.sys.mjs': typeof import('resource://normandy/lib/Uptake.sys.mjs');
'resource://pdf.js/PdfJs.sys.mjs': typeof import('resource://pdf.js/PdfJs.sys.mjs');
'resource://pdf.js/PdfJsNetwork.sys.mjs': typeof import('resource://pdf.js/PdfJsNetwork.sys.mjs');
'resource://pdf.js/PdfJsTelemetry.sys.mjs': typeof import('resource://pdf.js/PdfJsTelemetry.sys.mjs');
'resource://pdf.js/PdfSandbox.sys.mjs': typeof import('resource://pdf.js/PdfSandbox.sys.mjs');
'resource://pdf.js/PdfStreamConverter.sys.mjs': typeof import('resource://pdf.js/PdfStreamConverter.sys.mjs');
'resource://services-common/async.sys.mjs': typeof import('resource://services-common/async.sys.mjs');
'resource://services-common/kinto-http-client.sys.mjs': typeof import('resource://services-common/kinto-http-client.sys.mjs');
'resource://services-common/kinto-offline-client.sys.mjs': typeof import('resource://services-common/kinto-offline-client.sys.mjs');
'resource://services-common/kinto-storage-adapter.sys.mjs': typeof import('resource://services-common/kinto-storage-adapter.sys.mjs');
'resource://services-common/observers.sys.mjs': typeof import('resource://services-common/observers.sys.mjs');
'resource://services-common/uptake-telemetry.sys.mjs': typeof import('resource://services-common/uptake-telemetry.sys.mjs');
'resource://services-common/utils.sys.mjs': typeof import('resource://services-common/utils.sys.mjs');
'resource://services-crypto/jwcrypto.sys.mjs': typeof import('resource://services-crypto/jwcrypto.sys.mjs');
'resource://services-crypto/utils.sys.mjs': typeof import('resource://services-crypto/utils.sys.mjs');
'resource://services-settings/Attachments.sys.mjs': typeof import('resource://services-settings/Attachments.sys.mjs');
'resource://services-settings/Database.sys.mjs': typeof import('resource://services-settings/Database.sys.mjs');
'resource://services-settings/IDBHelpers.sys.mjs': typeof import('resource://services-settings/IDBHelpers.sys.mjs');
'resource://services-settings/RemoteSettingsClient.sys.mjs': typeof import('resource://services-settings/RemoteSettingsClient.sys.mjs');
'resource://services-settings/RemoteSettingsWorker.sys.mjs': typeof import('resource://services-settings/RemoteSettingsWorker.sys.mjs');
'resource://services-settings/SharedUtils.sys.mjs': typeof import('resource://services-settings/SharedUtils.sys.mjs');
'resource://services-settings/SyncHistory.sys.mjs': typeof import('resource://services-settings/SyncHistory.sys.mjs');
'resource://services-settings/Utils.sys.mjs': typeof import('resource://services-settings/Utils.sys.mjs');
'resource://services-settings/remote-settings.sys.mjs': typeof import('resource://services-settings/remote-settings.sys.mjs');
'resource://services-sync/SyncedTabs.sys.mjs': typeof import('resource://services-sync/SyncedTabs.sys.mjs');
'resource://services-sync/TabsStore.sys.mjs': typeof import('resource://services-sync/TabsStore.sys.mjs');
'resource://services-sync/UIState.sys.mjs': typeof import('resource://services-sync/UIState.sys.mjs');
'resource://services-sync/constants.sys.mjs': typeof import('resource://services-sync/constants.sys.mjs');
'resource://services-sync/doctor.sys.mjs': typeof import('resource://services-sync/doctor.sys.mjs');
'resource://services-sync/engines/addons.sys.mjs': typeof import('resource://services-sync/engines/addons.sys.mjs');
'resource://services-sync/engines/forms.sys.mjs': typeof import('resource://services-sync/engines/forms.sys.mjs');
'resource://services-sync/engines/passwords.sys.mjs': typeof import('resource://services-sync/engines/passwords.sys.mjs');
'resource://services-sync/keys.sys.mjs': typeof import('resource://services-sync/keys.sys.mjs');
'resource://services-sync/main.sys.mjs': typeof import('resource://services-sync/main.sys.mjs');
'resource://services-sync/record.sys.mjs': typeof import('resource://services-sync/record.sys.mjs');
'resource://services-sync/resource.sys.mjs': typeof import('resource://services-sync/resource.sys.mjs');
'resource://services-sync/service.sys.mjs': typeof import('resource://services-sync/service.sys.mjs');
'resource://services-sync/status.sys.mjs': typeof import('resource://services-sync/status.sys.mjs');
'resource://services-sync/sync_auth.sys.mjs': typeof import('resource://services-sync/sync_auth.sys.mjs');
'resource://services-sync/telemetry.sys.mjs': typeof import('resource://services-sync/telemetry.sys.mjs');
'resource://services-sync/util.sys.mjs': typeof import('resource://services-sync/util.sys.mjs');
'resource://talos-powers/TalosParentProfiler.sys.mjs': typeof import('resource://talos-powers/TalosParentProfiler.sys.mjs');
'resource://test/es6module_devtoolsLoader.js': typeof import('resource://test/es6module_devtoolsLoader.js');
'resource://test/esm_lazy-1.sys.mjs': typeof import('resource://test/esm_lazy-1.sys.mjs');
'resource://test/esm_lazy-2.sys.mjs': typeof import('resource://test/esm_lazy-2.sys.mjs');
'resource://test/esmified-1.sys.mjs': typeof import('resource://test/esmified-1.sys.mjs');
'resource://testing-common/AddonTestUtils.sys.mjs': typeof import('resource://testing-common/AddonTestUtils.sys.mjs');
'resource://testing-common/AppInfo.sys.mjs': typeof import('resource://testing-common/AppInfo.sys.mjs');
'resource://testing-common/AppUiTestDelegate.sys.mjs': typeof import('resource://testing-common/AppUiTestDelegate.sys.mjs');
'resource://testing-common/Assert.sys.mjs': typeof import('resource://testing-common/Assert.sys.mjs');
'resource://testing-common/BrowserTestUtils.sys.mjs': typeof import('resource://testing-common/BrowserTestUtils.sys.mjs');
'resource://testing-common/ContentTask.sys.mjs': typeof import('resource://testing-common/ContentTask.sys.mjs');
'resource://testing-common/ContentTaskUtils.sys.mjs': typeof import('resource://testing-common/ContentTaskUtils.sys.mjs');
'resource://testing-common/CustomizableUITestUtils.sys.mjs': typeof import('resource://testing-common/CustomizableUITestUtils.sys.mjs');
'resource://testing-common/DoHTestUtils.sys.mjs': typeof import('resource://testing-common/DoHTestUtils.sys.mjs');
'resource://testing-common/EnterprisePolicyTesting.sys.mjs': typeof import('resource://testing-common/EnterprisePolicyTesting.sys.mjs');
'resource://testing-common/ExtensionTestCommon.sys.mjs': typeof import('resource://testing-common/ExtensionTestCommon.sys.mjs');
'resource://testing-common/ExtensionXPCShellUtils.sys.mjs': typeof import('resource://testing-common/ExtensionXPCShellUtils.sys.mjs');
'resource://testing-common/FileTestUtils.sys.mjs': typeof import('resource://testing-common/FileTestUtils.sys.mjs');
'resource://testing-common/FormHistoryTestUtils.sys.mjs': typeof import('resource://testing-common/FormHistoryTestUtils.sys.mjs');
'resource://testing-common/MerinoTestUtils.sys.mjs': typeof import('resource://testing-common/MerinoTestUtils.sys.mjs');
'resource://testing-common/MessageChannel.sys.mjs': typeof import('resource://testing-common/MessageChannel.sys.mjs');
'resource://testing-common/MockColorPicker.sys.mjs': typeof import('resource://testing-common/MockColorPicker.sys.mjs');
'resource://testing-common/MockFilePicker.sys.mjs': typeof import('resource://testing-common/MockFilePicker.sys.mjs');
'resource://testing-common/MockPermissionPrompt.sys.mjs': typeof import('resource://testing-common/MockPermissionPrompt.sys.mjs');
'resource://testing-common/MockPromptCollection.sys.mjs': typeof import('resource://testing-common/MockPromptCollection.sys.mjs');
'resource://testing-common/MockRegistrar.sys.mjs': typeof import('resource://testing-common/MockRegistrar.sys.mjs');
'resource://testing-common/MockRegistry.sys.mjs': typeof import('resource://testing-common/MockRegistry.sys.mjs');
'resource://testing-common/MockSound.sys.mjs': typeof import('resource://testing-common/MockSound.sys.mjs');
'resource://testing-common/NimbusTestUtils.sys.mjs': typeof import('resource://testing-common/NimbusTestUtils.sys.mjs');
'resource://testing-common/NormandyTestUtils.sys.mjs': typeof import('resource://testing-common/NormandyTestUtils.sys.mjs');
'resource://testing-common/PerTestCoverageUtils.sys.mjs': typeof import('resource://testing-common/PerTestCoverageUtils.sys.mjs');
'resource://testing-common/PerfTestHelpers.sys.mjs': typeof import('resource://testing-common/PerfTestHelpers.sys.mjs');
'resource://testing-common/PermissionTestUtils.sys.mjs': typeof import('resource://testing-common/PermissionTestUtils.sys.mjs');
'resource://testing-common/PlacesTestUtils.sys.mjs': typeof import('resource://testing-common/PlacesTestUtils.sys.mjs');
'resource://testing-common/PromiseTestUtils.sys.mjs': typeof import('resource://testing-common/PromiseTestUtils.sys.mjs');
'resource://testing-common/PromptTestUtils.sys.mjs': typeof import('resource://testing-common/PromptTestUtils.sys.mjs');
'resource://testing-common/RegionTestUtils.sys.mjs': typeof import('resource://testing-common/RegionTestUtils.sys.mjs');
'resource://testing-common/RemoteSettingsServer.sys.mjs': typeof import('resource://testing-common/RemoteSettingsServer.sys.mjs');
'resource://testing-common/SearchTestUtils.sys.mjs': typeof import('resource://testing-common/SearchTestUtils.sys.mjs');
'resource://testing-common/Sinon.sys.mjs': typeof import('resource://testing-common/Sinon.sys.mjs');
'resource://testing-common/SiteDataTestUtils.sys.mjs': typeof import('resource://testing-common/SiteDataTestUtils.sys.mjs');
'resource://testing-common/SpecialPowersParent.sys.mjs': typeof import('resource://testing-common/SpecialPowersParent.sys.mjs');
'resource://testing-common/SpecialPowersSandbox.sys.mjs': typeof import('resource://testing-common/SpecialPowersSandbox.sys.mjs');
'resource://testing-common/TelemetryArchiveTesting.sys.mjs': typeof import('resource://testing-common/TelemetryArchiveTesting.sys.mjs');
'resource://testing-common/TelemetryTestUtils.sys.mjs': typeof import('resource://testing-common/TelemetryTestUtils.sys.mjs');
'resource://testing-common/TestUtils.sys.mjs': typeof import('resource://testing-common/TestUtils.sys.mjs');
'resource://testing-common/UrlbarTestUtils.sys.mjs': typeof import('resource://testing-common/UrlbarTestUtils.sys.mjs');
'resource://testing-common/WrapPrivileged.sys.mjs': typeof import('resource://testing-common/WrapPrivileged.sys.mjs');
'resource://testing-common/XPCShellContentUtils.sys.mjs': typeof import('resource://testing-common/XPCShellContentUtils.sys.mjs');
'resource://testing-common/httpd.sys.mjs': typeof import('resource://testing-common/httpd.sys.mjs');
'resource://tps/auth/fxaccounts.sys.mjs': typeof import('resource://tps/auth/fxaccounts.sys.mjs');
'resource://tps/logger.sys.mjs': typeof import('resource://tps/logger.sys.mjs');
'resource://tps/modules/addons.sys.mjs': typeof import('resource://tps/modules/addons.sys.mjs');
'resource://tps/modules/bookmarkValidator.sys.mjs': typeof import('resource://tps/modules/bookmarkValidator.sys.mjs');
'resource://tps/modules/bookmarks.sys.mjs': typeof import('resource://tps/modules/bookmarks.sys.mjs');
'resource://tps/modules/formautofill.sys.mjs': typeof import('resource://tps/modules/formautofill.sys.mjs');
'resource://tps/modules/forms.sys.mjs': typeof import('resource://tps/modules/forms.sys.mjs');
'resource://tps/modules/history.sys.mjs': typeof import('resource://tps/modules/history.sys.mjs');
'resource://tps/modules/passwords.sys.mjs': typeof import('resource://tps/modules/passwords.sys.mjs');
'resource://tps/modules/prefs.sys.mjs': typeof import('resource://tps/modules/prefs.sys.mjs');
'resource://tps/modules/tabs.sys.mjs': typeof import('resource://tps/modules/tabs.sys.mjs');
'resource://tps/modules/windows.sys.mjs': typeof import('resource://tps/modules/windows.sys.mjs');
}

677
src/zen/@types/lib.gecko.nsresult.d.ts vendored Normal file
View File

@@ -0,0 +1,677 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from xpc.msg and error_list.json.
* If you're updating some of the sources, see README for instructions.
*/
interface nsIXPCComponents_Results {
// Error Message definitions.
// xpconnect specific codes (from nsIXPConnect.h)
/** Not enough arguments */
NS_ERROR_XPC_NOT_ENOUGH_ARGS: 0x80570001;
/** 'Out' argument must be an object */
NS_ERROR_XPC_NEED_OUT_OBJECT: 0x80570002;
/** Cannot set 'value' property of 'out' argument */
NS_ERROR_XPC_CANT_SET_OUT_VAL: 0x80570003;
/** Component returned failure code: */
NS_ERROR_XPC_NATIVE_RETURNED_FAILURE: 0x80570004;
/** Cannot find interface information */
NS_ERROR_XPC_CANT_GET_INTERFACE_INFO: 0x80570005;
/** Cannot find interface information for parameter */
NS_ERROR_XPC_CANT_GET_PARAM_IFACE_INFO: 0x80570006;
/** Cannot find method information */
NS_ERROR_XPC_CANT_GET_METHOD_INFO: 0x80570007;
/** Unexpected error in XPConnect */
NS_ERROR_XPC_UNEXPECTED: 0x80570008;
/** Could not convert JavaScript argument */
NS_ERROR_XPC_BAD_CONVERT_JS: 0x80570009;
/** Could not convert Native argument */
NS_ERROR_XPC_BAD_CONVERT_NATIVE: 0x8057000a;
/** Could not convert JavaScript argument (NULL value cannot be used for a C++ reference type) */
NS_ERROR_XPC_BAD_CONVERT_JS_NULL_REF: 0x8057000b;
/** Illegal operation on WrappedNative prototype object */
NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: 0x8057000c;
/** Cannot convert WrappedNative to function */
NS_ERROR_XPC_CANT_CONVERT_WN_TO_FUN: 0x8057000d;
/** Cannot define new property in a WrappedNative */
NS_ERROR_XPC_CANT_DEFINE_PROP_ON_WN: 0x8057000e;
/** Cannot place watchpoints on WrappedNative object static properties */
NS_ERROR_XPC_CANT_WATCH_WN_STATIC: 0x8057000f;
/** Cannot export a WrappedNative object's static properties */
NS_ERROR_XPC_CANT_EXPORT_WN_STATIC: 0x80570010;
/** nsIXPCScriptable::Call failed */
NS_ERROR_XPC_SCRIPTABLE_CALL_FAILED: 0x80570011;
/** nsIXPCScriptable::Construct failed */
NS_ERROR_XPC_SCRIPTABLE_CTOR_FAILED: 0x80570012;
/** Cannot use wrapper as function unless it implements nsIXPCScriptable */
NS_ERROR_XPC_CANT_CALL_WO_SCRIPTABLE: 0x80570013;
/** Cannot use wrapper as constructor unless it implements nsIXPCScriptable */
NS_ERROR_XPC_CANT_CTOR_WO_SCRIPTABLE: 0x80570014;
/** ComponentManager::CreateInstance returned failure code: */
NS_ERROR_XPC_CI_RETURNED_FAILURE: 0x80570015;
/** ServiceManager::GetService returned failure code: */
NS_ERROR_XPC_GS_RETURNED_FAILURE: 0x80570016;
/** Invalid ClassID or ContractID */
NS_ERROR_XPC_BAD_CID: 0x80570017;
/** Invalid InterfaceID */
NS_ERROR_XPC_BAD_IID: 0x80570018;
/** Cannot create wrapper around native interface */
NS_ERROR_XPC_CANT_CREATE_WN: 0x80570019;
/** JavaScript component threw exception */
NS_ERROR_XPC_JS_THREW_EXCEPTION: 0x8057001a;
/** JavaScript component threw a native object that is not an exception */
NS_ERROR_XPC_JS_THREW_NATIVE_OBJECT: 0x8057001b;
/** JavaScript component threw a JavaScript object */
NS_ERROR_XPC_JS_THREW_JS_OBJECT: 0x8057001c;
/** JavaScript component threw a null value as an exception */
NS_ERROR_XPC_JS_THREW_NULL: 0x8057001d;
/** JavaScript component threw a string as an exception */
NS_ERROR_XPC_JS_THREW_STRING: 0x8057001e;
/** JavaScript component threw a number as an exception */
NS_ERROR_XPC_JS_THREW_NUMBER: 0x8057001f;
/** JavaScript component caused a JavaScript error */
NS_ERROR_XPC_JAVASCRIPT_ERROR: 0x80570020;
/** JavaScript component caused a JavaScript error (detailed report attached) */
NS_ERROR_XPC_JAVASCRIPT_ERROR_WITH_DETAILS: 0x80570021;
/** Cannot convert primitive JavaScript value into an array */
NS_ERROR_XPC_CANT_CONVERT_PRIMITIVE_TO_ARRAY: 0x80570022;
/** Cannot convert JavaScript object into an array */
NS_ERROR_XPC_CANT_CONVERT_OBJECT_TO_ARRAY: 0x80570023;
/** JavaScript Array does not have as many elements as indicated by size argument */
NS_ERROR_XPC_NOT_ENOUGH_ELEMENTS_IN_ARRAY: 0x80570024;
/** Cannot find array information */
NS_ERROR_XPC_CANT_GET_ARRAY_INFO: 0x80570025;
/** JavaScript String does not have as many characters as indicated by size argument */
NS_ERROR_XPC_NOT_ENOUGH_CHARS_IN_STRING: 0x80570026;
/** Security Manager vetoed action */
NS_ERROR_XPC_SECURITY_MANAGER_VETO: 0x80570027;
/** Failed to build a wrapper because the interface that was not declared [scriptable] */
NS_ERROR_XPC_INTERFACE_NOT_SCRIPTABLE: 0x80570028;
/** Failed to build a wrapper because the interface does not inherit from nsISupports */
NS_ERROR_XPC_INTERFACE_NOT_FROM_NSISUPPORTS: 0x80570029;
/** Property is a constant and cannot be changed */
NS_ERROR_XPC_CANT_SET_READ_ONLY_CONSTANT: 0x8057002b;
/** Property is a read only attribute and cannot be changed */
NS_ERROR_XPC_CANT_SET_READ_ONLY_ATTRIBUTE: 0x8057002c;
/** Property is an interface method and cannot be changed */
NS_ERROR_XPC_CANT_SET_READ_ONLY_METHOD: 0x8057002d;
/** Cannot add property to WrappedNative object */
NS_ERROR_XPC_CANT_ADD_PROP_TO_WRAPPED_NATIVE: 0x8057002e;
/** Call to nsIXPCScriptable interface for WrappedNative failed unexpecedly */
NS_ERROR_XPC_CALL_TO_SCRIPTABLE_FAILED: 0x8057002f;
/** JavaScript component does not have a method named: */
NS_ERROR_XPC_JSOBJECT_HAS_NO_FUNCTION_NAMED: 0x80570030;
/** Bad ID string */
NS_ERROR_XPC_BAD_ID_STRING: 0x80570031;
/** Bad initializer name in Constructor - Component has no method with that name */
NS_ERROR_XPC_BAD_INITIALIZER_NAME: 0x80570032;
/** Operation failed because the XPConnect subsystem has been shutdown */
NS_ERROR_XPC_HAS_BEEN_SHUTDOWN: 0x80570033;
/** Cannot modify properties of a WrappedNative */
NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN: 0x80570034;
/** Could not convert JavaScript argument - 0 was passed, expected object. Did you mean null? */
NS_ERROR_XPC_BAD_CONVERT_JS_ZERO_ISNOT_NULL: 0x80570035;
// common global codes (from nsError.h)
/** Success */
NS_OK: 0x0;
/** Component not initialized */
NS_ERROR_NOT_INITIALIZED: 0xc1f30001;
/** Component already initialized */
NS_ERROR_ALREADY_INITIALIZED: 0xc1f30002;
/** Method not implemented */
NS_ERROR_NOT_IMPLEMENTED: 0x80004001;
/** Component does not have requested interface */
NS_NOINTERFACE: 0x80004002;
/** Component does not have requested interface */
NS_ERROR_NO_INTERFACE: 0x80004002;
/** Illegal value */
NS_ERROR_ILLEGAL_VALUE: 0x80070057;
/** Invalid pointer */
NS_ERROR_INVALID_POINTER: 0x80070057;
/** Null pointer */
NS_ERROR_NULL_POINTER: 0x80070057;
/** Abort */
NS_ERROR_ABORT: 0x80004004;
/** Failure */
NS_ERROR_FAILURE: 0x80004005;
/** Unexpected error */
NS_ERROR_UNEXPECTED: 0x8000ffff;
/** Out of Memory */
NS_ERROR_OUT_OF_MEMORY: 0x8007000e;
/** Invalid argument */
NS_ERROR_INVALID_ARG: 0x80070057;
/** Component is not available */
NS_ERROR_NOT_AVAILABLE: 0x80040111;
/** Factory not registered */
NS_ERROR_FACTORY_NOT_REGISTERED: 0x80040154;
/** Factory not registered (may be tried again) */
NS_ERROR_FACTORY_REGISTER_AGAIN: 0x80040155;
/** Factory not loaded */
NS_ERROR_FACTORY_NOT_LOADED: 0x800401f8;
/** Factory does not support signatures */
NS_ERROR_FACTORY_NO_SIGNATURE_SUPPORT: 0xc1f30101;
/** Factory already exists */
NS_ERROR_FACTORY_EXISTS: 0xc1f30100;
// added from nsError.h on Feb 28 2001...
/** Stream closed */
NS_BASE_STREAM_CLOSED: 0x80470002;
/** Error from the operating system */
NS_BASE_STREAM_OSERROR: 0x80470003;
/** Illegal arguments */
NS_BASE_STREAM_ILLEGAL_ARGS: 0x80470004;
/** No converter for unichar streams */
NS_BASE_STREAM_NO_CONVERTER: 0x80470005;
/** Bad converter for unichar streams */
NS_BASE_STREAM_BAD_CONVERSION: 0x80470006;
/** Stream would block */
NS_BASE_STREAM_WOULD_BLOCK: 0x80470007;
/** File error: Unrecognized path */
NS_ERROR_FILE_UNRECOGNIZED_PATH: 0x80520001;
/** File error: Unresolvable symlink */
NS_ERROR_FILE_UNRESOLVABLE_SYMLINK: 0x80520002;
/** File error: Execution failed */
NS_ERROR_FILE_EXECUTION_FAILED: 0x80520003;
/** File error: Unknown type */
NS_ERROR_FILE_UNKNOWN_TYPE: 0x80520004;
/** File error: Destination not dir */
NS_ERROR_FILE_DESTINATION_NOT_DIR: 0x80520005;
/** File error: Copy or move failed */
NS_ERROR_FILE_COPY_OR_MOVE_FAILED: 0x80520007;
/** File error: Already exists */
NS_ERROR_FILE_ALREADY_EXISTS: 0x80520008;
/** File error: Invalid path */
NS_ERROR_FILE_INVALID_PATH: 0x80520009;
/** File error: Corrupted */
NS_ERROR_FILE_CORRUPTED: 0x8052000b;
/** File error: Not directory */
NS_ERROR_FILE_NOT_DIRECTORY: 0x8052000c;
/** File error: Is directory */
NS_ERROR_FILE_IS_DIRECTORY: 0x8052000d;
/** File error: Is locked */
NS_ERROR_FILE_IS_LOCKED: 0x8052000e;
/** File error: Too big */
NS_ERROR_FILE_TOO_BIG: 0x8052000f;
/** File error: No device space */
NS_ERROR_FILE_NO_DEVICE_SPACE: 0x80520010;
/** File error: Name too long */
NS_ERROR_FILE_NAME_TOO_LONG: 0x80520011;
/** File error: Not found */
NS_ERROR_FILE_NOT_FOUND: 0x80520012;
/** File error: Read only */
NS_ERROR_FILE_READ_ONLY: 0x80520013;
/** File error: Dir not empty */
NS_ERROR_FILE_DIR_NOT_EMPTY: 0x80520014;
/** File error: Access denied */
NS_ERROR_FILE_ACCESS_DENIED: 0x80520015;
// added from nsError.h on Sept 6 2001...
/** Data conversion error */
NS_ERROR_CANNOT_CONVERT_DATA: 0x80460001;
/** Can not modify immutable data container */
NS_ERROR_OBJECT_IS_IMMUTABLE: 0x80460002;
/** Data conversion failed because significant data would be lost */
NS_ERROR_LOSS_OF_SIGNIFICANT_DATA: 0x80460003;
/** Data conversion succeeded but data was rounded to fit */
NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA: 0x460001;
// network related codes (from nsNetError.h)
/** The async request failed for some unknown reason */
NS_BINDING_FAILED: 0x804b0001;
/** The async request failed because it was aborted by some user action */
NS_BINDING_ABORTED: 0x804b0002;
/** The async request has been redirected to a different async request */
NS_BINDING_REDIRECTED: 0x804b0003;
/** The async request has been retargeted to a different handler */
NS_BINDING_RETARGETED: 0x804b0004;
/** The URI is malformed */
NS_ERROR_MALFORMED_URI: 0x804b000a;
/** The URI scheme corresponds to an unknown protocol handler */
NS_ERROR_UNKNOWN_PROTOCOL: 0x804b0012;
/** Channel opened successfully but no data will be returned */
NS_ERROR_NO_CONTENT: 0x804b0011;
/** The requested action could not be completed while the object is busy */
NS_ERROR_IN_PROGRESS: 0x804b000f;
/** Channel is already open */
NS_ERROR_ALREADY_OPENED: 0x804b0049;
/** The content encoding of the source document is incorrect */
NS_ERROR_INVALID_CONTENT_ENCODING: 0x804b001b;
/** Corrupted content received from server (potentially MIME type mismatch because of 'X-Content-Type-Options: nosniff') */
NS_ERROR_CORRUPTED_CONTENT: 0x804b001d;
/** Couldn't extract first component from potentially corrupted header field */
NS_ERROR_FIRST_HEADER_FIELD_COMPONENT_EMPTY: 0x804b0022;
/** The connection is already established */
NS_ERROR_ALREADY_CONNECTED: 0x804b000b;
/** The connection does not exist */
NS_ERROR_NOT_CONNECTED: 0x804b000c;
/** The connection was refused */
NS_ERROR_CONNECTION_REFUSED: 0x804b000d;
/** User refused navigation to potentially unsafe URL with embedded credentials/superfluos authentication */
NS_ERROR_SUPERFLUOS_AUTH: 0x804b005b;
/** User attempted basic HTTP authentication when it is disabled */
NS_ERROR_BASIC_HTTP_AUTH_DISABLED: 0x804b005c;
// Error codes return from the proxy
/** The connection to the proxy server was refused */
NS_ERROR_PROXY_CONNECTION_REFUSED: 0x804b0048;
/** The proxy requires authentication */
NS_ERROR_PROXY_AUTHENTICATION_FAILED: 0x804b057f;
/** The request failed on the proxy */
NS_ERROR_PROXY_BAD_GATEWAY: 0x804b05de;
/** The request timed out on the proxy */
NS_ERROR_PROXY_GATEWAY_TIMEOUT: 0x804b05e0;
/** Sending too many requests to a proxy */
NS_ERROR_PROXY_TOO_MANY_REQUESTS: 0x804b0595;
/** The proxy does not support the version of the HTTP request */
NS_ERROR_PROXY_VERSION_NOT_SUPPORTED: 0x804b05e1;
/** The user is banned from the proxy */
NS_ERROR_PROXY_FORBIDDEN: 0x804b057b;
/** The proxy is not available */
NS_ERROR_PROXY_SERVICE_UNAVAILABLE: 0x804b05df;
/** The desired destination is unavailable for legal reasons */
NS_ERROR_PROXY_UNAVAILABLE_FOR_LEGAL_REASONS: 0x804b05ab;
/** The connection has timed out */
NS_ERROR_NET_TIMEOUT: 0x804b000e;
/** The request has been cancelled because of a timeout */
NS_ERROR_NET_TIMEOUT_EXTERNAL: 0x804b0055;
/** The requested action could not be completed in the offline state */
NS_ERROR_OFFLINE: 0x804b0010;
/** Establishing a connection to an unsafe or otherwise banned port was prohibited */
NS_ERROR_PORT_ACCESS_NOT_ALLOWED: 0x804b0013;
/** The connection was established, but no data was ever received */
NS_ERROR_NET_RESET: 0x804b0014;
/** The connection was established, but the browser received an empty page with an error response */
NS_ERROR_NET_EMPTY_RESPONSE: 0x804b0024;
/** The connection was established, but the browser received an error response from the server */
NS_ERROR_NET_ERROR_RESPONSE: 0x804b0023;
/** The connection was established, but the data transfer was interrupted */
NS_ERROR_NET_INTERRUPT: 0x804b0047;
/** A transfer was only partially done when it completed */
NS_ERROR_NET_PARTIAL_TRANSFER: 0x804b004c;
/** There has been a http3 protocol error */
NS_ERROR_NET_HTTP3_PROTOCOL_ERROR: 0x804b0054;
/** This request is not resumable, but it was tried to resume it, or to request resume-specific data */
NS_ERROR_NOT_RESUMABLE: 0x804b0019;
/** It was attempted to resume the request, but the entity has changed in the meantime */
NS_ERROR_ENTITY_CHANGED: 0x804b0020;
/** The request failed as a result of a detected redirection loop */
NS_ERROR_REDIRECT_LOOP: 0x804b001f;
/** The request failed because the content type returned by the server was not a type expected by the channel */
NS_ERROR_UNSAFE_CONTENT_TYPE: 0x804b004a;
/** The load caused an error page to be displayed. */
NS_ERROR_LOAD_SHOWED_ERRORPAGE: 0x804b004d;
/** The request was blocked by a policy set by the system administrator. */
NS_ERROR_BLOCKED_BY_POLICY: 0x80780003;
/** The lookup of the hostname failed */
NS_ERROR_UNKNOWN_HOST: 0x804b001e;
/** The DNS lookup queue is full */
NS_ERROR_DNS_LOOKUP_QUEUE_FULL: 0x804b0021;
/** The lookup of the proxy hostname failed */
NS_ERROR_UNKNOWN_PROXY_HOST: 0x804b002a;
/** The specified socket type does not exist */
NS_ERROR_UNKNOWN_SOCKET_TYPE: 0x804b0033;
/** The specified socket type could not be created */
NS_ERROR_SOCKET_CREATE_FAILED: 0x804b0034;
/** The specified socket address type is not supported */
NS_ERROR_SOCKET_ADDRESS_NOT_SUPPORTED: 0x804b0035;
/** Some other socket is already using the specified address. */
NS_ERROR_SOCKET_ADDRESS_IN_USE: 0x804b0036;
/** Cache key could not be found */
NS_ERROR_CACHE_KEY_NOT_FOUND: 0x804b003d;
/** Cache data is a stream */
NS_ERROR_CACHE_DATA_IS_STREAM: 0x804b003e;
/** Cache data is not a stream */
NS_ERROR_CACHE_DATA_IS_NOT_STREAM: 0x804b003f;
/** Cache entry exists but needs to be validated first */
NS_ERROR_CACHE_WAIT_FOR_VALIDATION: 0x804b0040;
/** Cache entry has been doomed */
NS_ERROR_CACHE_ENTRY_DOOMED: 0x804b0041;
/** Read access to cache denied */
NS_ERROR_CACHE_READ_ACCESS_DENIED: 0x804b0042;
/** Write access to cache denied */
NS_ERROR_CACHE_WRITE_ACCESS_DENIED: 0x804b0043;
/** Cache is currently in use */
NS_ERROR_CACHE_IN_USE: 0x804b0044;
/** Document does not exist in cache */
NS_ERROR_DOCUMENT_NOT_CACHED: 0x804b0046;
/** The requested number of domain levels exceeds those present in the host string */
NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS: 0x804b0050;
/** The host string is an IP address */
NS_ERROR_HOST_IS_IP_ADDRESS: 0x804b0051;
/** Can't access a wrapped JS object from a different thread */
NS_ERROR_NOT_SAME_THREAD: 0x80460004;
// storage related codes (from mozStorage.h)
/** SQLite database connection is busy */
NS_ERROR_STORAGE_BUSY: 0x80630001;
/** SQLite encountered an IO error */
NS_ERROR_STORAGE_IOERR: 0x80630002;
/** SQLite database operation failed because a constraint was violated */
NS_ERROR_STORAGE_CONSTRAINT: 0x80630003;
// plugin related codes (from nsPluginError.h)
/** Clearing site data by time range not supported by plugin */
NS_ERROR_PLUGIN_TIME_RANGE_NOT_SUPPORTED: 0x804c03eb;
// character converter related codes
/** The input characters have illegal sequences */
NS_ERROR_ILLEGAL_INPUT: 0x8050000e;
// Codes related to signd jars
/** The JAR is not signed. */
NS_ERROR_SIGNED_JAR_NOT_SIGNED: 0x80680001;
/** An entry in the JAR has been modified after the JAR was signed. */
NS_ERROR_SIGNED_JAR_MODIFIED_ENTRY: 0x80680002;
/** An entry in the JAR has not been signed. */
NS_ERROR_SIGNED_JAR_UNSIGNED_ENTRY: 0x80680003;
/** An entry is missing from the JAR file. */
NS_ERROR_SIGNED_JAR_ENTRY_MISSING: 0x80680004;
/** The JAR's signature is wrong. */
NS_ERROR_SIGNED_JAR_WRONG_SIGNATURE: 0x80680005;
/** An entry in the JAR is too large. */
NS_ERROR_SIGNED_JAR_ENTRY_TOO_LARGE: 0x80680006;
/** An entry in the JAR is invalid. */
NS_ERROR_SIGNED_JAR_ENTRY_INVALID: 0x80680007;
/** The JAR's manifest or signature file is invalid. */
NS_ERROR_SIGNED_JAR_MANIFEST_INVALID: 0x80680008;
/** The PKCS#7 signature is malformed or invalid. */
NS_ERROR_CMS_VERIFY_NO_CONTENT_INFO: 0x805a0401;
/** The PKCS#7 information is not signed. */
NS_ERROR_CMS_VERIFY_NOT_SIGNED: 0x805a0400;
// Codes related to signed manifests
/** The signed app manifest or signature file is invalid. */
NS_ERROR_SIGNED_APP_MANIFEST_INVALID: 0x806b0001;
// Codes for printing-related errors.
/** No printers available. */
NS_ERROR_GFX_PRINTER_NO_PRINTER_AVAILABLE: 0x80480001;
/** The selected printer could not be found. */
NS_ERROR_GFX_PRINTER_NAME_NOT_FOUND: 0x80480002;
/** Failed to open output file for print to file. */
NS_ERROR_GFX_PRINTER_COULD_NOT_OPEN_FILE: 0x80480003;
/** Printing failed while starting the print job. */
NS_ERROR_GFX_PRINTER_STARTDOC: 0x80480004;
/** Printing failed while completing the print job. */
NS_ERROR_GFX_PRINTER_ENDDOC: 0x80480005;
/** Printing failed while starting a new page. */
NS_ERROR_GFX_PRINTER_STARTPAGE: 0x80480006;
/** Cannot print this document yet, it is still being loaded. */
NS_ERROR_GFX_PRINTER_DOC_IS_BUSY: 0x80480007;
// Codes related to content
/** The process that hosted this content has crashed. */
NS_ERROR_CONTENT_CRASHED: 0x805e0010;
/** The process that hosted this frame has crashed. */
NS_ERROR_FRAME_CRASHED: 0x805e000e;
/** The process that hosted this content did not have the same buildID as the parent. */
NS_ERROR_BUILDID_MISMATCH: 0x805e0011;
/** The load for this content was blocked. */
NS_ERROR_CONTENT_BLOCKED: 0x805e0006;
// Codes for the JS-implemented Push DOM API. These can be removed as part of bug 1252660.
/** Invalid raw ECDSA P-256 public key. */
NS_ERROR_DOM_PUSH_INVALID_KEY_ERR: 0x806d0005;
/** A subscription with a different application server key already exists. */
NS_ERROR_DOM_PUSH_MISMATCHED_KEY_ERR: 0x806d0006;
// Codes defined in WebIDL https://heycam.github.io/webidl/#idl-DOMException-error-names
/** The object can not be found here. */
NS_ERROR_DOM_NOT_FOUND_ERR: 0x80530008;
/** The request is not allowed. */
NS_ERROR_DOM_NOT_ALLOWED_ERR: 0x80530021;
// Codes related to the URIClassifier service
/** The URI is malware */
NS_ERROR_MALWARE_URI: 0x805d001e;
/** The URI is phishing */
NS_ERROR_PHISHING_URI: 0x805d001f;
/** The URI is tracking */
NS_ERROR_TRACKING_URI: 0x805d0022;
/** The URI is unwanted */
NS_ERROR_UNWANTED_URI: 0x805d0023;
/** The URI is blocked */
NS_ERROR_BLOCKED_URI: 0x805d0025;
/** The URI is harmful */
NS_ERROR_HARMFUL_URI: 0x805d0026;
/** The URI is fingerprinting */
NS_ERROR_FINGERPRINTING_URI: 0x805d0029;
/** The URI is cryptomining */
NS_ERROR_CRYPTOMINING_URI: 0x805d002a;
/** The URI is social tracking */
NS_ERROR_SOCIALTRACKING_URI: 0x805d002b;
/** The URI is email tracking */
NS_ERROR_EMAILTRACKING_URI: 0x805d002c;
// Profile manager error codes
/** Flushing the profiles to disk would have overwritten changes made elsewhere. */
NS_ERROR_DATABASE_CHANGED: 0x805800ca;
// Codes related to URILoader
/** The data from a channel has already been parsed and cached so it doesn't need to be reparsed from the original source. */
NS_ERROR_PARSED_DATA_CACHED: 0x805d0021;
/** The async request has been cancelled by another async request */
NS_BINDING_CANCELLED_OLD_LOAD: 0x805d0027;
/** The ProgID classes had not been registered. */
NS_ERROR_WDBA_NO_PROGID: 0x80720001;
/** The existing UserChoice Hash could not be verified. */
NS_ERROR_WDBA_HASH_CHECK: 0x80720002;
/** UserChoice was set, but checking the default did not return our ProgID. */
NS_ERROR_WDBA_REJECTED: 0x80720003;
/** The existing UserChoice Hash was verified, but we're on an older, unsupported Windows build, so do not attempt to update the UserChoice hash. */
NS_ERROR_WDBA_BUILD: 0x80720004;
}
type nsIXPCComponents_Values = nsIXPCComponents_Results[keyof nsIXPCComponents_Results];

62
src/zen/@types/lib.gecko.services.d.ts vendored Normal file
View File

@@ -0,0 +1,62 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from services.json.
* If you're updating some of the sources, see README for instructions.
*/
interface JSServices {
DAPTelemetry: nsIDAPTelemetry;
appShell: nsIAppShellService;
appinfo: nsICrashReporter & nsIXULAppInfo & nsIXULRuntime;
blocklist: nsIBlocklistService;
cache2: nsICacheStorageService;
catMan: nsICategoryManager;
clearData: nsIClearDataService;
clipboard: nsIClipboard;
console: nsIConsoleService;
cookieBanners: nsICookieBannerService;
cookies: nsICookieManager & nsICookieService;
cpmm: ContentProcessMessageManager;
dirsvc: nsIDirectoryService & nsIProperties;
dns: nsIDNSService;
domStorageManager: nsIDOMStorageManager & nsILocalStorageManager;
droppedLinkHandler: nsIDroppedLinkHandler;
eTLD: nsIEffectiveTLDService;
els: nsIEventListenerService;
env: nsIEnvironment;
focus: nsIFocusManager;
fog: nsIFOG;
intl: mozIMozIntl;
io: nsIIOService & nsINetUtil & nsISpeculativeConnect;
loadContextInfo: nsILoadContextInfoFactory;
locale: mozILocaleService;
logins: nsILoginManager;
mm: ChromeMessageBroadcaster;
obs: nsIObserverService;
perms: nsIPermissionManager;
policies: nsIEnterprisePolicies;
ppmm: ParentProcessMessageManager;
prefs: nsIPrefBranch & nsIPrefService;
profiler: nsIProfiler;
prompt: nsIPromptService;
qms: nsIQuotaManagerService;
rfp: nsIRFPService;
scriptSecurityManager: nsIScriptSecurityManager;
scriptloader: mozIJSSubScriptLoader;
search: nsISearchService;
sessionStorage: nsISessionStorageService;
startup: nsIAppStartup;
storage: mozIStorageService;
strings: nsIStringBundleService;
sysinfo: nsIPropertyBag2 & nsISystemInfo;
telemetry: nsITelemetry;
textToSubURI: nsITextToSubURI;
tm: nsIThreadManager;
uriFixup: nsIURIFixup;
urlFormatter: nsIURLFormatter;
uuid: nsIUUIDGenerator;
vc: nsIVersionComparator;
wm: nsIWindowMediator;
ww: nsIWindowWatcher;
xulStore: nsIXULStore;
}

114
src/zen/@types/lib.gecko.tweaks.d.ts vendored Normal file
View File

@@ -0,0 +1,114 @@
/**
* Gecko generic/specialized adjustments for xpcom and webidl types.
*/
// More specific types for parent process browsing contexts.
interface CanonicalBrowsingContext extends LoadContextMixin {
embedderElement: XULBrowserElement;
currentWindowContext: WindowGlobalParent;
parent: CanonicalBrowsingContext;
parentWindowContext: WindowGlobalParent;
top: CanonicalBrowsingContext;
topWindowContext: WindowGlobalParent;
}
interface ChromeWindow extends Window {
isChromeWindow: true;
}
interface Document {
createXULElement(name: 'browser'): XULBrowserElement;
}
type nsIGleanPingNoReason = {
[K in keyof nsIGleanPing]: K extends 'submit' ? (_?: never) => void : nsIGleanPing[K];
};
type nsIGleanPingWithReason<T> = {
[K in keyof nsIGleanPing]: K extends 'submit' ? (reason: T) => void : nsIGleanPing[K];
};
interface MessageListenerManagerMixin {
// Overloads that define `data` arg as required, since it's ~always expected.
addMessageListener(msg: string, listener: { receiveMessage(_: ReceiveMessageArgument & { data }) });
removeMessageListener(msg: string, listener: { receiveMessage(_: ReceiveMessageArgument & { data }) });
}
interface MozQueryInterface {
<T>(iid: T): nsQIResult<T>;
}
interface nsICryptoHash extends nsISupports {
// Accepts a TypedArray.
update(aData: ArrayLike<number>, aLen: number): void;
}
interface nsIDOMWindow extends Window {}
interface nsISimpleEnumerator extends Iterable<any> {}
interface nsISupports {
wrappedJSObject?: object;
}
interface nsIXPCComponents_Constructor {
<const T, IIDs = nsIXPCComponents_Interfaces>(
cid,
id: T,
init?
): {
new (...any): nsQIResult<T extends keyof IIDs ? IIDs[T] : T>;
(...any): nsQIResult<T extends keyof IIDs ? IIDs[T] : T>;
};
}
interface ComponentsExceptionOptions {
result?: number;
stack?: nsIStackFrame;
data?: object;
}
interface nsIException extends Exception {}
interface nsIXPCComponents_Exception {
(message?: string, resultOrOptions?: number | ComponentsExceptionOptions, stack?: nsIStackFrame, data?: object): nsIException;
}
interface nsIXPCComponents_ID {
(uuid: string): nsID;
}
interface nsIXPCComponents_utils_Sandbox {
(principal: nsIPrincipal | nsIPrincipal[], options: object): Sandbox;
}
interface nsXPCComponents_Classes {
[cid: string]: {
createInstance<T>(aID: T): nsQIResult<T>;
getService<T>(aID?: T): unknown extends T ? nsISupports : nsQIResult<T>;
};
}
// Generic overloads.
interface nsXPCComponents_Utils {
cloneInto<T>(value: T, ...any): T;
createObjectIn<T = object>(_, object?: T): T;
exportFunction<T>(func: T, ...any): T;
getWeakReference<T>(value: T): { get(): T };
waiveXrays<T>(object: T): T;
}
type Sandbox = typeof globalThis & nsISupports;
// Hand-crafted artisanal types.
interface XULBrowserElement extends XULFrameElement, FrameLoader {
currentURI: nsIURI;
docShellIsActive: boolean;
isRemoteBrowser: boolean;
remoteType: string;
}
// https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/1736
interface Localization {
formatValuesSync(aKeys: L10nKey[]): (string | null)[];
}

392
src/zen/@types/lib.gecko.win32.d.ts vendored Normal file
View File

@@ -0,0 +1,392 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from source XPCOM .idl files.
* If you're updating some of the sources, see README for instructions.
*/
declare global {
// https://searchfox.org/mozilla-central/source/toolkit/components/aboutthirdparty/nsIAboutThirdParty.idl
interface nsIInstalledApplication extends nsISupports {
readonly name: string;
readonly publisher: string;
}
interface nsIAboutThirdParty extends nsISupports {
readonly ModuleType_Unknown?: 1;
readonly ModuleType_IME?: 2;
readonly ModuleType_ShellExtension?: 4;
readonly ModuleType_BlockedByUser?: 8;
readonly ModuleType_BlockedByUserAtLaunch?: 16;
lookupModuleType(aLeafName: string): u32;
lookupApplication(aModulePath: string): nsIInstalledApplication;
readonly isDynamicBlocklistAvailable: boolean;
readonly isDynamicBlocklistDisabled: boolean;
updateBlocklist(aLeafName: string, aNewBlockStatus: boolean): Promise<any>;
collectSystemInfo(): Promise<any>;
loadModuleForTesting(aModulePath: string): void;
}
// https://searchfox.org/mozilla-central/source/toolkit/components/aboutwindowsmessages/nsIAboutWindowsMessages.idl
interface nsIAboutWindowsMessages extends nsISupports {
getMessages(currentWindow: mozIDOMWindowProxy, messages: OutParam<string[][]>, windowTitles: OutParam<string[]>): void;
}
// https://searchfox.org/mozilla-central/source/toolkit/components/alerts/nsIWindowsAlertsService.idl
} // global
declare enum nsIWindowsAlertNotification_ImagePlacement {
eInline = 0,
eHero = 1,
eIcon = 2,
}
declare global {
namespace nsIWindowsAlertNotification {
type ImagePlacement = nsIWindowsAlertNotification_ImagePlacement;
}
interface nsIWindowsAlertNotification extends nsIAlertNotification, Enums<typeof nsIWindowsAlertNotification_ImagePlacement> {
imagePlacement: nsIWindowsAlertNotification.ImagePlacement;
}
interface nsIWindowsAlertsService extends nsIAlertsService {
handleWindowsTag(aWindowsTag: string): Promise<any>;
getXmlStringForWindowsAlert(aAlert: nsIAlertNotification, aWindowsTag?: string): string;
removeAllNotificationsForInstall(): void;
}
// https://searchfox.org/mozilla-central/source/toolkit/mozapps/defaultagent/nsIDefaultAgent.idl
interface nsIDefaultAgent extends nsISupports {
registerTask(aUniqueToken: string): void;
updateTask(aUniqueToken: string): void;
unregisterTask(aUniqueToken: string): void;
uninstall(aUniqueToken: string): void;
secondsSinceLastAppRun(): i64;
getDefaultBrowser(): string;
getReplacePreviousDefaultBrowser(aCurrentBrowser: string): string;
getDefaultPdfHandler(): string;
sendPing(
aCurrentBrowser: string,
aPreviousBrowser: string,
aPdfHandler: string,
aNotificationShown: string,
aNotificationAction: string,
daysSinceLastAppLaunch: u32
): void;
setDefaultBrowserUserChoice(aAumid: string, aExtraFileExtensions: string[]): void;
setDefaultBrowserUserChoiceAsync(aAumid: string, aExtraFileExtensions: string[]): Promise<any>;
setDefaultExtensionHandlersUserChoice(aAumid: string, aFileExtensions: string[]): void;
agentDisabled(): boolean;
}
// https://searchfox.org/mozilla-central/source/toolkit/mozapps/defaultagent/nsIWindowsMutex.idl
interface nsIWindowsMutex extends nsISupports {
tryLock(): void;
isLocked(): boolean;
unlock(): void;
}
interface nsIWindowsMutexFactory extends nsISupports {
createMutex(aName: string): nsIWindowsMutex;
}
// https://searchfox.org/mozilla-central/source/dom/geolocation/nsIGeolocationUIUtilsWin.idl
interface nsIGeolocationUIUtilsWin extends nsISupports {
dismissPrompts(aBC: BrowsingContext): void;
}
// https://searchfox.org/mozilla-central/source/netwerk/socket/nsINamedPipeService.idl
// https://searchfox.org/mozilla-central/source/browser/components/shell/nsIWindowsShellService.idl
} // global
declare enum nsIWindowsShellService_LaunchOnLoginEnabledEnumerator {
LAUNCH_ON_LOGIN_DISABLED_BY_SETTINGS = 0,
LAUNCH_ON_LOGIN_DISABLED = 1,
LAUNCH_ON_LOGIN_ENABLED = 2,
LAUNCH_ON_LOGIN_ENABLED_BY_POLICY = 3,
}
declare global {
namespace nsIWindowsShellService {
type LaunchOnLoginEnabledEnumerator = nsIWindowsShellService_LaunchOnLoginEnabledEnumerator;
}
interface nsIWindowsShellService
extends nsIShellService,
Enums<typeof nsIWindowsShellService_LaunchOnLoginEnabledEnumerator> {
createShortcut(
aBinary: nsIFile,
aArguments: string[],
aDescription: string,
aIconFile: nsIFile,
aIconIndex: u16,
aAppUserModelId: string,
aShortcutFolder: string,
aShortcutName: string
): Promise<any>;
getLaunchOnLoginShortcuts(): string[];
pinCurrentAppToStartMenuAsync(aCheckOnly: boolean): Promise<any>;
isCurrentAppPinnedToStartMenuAsync(): Promise<any>;
enableLaunchOnLoginMSIXAsync(aTaskId: string): Promise<any>;
disableLaunchOnLoginMSIXAsync(aTaskId: string): Promise<any>;
getLaunchOnLoginEnabledMSIXAsync(aTaskId: string): Promise<any>;
pinCurrentAppToTaskbarAsync(aPrivateBrowsing: boolean): Promise<any>;
checkPinCurrentAppToTaskbarAsync(aPrivateBrowsing: boolean): Promise<any>;
isCurrentAppPinnedToTaskbarAsync(aumid: string): Promise<any>;
pinShortcutToTaskbar(aAppUserModelId: string, aShortcutPath: string): Promise<any>;
createWindowsIcon(aFile: nsIFile, aContainer: imgIContainer): Promise<any>;
unpinShortcutFromTaskbar(aShortcutPath: string): void;
getTaskbarTabShortcutPath(aShortcutName: string): string;
getTaskbarTabPins(): string[];
classifyShortcut(aPath: string): string;
hasPinnableShortcut(aAUMID: string, aPrivateBrowsing: boolean): Promise<any>;
canSetDefaultBrowserUserChoice(): boolean;
checkAllProgIDsExist(): boolean;
checkBrowserUserChoiceHashes(): boolean;
isDefaultHandlerFor(aFileExtensionOrProtocol: string): boolean;
queryCurrentDefaultHandlerFor(aFileExtensionOrProtocol: string): string;
}
// https://searchfox.org/mozilla-central/source/toolkit/components/taskscheduler/nsIWinTaskSchedulerService.idl
interface nsIWinTaskSchedulerService extends nsISupports {
registerTask(aFolderName: string, aTaskName: string, aDefinitionXML: string, aUpdateExisting?: boolean): void;
validateTaskDefinition(aDefinitionXML: string): i32;
getTaskXML(aFolderName: string, aTaskName: string): string;
getCurrentUserSid(): string;
deleteTask(aFolderName: string, aTaskName: string): void;
getFolderTasks(aFolderName: string): string[];
createFolder(aParentFolderName: string, aSubFolderName: string): void;
deleteFolder(aParentFolderName: string, aSubFolderName: string): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIJumpListBuilder.idl
interface nsIJumpListBuilder extends nsISupports {
obtainAndCacheFavicon(faviconURL: nsIURI): string;
obtainAndCacheFaviconAsync(faviconURL: nsIURI): Promise<any>;
isAvailable(): Promise<any>;
checkForRemovals(): Promise<any>;
populateJumpList(aTaskDescriptions: any, aCustomTitle: string, aCustomDescriptions: any): Promise<any>;
clearJumpList(): Promise<any>;
}
// https://searchfox.org/mozilla-central/source/widget/nsIPrintSettingsWin.idl
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarOverlayIconController.idl
interface nsITaskbarOverlayIconController extends nsISupports {
setOverlayIcon(statusIcon: imgIContainer, statusDescription: string, paintContext?: nsISVGPaintContext): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarPreview.idl
interface nsITaskbarPreview extends nsISupports {
controller: nsITaskbarPreviewController;
tooltip: string;
visible: boolean;
active: boolean;
invalidate(): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarPreviewButton.idl
interface nsITaskbarPreviewButton extends nsISupports {
tooltip: string;
dismissOnClick: boolean;
hasBorder: boolean;
disabled: boolean;
image: imgIContainer;
visible: boolean;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarPreviewController.idl
type nsITaskbarPreviewCallback = Callable<{
done(aCanvas: nsISupports, aDrawBorder: boolean): void;
}>;
interface nsITaskbarPreviewController extends nsISupports {
readonly width: u32;
readonly height: u32;
readonly thumbnailAspectRatio: float;
requestPreview(aCallback: nsITaskbarPreviewCallback): void;
requestThumbnail(aCallback: nsITaskbarPreviewCallback, width: u32, height: u32): void;
onClose(): void;
onActivate(): boolean;
onClick(button: nsITaskbarPreviewButton): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarProgress.idl
interface nsITaskbarProgress extends nsISupports {
readonly STATE_NO_PROGRESS?: 0;
readonly STATE_INDETERMINATE?: 1;
readonly STATE_NORMAL?: 2;
readonly STATE_ERROR?: 3;
readonly STATE_PAUSED?: 4;
setProgressState(state: nsTaskbarProgressState, currentValue?: u64, maxValue?: u64): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarTabPreview.idl
interface nsITaskbarTabPreview extends nsITaskbarPreview {
title: string;
icon: imgIContainer;
move(aNext: nsITaskbarTabPreview): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsITaskbarWindowPreview.idl
interface nsITaskbarWindowPreview extends nsITaskbarPreview {
readonly NUM_TOOLBAR_BUTTONS?: 7;
getButton(index: u32): nsITaskbarPreviewButton;
enableCustomDrawing: boolean;
}
// https://searchfox.org/mozilla-central/source/widget/nsIWinTaskbar.idl
interface nsIWinTaskbar extends nsISupports {
readonly available: boolean;
readonly defaultGroupId: string;
readonly defaultPrivateGroupId: string;
createTaskbarTabPreview(shell: nsIDocShell, controller: nsITaskbarPreviewController): nsITaskbarTabPreview;
getTaskbarWindowPreview(shell: nsIDocShell): nsITaskbarWindowPreview;
getTaskbarProgress(shell: nsIDocShell): nsITaskbarProgress;
getOverlayIconController(shell: nsIDocShell): nsITaskbarOverlayIconController;
createJumpListBuilder(aPrivateBrowsing: boolean): nsIJumpListBuilder;
getGroupIdForWindow(aParent: mozIDOMWindow): string;
setGroupIdForWindow(aParent: mozIDOMWindow, aIdentifier: string): void;
}
// https://searchfox.org/mozilla-central/source/widget/nsIWindowsUIUtils.idl
interface nsIWindowsUIUtils extends nsISupports {
readonly systemSmallIconSize: i32;
readonly systemLargeIconSize: i32;
setWindowIcon(aWindow: mozIDOMWindowProxy, aSmallIcon: imgIContainer, aLargeIcon: imgIContainer): void;
setWindowIconFromExe(aWindow: mozIDOMWindowProxy, aExe: string, aIndex: u16): void;
setWindowIconNoData(aWindow: mozIDOMWindowProxy): void;
readonly inWin10TabletMode: boolean;
readonly inWin11TabletMode: boolean;
shareUrl(shareTitle: string, urlToShare: string): void;
}
// https://searchfox.org/mozilla-central/source/toolkit/system/windowsPackageManager/nsIWindowsPackageManager.idl
interface nsIWindowsPackageManager extends nsISupports {
findUserInstalledPackages(prefix: string[]): string[];
getInstalledDate(): u64;
campaignId(): Promise<any>;
}
// https://searchfox.org/mozilla-central/source/xpcom/ds/nsIWindowsRegKey.idl
interface nsIWindowsRegKey extends nsISupports {
readonly ROOT_KEY_CLASSES_ROOT?: 2147483648;
readonly ROOT_KEY_CURRENT_USER?: 2147483649;
readonly ROOT_KEY_LOCAL_MACHINE?: 2147483650;
readonly ACCESS_BASIC?: 131072;
readonly ACCESS_QUERY_VALUE?: 1;
readonly ACCESS_SET_VALUE?: 2;
readonly ACCESS_CREATE_SUB_KEY?: 4;
readonly ACCESS_ENUMERATE_SUB_KEYS?: 8;
readonly ACCESS_NOTIFY?: 16;
readonly ACCESS_READ?: 131097;
readonly ACCESS_WRITE?: 131078;
readonly ACCESS_ALL?: 131103;
readonly WOW64_32?: 512;
readonly WOW64_64?: 256;
readonly TYPE_NONE?: 0;
readonly TYPE_STRING?: 1;
readonly TYPE_BINARY?: 3;
readonly TYPE_INT?: 4;
readonly TYPE_INT64?: 11;
close(): void;
open(rootKey: u32, relPath: string, mode: u32): void;
create(rootKey: u32, relPath: string, mode: u32): void;
openChild(relPath: string, mode: u32): nsIWindowsRegKey;
createChild(relPath: string, mode: u32): nsIWindowsRegKey;
readonly childCount: u32;
getChildName(index: u32): string;
hasChild(name: string): boolean;
readonly valueCount: u32;
getValueName(index: u32): string;
hasValue(name: string): boolean;
removeChild(relPath: string): void;
removeValue(name: string): void;
getValueType(name: string): u32;
readStringValue(name: string): string;
readIntValue(name: string): u32;
readInt64Value(name: string): u64;
readBinaryValue(name: string): string;
writeStringValue(name: string, data: string): void;
writeIntValue(name: string, data: u32): void;
writeInt64Value(name: string, data: u64): void;
writeBinaryValue(name: string, data: string): void;
}
// https://searchfox.org/mozilla-central/source/toolkit/xre/nsIWinAppHelper.idl
interface nsIWinAppHelper extends nsISupports {
readonly userCanElevate: boolean;
}
interface nsIXPCComponents_Interfaces {
nsIInstalledApplication: nsJSIID<nsIInstalledApplication>;
nsIAboutThirdParty: nsJSIID<nsIAboutThirdParty>;
nsIAboutWindowsMessages: nsJSIID<nsIAboutWindowsMessages>;
nsIWindowsAlertNotification: nsJSIID<nsIWindowsAlertNotification, typeof nsIWindowsAlertNotification_ImagePlacement>;
nsIWindowsAlertsService: nsJSIID<nsIWindowsAlertsService>;
nsIDefaultAgent: nsJSIID<nsIDefaultAgent>;
nsIWindowsMutex: nsJSIID<nsIWindowsMutex>;
nsIWindowsMutexFactory: nsJSIID<nsIWindowsMutexFactory>;
nsIGeolocationUIUtilsWin: nsJSIID<nsIGeolocationUIUtilsWin>;
nsIWindowsShellService: nsJSIID<nsIWindowsShellService, typeof nsIWindowsShellService_LaunchOnLoginEnabledEnumerator>;
nsIWinTaskSchedulerService: nsJSIID<nsIWinTaskSchedulerService>;
nsIJumpListBuilder: nsJSIID<nsIJumpListBuilder>;
nsITaskbarOverlayIconController: nsJSIID<nsITaskbarOverlayIconController>;
nsITaskbarPreview: nsJSIID<nsITaskbarPreview>;
nsITaskbarPreviewButton: nsJSIID<nsITaskbarPreviewButton>;
nsITaskbarPreviewCallback: nsJSIID<nsITaskbarPreviewCallback>;
nsITaskbarPreviewController: nsJSIID<nsITaskbarPreviewController>;
nsITaskbarProgress: nsJSIID<nsITaskbarProgress>;
nsITaskbarTabPreview: nsJSIID<nsITaskbarTabPreview>;
nsITaskbarWindowPreview: nsJSIID<nsITaskbarWindowPreview>;
nsIWinTaskbar: nsJSIID<nsIWinTaskbar>;
nsIWindowsUIUtils: nsJSIID<nsIWindowsUIUtils>;
nsIWindowsPackageManager: nsJSIID<nsIWindowsPackageManager>;
nsIWindowsRegKey: nsJSIID<nsIWindowsRegKey>;
nsIWinAppHelper: nsJSIID<nsIWinAppHelper>;
}
} // global
// Typedefs from xpidl.
type PRTime = i64;
type nsTaskbarProgressState = i32;
// XPCOM internal utility types.
/** XPCOM inout param is passed in as a js object with a value property. */
type InOutParam<T> = { value: T };
/** XPCOM out param is written to the passed in object's value property. */
type OutParam<T> = { value?: T };
/** Enable interfaces to inherit from enums: pick variants as optional. */
type Enums<enums> = Partial<Pick<enums, keyof enums>>;
/** Callable accepts either form of a [function] interface. */
type Callable<iface> = iface | Extract<iface[keyof iface], Function>;
export {};

18143
src/zen/@types/lib.gecko.xpcom.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

49
src/zen/@types/lib.gecko.xpidl.d.ts vendored Normal file
View File

@@ -0,0 +1,49 @@
/**
* Gecko XPIDL base types.
*/
/**
* Generic IDs are created by most code which passes a nsID to js.
* https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#24
*/
interface nsID<uuid = string> {
readonly number: uuid;
}
/**
* In addition to nsID, interface IIDs support instanceof type guards,
* and expose constants defined on the class, including variants from enums.
* https://searchfox.org/mozilla-central/source/js/xpconnect/src/XPCJSID.cpp#45
*/
type nsJSIID<iface, enums = {}> = nsID &
Constants<iface> &
enums & {
new (_: never): void;
prototype: iface;
};
/** A union type of all known interface IIDs. */
type nsIID = nsIXPCComponents_Interfaces[keyof nsIXPCComponents_Interfaces];
/** A generic to resolve QueryInterface return type from a nsIID. */
type nsQIResult<iid> = iid extends { prototype: infer U } ? U : never;
/** Picks only const number properties from T. */
type Constants<T> = { [K in keyof T as IfConst<K, T[K]>]: T[K] };
/** Resolves only for keys K whose corresponding type T is a narrow number. */
type IfConst<K, T> = T extends number ? (number extends T ? never : K) : never;
/** u32 */
type nsresult = u32;
// Numeric typedefs, useful as a quick reference in method signatures.
type double = number;
type float = number;
type i16 = number;
type i32 = number;
type i64 = number;
type u16 = number;
type u32 = number;
type u64 = number;
type u8 = number;

441
src/zen/@types/zen.d.ts vendored Normal file
View File

@@ -0,0 +1,441 @@
/**
* NOTE: Do not modify this file by hand.
* Content was generated from source .webidl files.
*/
/**
* This file from https://phabricator.services.mozilla.com/D209620,
* the source of https://bugzilla.mozilla.org/show_bug.cgi?id=1895418
* Currently https://searchfox.org/mozilla-central/source/tools/%40types
* in 2024-12-28 21:05 KST
*/
/// <reference types="../lib.gecko.xpcom.d.ts" />
/// <reference types="../lib.gecko.services.d.ts" />
/// <reference types="../lib.gecko.dom.d.ts" />
/// <reference types="../lib.gecko.tweaks.d.ts" />
/// <reference types="../lib.gecko.nsresult.d.ts" />
declare var window: Window;
declare var Components: nsIXPCComponents;
declare var Cu: nsIXPCComponents_Utils;
declare var Ci: nsIXPCComponents_Interfaces;
declare var Services: JSServices;
declare var Cc: nsIXPCComponents_Classes & {
[key: string]: {
getService: (t: (typeof Ci)[keyof typeof Ci]) => any;
createInstance: (aClass: (typeof Ci)[keyof typeof Ci]) => any;
};
};
interface CSSStyleDeclaration {
display: string;
flex: string;
order: string;
flexDirection: string;
flexTemplateAreas: string;
height: string;
animation: string;
}
interface nsIXPCComponents extends nsISupports {
readonly interfaces: nsIXPCComponents_Interfaces;
readonly results: nsIXPCComponents_Results;
isSuccessCode(result: any): boolean;
readonly classes: nsIXPCComponents_Classes;
readonly stack: nsIStackFrame;
readonly manager: nsIComponentManager;
readonly utils: nsIXPCComponents_Utils;
readonly ID: nsIXPCComponents_ID;
readonly Exception: any;
readonly Constructor: (aClass: any, aIID: any, aFlags: any) => any;
returnCode: any;
}
/**
* TS-TODO - Needs typing.
*
* This file contains type stubs for loading things from Gecko. All of these
* types should be used in the correct places eventually.
*/
/**
* Namespace anything that has its types mocked out here. These definitions are
* only "good enough" to get the type checking to pass in this directory.
* Eventually some more structured solution should be found. This namespace is
* global and makes sure that all the definitions inside do not clash with
* naming.
*/
declare namespace MockedExports {
/**
* This interface teaches ChromeUtils.importESModule how to find modules.
*/
interface KnownModules {
Services: typeof import('Services');
'resource://gre/modules/AppConstants.sys.mjs': typeof import('resource://gre/modules/AppConstants.sys.mjs');
'resource:///modules/CustomizableUI.sys.mjs': typeof import('resource:///modules/CustomizableUI.sys.mjs');
'resource:///modules/CustomizableWidgets.sys.mjs': typeof import('resource:///modules/CustomizableWidgets.sys.mjs');
}
interface ChromeUtils {
/**
* This function reads the KnownModules and resolves which import to use.
* If you are getting the TS2345 error:
*
* Argument of type '"resource:///.../file.sys.mjs"' is not assignable to
* parameter of type
*
* Then add the file path to the KnownModules above.
*/
importESModule: <S extends keyof KnownModules>(module: S) => KnownModules[S];
defineESModuleGetters: (target: any, mappings: any) => void;
}
interface MessageManager {
loadFrameScript(url: string, flag: boolean): void;
sendAsyncMessage: (event: string, data: any) => void;
addMessageListener: (event: string, listener: (event: any) => void) => void;
}
// This is the thing in window.gBrowser, defined in
// https://searchfox.org/mozilla-central/source/browser/base/content/tabbrowser.js
interface Browser {
addWebTab: (url: string, options: any) => BrowserTab;
contentPrincipal: any;
selectedTab: BrowserTab;
selectedBrowser?: ChromeBrowser;
messageManager: MessageManager;
ownerDocument?: ChromeDocument;
tabs: BrowserTab[];
}
interface BrowserGroup {
readonly tabs: BrowserTab[];
readonly group?: BrowserGroup;
}
// This is a tab in a browser, defined in
// https://searchfox.org/mozilla-central/rev/6b8a3f804789fb865f42af54e9d2fef9dd3ec74d/browser/base/content/tabbrowser.js#2580
interface BrowserTab extends XULElement {
linkedBrowser: ChromeBrowser;
readonly group?: BrowserGroup;
}
interface BrowserWindow extends Window {
gBrowser: Browser;
focus(): void;
}
// The thing created in https://searchfox.org/mozilla-central/rev/6b8a3f804789fb865f42af54e9d2fef9dd3ec74d/browser/base/content/tabbrowser.js#2088
// This is linked to BrowserTab.
interface ChromeBrowser {
browsingContext?: BrowsingContext;
browserId: number;
}
interface BrowsingContext {
/**
* A unique identifier for the browser element that is hosting this
* BrowsingContext tree. Every BrowsingContext in the element's tree will
* return the same ID in all processes and it will remain stable regardless of
* process changes. When a browser element's frameloader is switched to
* another browser element this ID will remain the same but hosted under the
* under the new browser element.
* We are using this identifier for getting the active tab ID and passing to
* the profiler back-end. See `getActiveBrowserID` for the usage.
*/
browserId: number;
}
type GetPref<T> = (prefName: string, defaultValue?: T) => T;
type SetPref<T> = (prefName: string, value?: T) => T;
type nsIPrefBranch = {
clearUserPref: (prefName: string) => void;
getStringPref: GetPref<string>;
setStringPref: SetPref<string>;
getCharPref: GetPref<string>;
setCharPref: SetPref<string>;
getIntPref: GetPref<number>;
setIntPref: SetPref<number>;
getBoolPref: GetPref<boolean>;
setBoolPref: SetPref<boolean>;
addObserver: (aDomain: string, aObserver: PrefObserver, aHoldWeak?: boolean) => void;
removeObserver: (aDomain: string, aObserver: PrefObserver) => void;
};
type PrefObserverFunction = (aSubject: nsIPrefBranch, aTopic: 'nsPref:changed', aData: string) => unknown;
type PrefObserver = PrefObserverFunction | { observe: PrefObserverFunction };
interface nsIURI {}
interface SharedLibrary {
start: number;
end: number;
offset: number;
name: string;
path: string;
debugName: string;
debugPath: string;
breakpadId: string;
arch: string;
}
interface ProfileGenerationAdditionalInformation {
sharedLibraries: SharedLibrary[];
}
interface ProfileAndAdditionalInformation {
profile: ArrayBuffer;
additionalInformation?: ProfileGenerationAdditionalInformation;
}
type Services = {
env: {
set: (name: string, value: string) => void;
get: (name: string) => string;
exists: (name: string) => boolean;
};
prefs: nsIPrefBranch;
profiler: {
StartProfiler: (
entryCount: number,
interval: number,
features: string[],
filters?: string[],
activeTabId?: number,
duration?: number
) => void;
StopProfiler: () => void;
IsPaused: () => boolean;
Pause: () => void;
Resume: () => void;
IsSamplingPaused: () => boolean;
PauseSampling: () => void;
ResumeSampling: () => void;
GetFeatures: () => string[];
getProfileDataAsync: (sinceTime?: number) => Promise<object>;
getProfileDataAsArrayBuffer: (sinceTime?: number) => Promise<ArrayBuffer>;
getProfileDataAsGzippedArrayBuffer: (sinceTime?: number) => Promise<ProfileAndAdditionalInformation>;
IsActive: () => boolean;
sharedLibraries: SharedLibrary[];
};
platform: string;
obs: {
addObserver: (observer: object, type: string) => void;
removeObserver: (observer: object, type: string) => void;
};
wm: {
getMostRecentWindow: (name: string) => BrowserWindow;
getMostRecentNonPBWindow: (name: string) => BrowserWindow;
};
focus: {
activeWindow: BrowserWindow;
};
io: {
newURI(url: string): nsIURI;
};
scriptSecurityManager: any;
startup: {
quit: (optionsBitmask: number) => void;
eForceQuit: number;
eRestart: number;
};
};
const EventEmitter: {
decorate: (target: object) => void;
};
const AppConstantsSYSMJS: {
AppConstants: {
platform: string;
};
};
interface BrowsingContextStub {}
interface PrincipalStub {}
interface WebChannelTarget {
browsingContext: BrowsingContextStub;
browser: Browser;
eventTarget: null;
principal: PrincipalStub;
}
interface FaviconData {
uri: nsIURI;
dataLen: number;
data: number[];
mimeType: string;
size: number;
}
const PlaceUtilsSYSMJS: {
PlacesUtils: {
promiseFaviconData: (pageUrl: string | URL | nsIURI, preferredWidth?: number) => Promise<FaviconData>;
// TS-TODO: Add the rest.
};
};
// TS-TODO
const CustomizableUISYSMJS: any;
const CustomizableWidgetsSYSMJS: any;
const PanelMultiViewSYSMJS: any;
const LoaderESM: {
require: (path: string) => any;
};
const Services: Services;
// This class is needed by the Cc importing mechanism. e.g.
// Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
class nsIFilePicker {}
interface FilePicker {
init: (browsingContext: BrowsingContext, title: string, mode: number) => void;
open: (callback: (rv: number) => unknown) => void;
// The following are enum values.
modeGetFolder: number;
returnOK: number;
file: {
path: string;
};
}
interface Cc {
'@mozilla.org/filepicker;1': {
createInstance(instance: nsIFilePicker): FilePicker;
};
}
interface Ci {
nsIFilePicker: nsIFilePicker;
}
interface Cu {
exportFunction: (fn: Function, scope: object, options?: object) => void;
cloneInto: (value: any, scope: object, options?: object) => void;
isInAutomation: boolean;
}
interface FluentLocalization {
/**
* This function sets the attributes data-l10n-id and possibly data-l10n-args
* on the element.
*/
setAttributes(target: Element, id?: string, args?: Record<string, string>): void;
}
}
interface PathUtilsInterface {
split: (path: string) => string[];
isAbsolute: (path: string) => boolean;
}
declare module 'Services' {
export = MockedExports.Services;
}
declare module 'ChromeUtils' {
export = ChromeUtils;
}
declare var ChromeUtils: MockedExports.ChromeUtils;
declare var PathUtils: PathUtilsInterface;
// These global objects can be used directly in JSM files only.
declare var Cu: MockedExports.Cu;
declare var Cc: MockedExports.Cc;
declare var Ci: MockedExports.Ci;
declare var Services: MockedExports.Services;
/**
* This is a variant on the normal Document, as it contains chrome-specific properties.
*/
declare interface ChromeDocument extends Document {
/**
* Create a XUL element of a specific type. Right now this function
* only refines iframes, but more tags could be added.
*/
createXULElement: ((type: 'iframe') => XULIframeElement) & ((type: string) => XULElement);
/**
* This is a fluent instance connected to this document.
*/
l10n: MockedExports.FluentLocalization;
}
/**
* This is a variant on the HTMLElement, as it contains chrome-specific properties.
*/
declare interface ChromeHTMLElement extends HTMLElement {
ownerDocument: ChromeDocument;
}
declare interface XULIframeElement extends XULElement {
contentWindow: Window;
src: string;
}
// `declare interface Window` is TypeScript way to let us implicitely extend and
// augment the already existing Window interface defined in the TypeScript library.
// This makes it possible to define properties that exist in the window object
// while in a privileged context. We assume that all of the environments we run
// in this project will be pribileged, that's why we take this shortcut of
// globally extending the Window type.
// See the ChromeOnly attributes in https://searchfox.org/mozilla-central/rev/896042a1a71066254ceb5291f016ca3dbca21cb7/dom/webidl/Window.webidl#391
//
// openWebLinkIn and openTrustedLinkIn aren't in all privileged windows, but
// they're also defined in the privileged environments we're dealing with in
// this project, so they're defined here for convenience.
declare interface Window {
browsingContext: MockedExports.BrowsingContext;
openWebLinkIn: (
url: string,
where: 'current' | 'tab' | 'tabshifted' | 'window' | 'save',
options?: Partial<{
// Not all possible options are present, please add more if/when needed.
userContextId: number;
forceNonPrivate: boolean;
relatedToCurrent: boolean;
resolveOnContentBrowserCreated: (contentBrowser: MockedExports.ChromeBrowser) => unknown;
}>
) => void;
openTrustedLinkIn: (
url: string,
where: 'current' | 'tab' | 'tabshifted' | 'window' | 'save',
options?: Partial<{
// Not all possible options are present, please add more if/when needed.
userContextId: number;
forceNonPrivate: boolean;
relatedToCurrent: boolean;
resolveOnContentBrowserCreated: (contentBrowser: MockedExports.ChromeBrowser) => unknown;
}>
) => void;
}
declare class ChromeWorker extends Worker {}
declare interface MenuListElement extends XULElement {
value: string;
disabled: boolean;
}
declare interface XULCommandEvent extends Event {
target: XULElement;
}
declare interface XULElementWithCommandHandler {
addEventListener: (type: 'command', handler: (event: XULCommandEvent) => void, isCapture?: boolean) => void;
removeEventListener: (type: 'command', handler: (event: XULCommandEvent) => void, isCapture?: boolean) => void;
}
declare type nsIPrefBranch = MockedExports.nsIPrefBranch;
// chrome context-only DOM isInstance method
// XXX: This hackishly extends Function because there is no way to extend DOM constructors.
// Callers should manually narrow the type when needed.
// See also https://github.com/microsoft/TypeScript-DOM-lib-generator/issues/222
interface Function {
isInstance(obj: any): boolean;
}

View File

@@ -35,7 +35,7 @@ export var ZenCustomizableUI = new (class {
}
_addSidebarButtons(window) {
const toolbox = window.document.getElementById('navigator-toolbox');
const toolbox = window.gNavToolbox;
// Set a splitter to navigator-toolbox
const splitter = window.document.createXULElement('splitter');

View File

@@ -29,6 +29,7 @@
}
this._initSidebarScrolling();
this._hideUnusedElements();
ZenWorkspaces.init();
gZenVerticalTabsManager.init();
@@ -116,8 +117,7 @@
const kElementsToAppend = ['sidebar-splitter', 'sidebar-box'];
const browser = document.getElementById('browser');
const toolbox = document.getElementById('navigator-toolbox');
browser.prepend(toolbox);
browser.prepend(gNavToolbox);
const sidebarPanelWrapper = document.getElementById('tabbrowser-tabbox');
for (let id of kElementsToAppend) {
@@ -128,6 +128,16 @@
}
},
_hideUnusedElements() {
const kElements = ['firefox-view-button'];
for (let id of kElements) {
const elem = document.getElementById(id);
if (elem) {
elem.setAttribute('hidden', 'true');
}
}
},
_initSidebarScrolling() {
// Disable smooth scroll
const canSmoothScroll = Services.prefs.getBoolPref('zen.startup.smooth-scroll-in-tabs', false);

View File

@@ -2,6 +2,7 @@ var gZenUIManager = {
_popupTrackingElements: [],
_hoverPausedForExpand: false,
_hasLoadedDOM: false,
testingEnabled: Services.prefs.getBoolPref('zen.testing.enabled', false),
init() {
document.addEventListener('popupshowing', this.onPopupShowing.bind(this));
@@ -28,7 +29,7 @@ var gZenUIManager = {
gZenCompactModeManager.getAndApplySidebarWidth.bind(gZenCompactModeManager),
this.sidebarHeightThrottle
)
).observe(document.getElementById('navigator-toolbox'));
).observe(gNavToolbox);
SessionStore.promiseAllWindowsRestored.then(() => {
this._hasLoadedDOM = true;
@@ -70,6 +71,12 @@ var gZenUIManager = {
} catch (error) {
console.error('Error updating layout breakout:', error);
}
if (!this._preventToolbarRebuild) {
setTimeout(() => {
ZenWorkspaces.updateTabsContainers();
}, 0);
}
delete this._preventToolbarRebuild;
},
get tabsWrapper() {
@@ -175,25 +182,140 @@ var gZenUIManager = {
_clearTimeout: null,
_lastTab: null,
// Track tab switching state to prevent race conditions
_tabSwitchState: {
inProgress: false,
lastSwitchTime: 0,
debounceTime: 100, // ms to wait between tab switches
queue: [],
processingQueue: false,
},
// Queue tab switch operations to prevent race conditions
async _queueTabOperation(operation) {
// Add operation to queue
this._tabSwitchState.queue.push(operation);
// If already processing queue, just return
if (this._tabSwitchState.processingQueue) {
return;
}
// Start processing queue
this._tabSwitchState.processingQueue = true;
try {
while (this._tabSwitchState.queue.length > 0) {
// Get next operation
const nextOp = this._tabSwitchState.queue.shift();
// Check if we need to wait for debounce
const now = Date.now();
const timeSinceLastSwitch = now - this._tabSwitchState.lastSwitchTime;
if (timeSinceLastSwitch < this._tabSwitchState.debounceTime) {
await new Promise((resolve) => setTimeout(resolve, this._tabSwitchState.debounceTime - timeSinceLastSwitch));
}
// Execute operation
this._tabSwitchState.inProgress = true;
await nextOp();
this._tabSwitchState.inProgress = false;
this._tabSwitchState.lastSwitchTime = Date.now();
}
} finally {
this._tabSwitchState.processingQueue = false;
}
},
// Check if browser elements are in a valid state for tab operations
_validateBrowserState() {
// Check if browser window is still open
if (window.closed) {
return false;
}
// Check if gBrowser is available
if (!gBrowser || !gBrowser.tabContainer) {
return false;
}
// Check if URL bar is available
if (!gURLBar) {
return false;
}
return true;
},
handleNewTab(werePassedURL, searchClipboard, where) {
// Validate browser state first
if (!this._validateBrowserState()) {
console.warn('Browser state invalid for new tab operation');
return false;
}
if (this.testingEnabled) {
return false;
}
const shouldOpenURLBar = gZenVerticalTabsManager._canReplaceNewTab && !werePassedURL && !searchClipboard && where === 'tab';
if (shouldOpenURLBar) {
if (!shouldOpenURLBar) {
return false;
}
// Queue the tab operation to prevent race conditions
this._queueTabOperation(async () => {
// Clear any existing timeout
if (this._clearTimeout) {
clearTimeout(this._clearTimeout);
this._clearTimeout = null;
}
// Store the current tab
this._lastTab = gBrowser.selectedTab;
this._lastTab._visuallySelected = false;
this._prevUrlbarLabel = gURLBar._untrimmedValue;
if (!this._lastTab) {
console.warn('No selected tab found when creating new tab');
return false;
}
// Set visual state with proper validation
if (this._lastTab && !this._lastTab.closing) {
this._lastTab._visuallySelected = false;
}
// Store URL bar state
this._prevUrlbarLabel = gURLBar._untrimmedValue || '';
// Set up URL bar for new tab
gURLBar._zenHandleUrlbarClose = this.handleUrlbarClose.bind(this);
gURLBar.setAttribute('zen-newtab', true);
// Update newtab buttons
for (const button of this.newtabButtons) {
button.setAttribute('in-urlbar', true);
}
document.getElementById('Browser:OpenLocation').doCommand();
gURLBar.search(this._lastSearch);
return true;
}
return false;
// Open location command
try {
// Wait for a small delay to ensure DOM is ready
await new Promise((resolve) => setTimeout(resolve, 10));
document.getElementById('Browser:OpenLocation').doCommand();
// Wait for URL bar to be ready
await new Promise((resolve) => setTimeout(resolve, 10));
gURLBar.search(this._lastSearch || '');
} catch (e) {
console.error('Error opening location in new tab:', e);
this.handleUrlbarClose(false);
return false;
}
});
return true;
},
clearUrlbarData() {
@@ -202,30 +324,67 @@ var gZenUIManager = {
},
handleUrlbarClose(onSwitch) {
gURLBar._zenHandleUrlbarClose = null;
gURLBar.removeAttribute('zen-newtab');
this._lastTab._visuallySelected = true;
this._lastTab = null;
for (const button of this.newtabButtons) {
button.removeAttribute('in-urlbar');
// Validate browser state first
if (!this._validateBrowserState()) {
console.warn('Browser state invalid for URL bar close operation');
return;
}
if (onSwitch) {
this.clearUrlbarData();
} else {
this._lastSearch = gURLBar._untrimmedValue;
this._clearTimeout = setTimeout(() => {
this.clearUrlbarData();
}, this.urlbarWaitToClear);
}
gURLBar.setURI(this._prevUrlbarLabel, onSwitch, false, false, !onSwitch);
gURLBar.handleRevert();
if (gURLBar.focused) {
gURLBar.view.close({ elementPicked: onSwitch });
gURLBar.updateTextOverflow();
if (gBrowser.selectedTab.linkedBrowser && onSwitch) {
gURLBar.getBrowserState(gBrowser.selectedTab.linkedBrowser).urlbarFocused = false;
// Queue the operation to prevent race conditions
this._queueTabOperation(async () => {
// Reset URL bar state
if (gURLBar._zenHandleUrlbarClose) {
gURLBar._zenHandleUrlbarClose = null;
}
}
gURLBar.removeAttribute('zen-newtab');
// Safely restore tab visual state with proper validation
if (this._lastTab && !this._lastTab.closing && this._lastTab.ownerGlobal && !this._lastTab.ownerGlobal.closed) {
this._lastTab._visuallySelected = true;
this._lastTab = null;
}
// Reset newtab buttons
for (const button of this.newtabButtons) {
button.removeAttribute('in-urlbar');
}
// Handle search data
if (onSwitch) {
this.clearUrlbarData();
} else {
this._lastSearch = gURLBar._untrimmedValue || '';
if (this._clearTimeout) {
clearTimeout(this._clearTimeout);
}
this._clearTimeout = setTimeout(() => {
this.clearUrlbarData();
}, this.urlbarWaitToClear);
}
// Safely restore URL bar state with proper validation
if (this._prevUrlbarLabel) {
gURLBar.setURI(this._prevUrlbarLabel, onSwitch, false, false, !onSwitch);
}
gURLBar.handleRevert();
if (gURLBar.focused) {
gURLBar.view.close({ elementPicked: onSwitch });
gURLBar.updateTextOverflow();
// Ensure tab and browser are valid before updating state
const selectedTab = gBrowser.selectedTab;
if (selectedTab && selectedTab.linkedBrowser && !selectedTab.closing && onSwitch) {
const browserState = gURLBar.getBrowserState(selectedTab.linkedBrowser);
if (browserState) {
browserState.urlbarFocused = false;
}
}
}
});
},
urlbarTrim(aURL) {
@@ -322,11 +481,7 @@ var gZenVerticalTabsManager = {
},
get navigatorToolbox() {
if (this._navigatorToolbox) {
return this._navigatorToolbox;
}
this._navigatorToolbox = document.getElementById('navigator-toolbox');
return this._navigatorToolbox;
return gNavToolbox;
},
initRightSideOrderContextMenu() {
@@ -480,7 +635,7 @@ var gZenVerticalTabsManager = {
},
_updateEvent({ forCustomizableMode = false, dontRebuildAreas = false } = {}) {
if (this._isUpdating) {
if (this._isUpdating || gZenUIManager.testingEnabled) {
return;
}
this._isUpdating = true;
@@ -678,7 +833,7 @@ var gZenVerticalTabsManager = {
_updateMaxWidth() {
const maxWidth = Services.prefs.getIntPref('zen.view.sidebar-expanded.max-width');
const toolbox = document.getElementById('navigator-toolbox');
const toolbox = gNavToolbox;
if (!this._prefsCompactMode) {
toolbox.style.maxWidth = `${maxWidth}px`;
} else {

View File

@@ -6,7 +6,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
class ZenUIMigration {
PREF_NAME = 'zen.migration.version';
MIGRATION_VERSION = 1;
MIGRATION_VERSION = 2;
init(isNewProfile, win) {
if (!isNewProfile) {
@@ -27,13 +27,16 @@ class ZenUIMigration {
if (this._migrationVersion < 1) {
this._migrateV1(win);
}
if (this._migrationVersion < 2) {
this._migrateV2(win);
}
}
clearVariables() {
this._migrationVersion = this.MIGRATION_VERSION;
}
async _migrateV1(win) {
_migrateV1(win) {
// Introduction of the new URL bar, show a message to the user
const notification = win.gNotificationBox.appendNotification(
'zen-new-urlbar-notification',
@@ -57,6 +60,13 @@ class ZenUIMigration {
]
);
}
_migrateV2(win) {
if (Services.prefs.getBoolPref('zen.widget.windows.acrylic', false)) {
Services.prefs.setIntPref('widget.windows.mica.toplevel-backdrop', 2);
Services.prefs.clearUserPref('zen.widget.windows.acrylic');
}
}
}
export var gZenUIMigration = new ZenUIMigration();

View File

@@ -104,7 +104,7 @@
}
#nav-bar {
/* For some reason, firefox adds a really small border to the top of the nav-bar */
/* For some reason, Firefox adds a really small border to the top of the nav-bar */
border-top: none !important;
}
@@ -230,3 +230,22 @@
opacity: 1;
}
}
.zen-split-view-splitter[orient='horizontal'] {
&::before {
height: 2px;
width: 50px;
background: var(--button-primary-bgcolor);
border-radius: 2px;
content: '';
position: absolute;
top: 40%;
left: 50%;
opacity: 0;
transition: opacity 0.1s ease-in-out;
pointer-events: none;
}
&:hover::before {
opacity: 1;
}
}

View File

@@ -74,7 +74,7 @@ panel {
padding-inline-start: calc(16px + var(--uc-arrowpanel-menuicon-margin-inline));
}
/* firefox profile avatar in appmenu */
/* Firefox profile avatar in appmenu */
#appMenu-fxa-label2::before {
content: '';
display: -moz-box;

View File

@@ -163,7 +163,7 @@
@media (-moz-windows-mica) or (-moz-platform: macos) {
background: transparent;
--zen-themed-toolbar-bg-transparent: transparent;
@media -moz-pref('zen.widget.windows.acrylic') {
@media -moz-pref('widget.windows.mica.toplevel-backdrop', 2) {
--zen-themed-toolbar-bg-transparent: color-mix(in srgb, var(--zen-themed-toolbar-bg) 35%, transparent 65%);
}
}

View File

@@ -17,6 +17,15 @@ document.addEventListener(
case 'cmd_zenCompactModeShowSidebar':
gZenCompactModeManager.toggleSidebar();
break;
case 'cmd_zenCompactModeHideSidebar':
gZenCompactModeManager.hideSidebar();
break;
case 'cmd_zenCompactModeHideToolbar':
gZenCompactModeManager.hideToolbar();
break;
case 'cmd_zenCompactModeHideBoth':
gZenCompactModeManager.hideBoth();
break;
case 'cmd_zenCompactModeShowToolbar':
gZenCompactModeManager.toggleToolbar();
break;
@@ -38,6 +47,9 @@ document.addEventListener(
case 'cmd_zenSplitViewUnsplit':
gZenViewSplitter.toggleShortcut('unsplit');
break;
case 'cmd_zenSplitViewContextMenu':
gZenViewSplitter.contextSplitTabs();
break;
case 'cmd_zenCopyCurrentURLMarkdown':
gZenCommonActions.copyCurrentURLAsMarkdownToClipboard();
break;

View File

@@ -19,7 +19,7 @@ const kZenMaxElementSeparation = 12;
* because we need a way to apply the accent color without having to worry about
* shadow roots not inheriting the accent color.
*
* note: It must be a firefox builtin page with access to the browser's configuration
* note: It must be a Firefox builtin page with access to the browser's configuration
* and services.
*/
var ZenThemeModifier = {

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