gh-14841: Sync upstream Firefox to version 153.0.3 (gh-14842)

This commit is contained in:
mr. m
2026-08-05 02:44:01 +02:00
committed by GitHub
parent b3bd688ca4
commit 871bdde4cc
8 changed files with 123 additions and 53 deletions

View File

@@ -34,8 +34,8 @@ Zen is a firefox-based browser with the aim of pushing your productivity to a ne
### Firefox Versions
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `153.0.1`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 153.0.1`!
- [`Release`](https://zen-browser.app/download) - Is currently built using Firefox version `153.0.3`! 🚀
- [`Twilight`](https://zen-browser.app/download?twilight) - Is currently built using Firefox version `RC 153.0.3`!
### Contributing

View File

@@ -1 +1 @@
30959a45eaaf0bc499f3054793c76c6d7f0c8bc2
8a0a534248f80d8c53a8997f24683521c3a50ebc

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1db40aecce 100644
index 11191a82a0f0dc6eee60f9de52a63bc6085c3981..f995c3b297c53aa6ee2219bfc09515ee4aa3be28 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -129,6 +129,9 @@ const TAB_EVENTS = [
@@ -12,7 +12,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
];
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
@@ -199,6 +202,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
@@ -201,6 +204,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
TabStateCache: "resource:///modules/sessionstore/TabStateCache.sys.mjs",
TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.sys.mjs",
setTimeout: "resource://gre/modules/Timer.sys.mjs",
@@ -21,7 +21,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
});
ChromeUtils.defineLazyGetter(lazy, "blankURI", () => {
@@ -1287,10 +1292,7 @@ var SessionStoreInternal = {
@@ -1300,10 +1305,7 @@ var SessionStoreInternal = {
*/
get willAutoRestore() {
return (
@@ -33,7 +33,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
);
},
@@ -1965,6 +1967,9 @@ var SessionStoreInternal = {
@@ -1990,6 +1992,9 @@ var SessionStoreInternal = {
case "TabPinned":
case "TabUnpinned":
case "SwapDocShells":
@@ -43,7 +43,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
this.saveStateDelayed(win);
break;
case "TabGroupCreate":
@@ -2074,6 +2079,10 @@ var SessionStoreInternal = {
@@ -2099,6 +2104,10 @@ var SessionStoreInternal = {
this._windows[aWindow.__SSi].isTaskbarTab = true;
}
@@ -54,7 +54,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
if (lazy.AIWindow.isAIWindowActiveAndEnabled(aWindow)) {
this._windows[aWindow.__SSi].isAIWindow = true;
}
@@ -2110,7 +2119,7 @@ var SessionStoreInternal = {
@@ -2135,7 +2144,7 @@ var SessionStoreInternal = {
let isTaskbarTab = this._windows[aWindow.__SSi].isTaskbarTab;
// A regular window is not a private window, taskbar tab window, or popup window
let isRegularWindow =
@@ -63,7 +63,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// perform additional initialization when the first window is loading
if (lazy.RunState.isStopped) {
@@ -2122,7 +2131,7 @@ var SessionStoreInternal = {
@@ -2147,7 +2156,7 @@ var SessionStoreInternal = {
// to disk to NOW() to enforce a full interval before the next write.
lazy.SessionSaver.updateLastSaveTime();
@@ -72,7 +72,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
this._log.debug(
"initializeWindow, the window is private or a web app. Saving SessionStartup.state for possibly restoring later"
);
@@ -2164,6 +2173,7 @@ var SessionStoreInternal = {
@@ -2191,6 +2200,7 @@ var SessionStoreInternal = {
null,
"sessionstore-one-or-no-tab-restored"
);
@@ -80,7 +80,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
this._deferredAllWindowsRestored.resolve();
}
// this window was opened by _openWindowWithState
@@ -2213,7 +2223,6 @@ var SessionStoreInternal = {
@@ -2240,7 +2250,6 @@ var SessionStoreInternal = {
if (closedWindowState) {
let newWindowState;
if (
@@ -88,7 +88,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
!lazy.SessionStartup.willRestore()
) {
// We want to split the window up into pinned tabs and unpinned tabs.
@@ -2249,6 +2258,7 @@ var SessionStoreInternal = {
@@ -2276,6 +2285,7 @@ var SessionStoreInternal = {
}
if (newWindowState) {
@@ -96,23 +96,17 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// Ensure that the window state isn't hidden
this._restoreCount = 1;
let state = { windows: [newWindowState] };
@@ -2277,6 +2287,15 @@ var SessionStoreInternal = {
@@ -2312,6 +2322,9 @@ var SessionStoreInternal = {
});
this._shouldRestoreLastSession = false;
}
+ else if (!aInitialState && isRegularWindow) {
+ let windowPromises = [];
+ for (let window of this._browserWindows) {
+ windowPromises.push(lazy.TabStateFlusher.flushWindow(window));
+ }
+ Promise.all(windowPromises).finally(() => {
+ lazy.ZenSessionStore.restoreNewWindow(aWindow, this);
+ });
+ lazy.ZenSessionStore.restoreNewWindow(aWindow, this);
+ }
if (this._restoreLastWindow && aWindow.toolbar.visible) {
// always reset (if not a popup window)
@@ -2427,7 +2446,7 @@ var SessionStoreInternal = {
@@ -2462,7 +2475,7 @@ var SessionStoreInternal = {
var tabbrowser = aWindow.gBrowser;
@@ -121,7 +115,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
TAB_EVENTS.forEach(function (aEvent) {
tabbrowser.tabContainer.removeEventListener(aEvent, this, true);
@@ -2478,7 +2497,7 @@ var SessionStoreInternal = {
@@ -2513,7 +2526,7 @@ var SessionStoreInternal = {
let isLastRegularWindow =
Object.values(this._windows).filter(
@@ -130,7 +124,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
).length == 1;
this._log.debug(
`onClose, closing window isLastRegularWindow? ${isLastRegularWindow}`
@@ -2535,8 +2554,8 @@ var SessionStoreInternal = {
@@ -2570,8 +2583,8 @@ var SessionStoreInternal = {
// 2) Flush the window.
// 3) When the flush is complete, revisit our decision to store the window
// in _closedWindows, and add/remove as necessary.
@@ -141,7 +135,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
}
completionPromise = lazy.TabStateFlusher.flushWindow(aWindow).then(() => {
@@ -2556,8 +2575,9 @@ var SessionStoreInternal = {
@@ -2591,8 +2604,9 @@ var SessionStoreInternal = {
// Save non-private windows if they have at
// least one saveable tab or are the last window.
@@ -153,7 +147,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
if (!isLastWindow && winData.closedId > -1) {
this._addClosedAction(
@@ -2633,7 +2653,7 @@ var SessionStoreInternal = {
@@ -2668,7 +2682,7 @@ var SessionStoreInternal = {
* to call this method again asynchronously (for example, after
* a window flush).
*/
@@ -162,7 +156,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// Make sure SessionStore is still running, and make sure that we
// haven't chosen to forget this window.
if (
@@ -2650,6 +2670,7 @@ var SessionStoreInternal = {
@@ -2685,6 +2699,7 @@ var SessionStoreInternal = {
// _closedWindows from a previous call to this function.
let winIndex = this._closedWindows.indexOf(winData);
let alreadyStored = winIndex != -1;
@@ -170,7 +164,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
let shouldStore = hasSaveableTabs || isLastWindow;
@@ -3467,7 +3488,7 @@ var SessionStoreInternal = {
@@ -3507,7 +3522,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -179,7 +173,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
return;
}
@@ -4206,6 +4227,12 @@ var SessionStoreInternal = {
@@ -4246,6 +4261,12 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -192,7 +186,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4642,6 +4669,8 @@ var SessionStoreInternal = {
@@ -4679,6 +4700,8 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -201,7 +195,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5146,9 +5175,10 @@ var SessionStoreInternal = {
@@ -5176,9 +5199,10 @@ var SessionStoreInternal = {
if (activePageData.title && activePageData.title != activePageData.url) {
win.gBrowser.setInitialTabTitle(tab, activePageData.title, {
isContentTitle: true,
@@ -213,7 +207,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
}
}
@@ -5513,7 +5543,7 @@ var SessionStoreInternal = {
@@ -5543,7 +5567,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -222,7 +216,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
removableTabs.push(tab);
}
}
@@ -5626,7 +5656,7 @@ var SessionStoreInternal = {
@@ -5656,7 +5680,7 @@ var SessionStoreInternal = {
// collect the data for all windows
for (ix in this._windows) {
@@ -231,7 +225,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// window data is still in _statesToRestore
continue;
}
@@ -5770,11 +5800,12 @@ var SessionStoreInternal = {
@@ -5800,11 +5824,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -245,7 +239,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5785,6 +5816,9 @@ var SessionStoreInternal = {
@@ -5815,6 +5840,9 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -255,7 +249,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5801,7 +5835,7 @@ var SessionStoreInternal = {
@@ -5831,7 +5859,7 @@ var SessionStoreInternal = {
// a window is closed, point to the first item in the tab strip instead (it will never be the Firefox View tab,
// since it's only inserted into the tab strip after it's selected).
if (aWindow.FirefoxViewHandler.tab?.selected) {
@@ -264,7 +258,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -6003,8 +6037,8 @@ var SessionStoreInternal = {
@@ -6033,8 +6061,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -275,7 +269,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -6026,6 +6060,7 @@ var SessionStoreInternal = {
@@ -6056,6 +6084,7 @@ var SessionStoreInternal = {
if (overwriteTabs) {
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
if (!tabbrowser.tabs[i].selected) {
@@ -283,7 +277,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
tabbrowser.removeTab(tabbrowser.tabs[i]);
}
}
@@ -6060,6 +6095,12 @@ var SessionStoreInternal = {
@@ -6090,6 +6119,12 @@ var SessionStoreInternal = {
savedTabGroup => !openTabGroupIdsInWindow.has(savedTabGroup.id)
);
}
@@ -296,7 +290,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// Move the originally open tabs to the end.
if (initialTabs) {
@@ -6626,6 +6667,25 @@ var SessionStoreInternal = {
@@ -6656,6 +6691,25 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -322,7 +316,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
if (tabData.pinned) {
tabbrowser.pinTab(tab);
@@ -6793,6 +6853,9 @@ var SessionStoreInternal = {
@@ -6838,6 +6892,9 @@ var SessionStoreInternal = {
aWindow.gURLBar.readOnly = false;
}
}
@@ -332,7 +326,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
let promiseParts = Promise.withResolvers();
aWindow.setTimeout(() => {
@@ -7588,7 +7651,7 @@ var SessionStoreInternal = {
@@ -7633,7 +7690,7 @@ var SessionStoreInternal = {
let groupsToSave = new Map();
for (let tIndex = 0; tIndex < window.tabs.length; ) {
@@ -341,7 +335,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// Adjust window.selected
if (tIndex + 1 < window.selected) {
window.selected -= 1;
@@ -7603,7 +7666,7 @@ var SessionStoreInternal = {
@@ -7648,7 +7705,7 @@ var SessionStoreInternal = {
);
// We don't want to increment tIndex here.
continue;
@@ -350,7 +344,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
// Convert any open groups into saved groups.
let groupStateToSave = window.groups.find(
groupState => groupState.id == window.tabs[tIndex].groupId
@@ -8062,7 +8125,6 @@ var SessionStoreInternal = {
@@ -8193,7 +8250,6 @@ var SessionStoreInternal = {
timer.initWithCallback(
function () {
if (beats <= 0) {
@@ -358,7 +352,7 @@ index 183543c5f29ff4c879d3058e4c09faf376a69cb7..ab482c32cc697ccef82bf0aeaa0e3a1d
Glean.sessionRestore.shutdownFlushAllOutcomes.timed_out.add(1);
deferred.resolve();
}
@@ -8540,6 +8602,7 @@ var SessionStoreInternal = {
@@ -8671,6 +8727,7 @@ var SessionStoreInternal = {
if (
!savedTabGroupState.tabs.length ||
this.getSavedTabGroup(savedTabGroupState.id)

View File

@@ -7,7 +7,7 @@ import checkForZenUpdates, {
} from "chrome://browser/content/ZenUpdates.mjs";
class ZenStartup {
#watermarkIgnoreElements = ["zen-toast-container"];
#watermarkIgnoreElements = ["zen-toast-container", "zen-browser-background"];
#hasInitializedLayout = false;
isReady = false;
@@ -53,12 +53,11 @@ class ZenStartup {
// overlap and interaction issues with vertical tabs
document.getElementById("browser").prepend(deckTemplate);
gZenWorkspaces.init();
setTimeout(() => {
gZenWorkspaces.init().then(() => {
gZenUIManager.init();
this.#initUIComponents();
this.#checkForWelcomePage();
}, 0);
});
} catch (e) {
console.error("ZenThemeModifier: Error initializing browser layout", e);
}
@@ -119,7 +118,9 @@ class ZenStartup {
document.documentElement.removeAttribute("zen-before-loaded");
return;
}
for (let elem of document.querySelectorAll("#browser > *, #urlbar")) {
for (let elem of document.querySelectorAll(
`#browser > *:not(${this.#watermarkIgnoreElements.map(id => "#" + id).join(", ")}), #urlbar`
)) {
elem.style.opacity = 0;
}
}

View File

@@ -27,7 +27,7 @@ body,
}
}
:root[zen-before-loaded="true"] #browser > *:not(#zen-toast-container),
:root[zen-before-loaded="true"] #browser > *:not(#zen-toast-container, #zen-browser-background),
:root[zen-before-loaded="true"] #urlbar {
opacity: 0 !important;
}

View File

@@ -14,6 +14,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs",
SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs",
TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.sys.mjs",
gWindowSyncEnabled: "resource:///modules/zen/ZenWindowSync.sys.mjs",
gSyncOnlyPinnedTabs: "resource:///modules/zen/ZenWindowSync.sys.mjs",
DeferredTask: "resource://gre/modules/DeferredTask.sys.mjs",
@@ -914,6 +915,79 @@ export class nsZenSessionManager {
aWindow.__isNewZenWindow = true;
SessionStoreInternal._deferredInitialState = newState;
SessionStoreInternal.initializeWindow(aWindow, newState);
this.#refreshRestoredTabsState(aWindow, SessionStoreInternal).catch(e =>
console.error("ZenSessionManager: Failed to refresh restored tabs", e)
);
}
/**
* The state we clone into a new window comes from the parent process
* cache, which may lag behind the content processes (e.g. for a tab that
* was opened or navigated right before opening the new window). After the
* new window has been restored, flush the previous window and update each
* counterpart tab that hasn't started loading yet.
*
* @param {Window} aWindow
* The newly restored window.
* @param {object} SessionStoreInternal
* The SessionStore module instance.
*/
async #refreshRestoredTabsState(aWindow, SessionStoreInternal) {
// Wait until the tabs have actually been created in the new window.
await aWindow.gZenWorkspaces.promiseInitialized;
if (aWindow.closed) {
return;
}
// Only refresh from the most recently used window: any other window
// already reported its state when it lost focus, so the cloned data
// is up to date for it.
let previousWindow = null;
for (const win of SessionStoreInternal._browserWindows) {
if (win !== aWindow && !win.closed) {
previousWindow = win;
break;
}
}
if (!previousWindow) {
return;
}
for (const tab of previousWindow.gZenWorkspaces.allStoredTabs) {
const syncId = tab.getAttribute("id");
// A tab that has never loaded has no state in the content process,
// so there's nothing newer to flush out of it.
if (!syncId || tab.closing || !tab.linkedPanel) {
continue;
}
const targetTab = aWindow.document.getElementById(syncId);
// Only refresh a tab that hasn't started loading: setting the state
// of a loaded tab would reload it.
if (
!aWindow.gBrowser.isTab(targetTab) ||
targetTab.linkedPanel ||
targetTab.closing
) {
continue;
}
lazy.TabStateFlusher.flush(tab.linkedBrowser)
.then(() => {
// Things may have changed while the flush was in flight.
if (
aWindow.closed ||
tab.closing ||
targetTab.linkedPanel ||
targetTab.closing
) {
return;
}
lazy.SessionStore.setTabState(
targetTab,
lazy.SessionStore.getTabState(tab)
);
})
.catch(e =>
console.error("ZenSessionManager: Failed to refresh tab state", e)
);
}
}
/**

View File

@@ -779,6 +779,7 @@ class nsZenWorkspaces {
restoreWorkspacesFromSessionStore(aWinData = {}) {
if (this.#hasInitialized || !this.workspaceEnabled) {
this._resolveInitialized?.();
return Promise.resolve();
}
const spacesFromStore = aWinData.spaces || [];

View File

@@ -5,8 +5,8 @@
"binaryName": "zen",
"version": {
"product": "firefox",
"version": "153.0.1",
"candidate": "153.0.1",
"version": "153.0.3",
"candidate": "153.0.3",
"candidateBuild": 1
},
"buildOptions": {