fix: Fixed not flushing the browsers correctly on quit grant and pinned icons not saving when the page didn't load, b=no-bug, c=common, kbs

This commit is contained in:
mr. m
2026-01-22 16:43:11 +01:00
parent acd75771e1
commit f476a62144
6 changed files with 70 additions and 26 deletions

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/sessionstore/SessionStore.sys.mjs b/browser/components/sessionstore/SessionStore.sys.mjs
index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5549dd4dd 100644
index 2a055f0c5f34f0a2667f659185120c07d38f4e41..2f63071f78782dbc30bde25b3bcaa96faedf6f0b 100644
--- a/browser/components/sessionstore/SessionStore.sys.mjs
+++ b/browser/components/sessionstore/SessionStore.sys.mjs
@@ -127,6 +127,9 @@ const TAB_EVENTS = [
@@ -136,28 +136,24 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
if (!isLastWindow && winData.closedId > -1) {
this._addClosedAction(
@@ -2589,7 +2608,10 @@ var SessionStoreInternal = {
@@ -2589,7 +2608,7 @@ var SessionStoreInternal = {
* to call this method again asynchronously (for example, after
* a window flush).
*/
- maybeSaveClosedWindow(winData, isLastWindow) {
+ maybeSaveClosedWindow(winData, isLastWindow, isLastRegularWindow = false) {
+ if (this._saveableClosedWindowData.has(winData)) {
+ lazy.ZenSessionStore.maybeSaveClosedWindow(winData, isLastRegularWindow);
+ }
// Make sure SessionStore is still running, and make sure that we
// haven't chosen to forget this window.
if (
@@ -2608,6 +2630,8 @@ var SessionStoreInternal = {
@@ -2606,6 +2625,7 @@ var SessionStoreInternal = {
// _closedWindows from a previous call to this function.
let winIndex = this._closedWindows.indexOf(winData);
let alreadyStored = winIndex != -1;
+ lazy.ZenSessionStore.maybeSaveClosedWindow(winData, isLastRegularWindow);
// If sidebar command is truthy, i.e. sidebar is open, store sidebar settings
let shouldStore = hasSaveableTabs || isLastWindow;
+ // TODO: Do we want to store closed Zen windows? All of them are synced anyways
+ shouldStore = false;
if (shouldStore && !alreadyStored) {
let index = this._closedWindows.findIndex(win => {
@@ -3408,7 +3432,7 @@ var SessionStoreInternal = {
@@ -3408,7 +3428,7 @@ var SessionStoreInternal = {
if (!isPrivateWindow && tabState.isPrivate) {
return;
}
@@ -166,7 +162,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
return;
}
@@ -4129,6 +4153,12 @@ var SessionStoreInternal = {
@@ -4129,6 +4149,12 @@ var SessionStoreInternal = {
Math.min(tabState.index, tabState.entries.length)
);
tabState.pinned = false;
@@ -179,7 +175,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
if (inBackground === false) {
aWindow.gBrowser.selectedTab = newTab;
@@ -4565,6 +4595,8 @@ var SessionStoreInternal = {
@@ -4565,6 +4591,8 @@ var SessionStoreInternal = {
// Append the tab if we're opening into a different window,
tabIndex: aSource == aTargetWindow ? pos : Infinity,
pinned: state.pinned,
@@ -188,7 +184,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
userContextId: state.userContextId,
skipLoad: true,
preferredRemoteType,
@@ -5414,7 +5446,7 @@ var SessionStoreInternal = {
@@ -5414,7 +5442,7 @@ var SessionStoreInternal = {
for (let i = tabbrowser.pinnedTabCount; i < tabbrowser.tabs.length; i++) {
let tab = tabbrowser.tabs[i];
@@ -197,7 +193,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
removableTabs.push(tab);
}
}
@@ -5525,7 +5557,7 @@ var SessionStoreInternal = {
@@ -5525,7 +5553,7 @@ var SessionStoreInternal = {
// collect the data for all windows
for (ix in this._windows) {
@@ -206,7 +202,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
// window data is still in _statesToRestore
continue;
}
@@ -5668,11 +5700,12 @@ var SessionStoreInternal = {
@@ -5668,11 +5696,12 @@ var SessionStoreInternal = {
}
let tabbrowser = aWindow.gBrowser;
@@ -220,7 +216,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
// update the internal state data for this window
for (let tab of tabs) {
if (tab == aWindow.FirefoxViewHandler.tab) {
@@ -5683,6 +5716,9 @@ var SessionStoreInternal = {
@@ -5683,6 +5712,9 @@ var SessionStoreInternal = {
tabsData.push(tabData);
}
@@ -230,7 +226,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
// update tab group state for this window
winData.groups = [];
for (let tabGroup of aWindow.gBrowser.tabGroups) {
@@ -5695,7 +5731,7 @@ var SessionStoreInternal = {
@@ -5695,7 +5727,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) {
@@ -239,7 +235,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
winData.title = tabbrowser.tabs[0].label;
}
winData.selected = selectedIndex;
@@ -5810,8 +5846,8 @@ var SessionStoreInternal = {
@@ -5810,8 +5842,8 @@ var SessionStoreInternal = {
// selectTab represents.
let selectTab = 0;
if (overwriteTabs) {
@@ -250,7 +246,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
selectTab = Math.min(selectTab, winData.tabs.length);
}
@@ -5833,6 +5869,7 @@ var SessionStoreInternal = {
@@ -5833,6 +5865,7 @@ var SessionStoreInternal = {
if (overwriteTabs) {
for (let i = tabbrowser.browsers.length - 1; i >= 0; i--) {
if (!tabbrowser.tabs[i].selected) {
@@ -258,7 +254,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
tabbrowser.removeTab(tabbrowser.tabs[i]);
}
}
@@ -5866,6 +5903,12 @@ var SessionStoreInternal = {
@@ -5866,6 +5899,12 @@ var SessionStoreInternal = {
savedTabGroup => !openTabGroupIdsInWindow.has(savedTabGroup.id)
);
}
@@ -271,7 +267,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
// Move the originally open tabs to the end.
if (initialTabs) {
@@ -6419,6 +6462,25 @@ var SessionStoreInternal = {
@@ -6419,6 +6458,25 @@ var SessionStoreInternal = {
// Most of tabData has been restored, now continue with restoring
// attributes that may trigger external events.
@@ -297,7 +293,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
if (tabData.pinned) {
tabbrowser.pinTab(tab);
@@ -6567,6 +6629,9 @@ var SessionStoreInternal = {
@@ -6567,6 +6625,9 @@ var SessionStoreInternal = {
aWindow.gURLBar.readOnly = false;
}
}
@@ -307,7 +303,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
let promiseParts = Promise.withResolvers();
aWindow.setTimeout(() => {
@@ -7343,7 +7408,7 @@ var SessionStoreInternal = {
@@ -7343,7 +7404,7 @@ var SessionStoreInternal = {
let groupsToSave = new Map();
for (let tIndex = 0; tIndex < window.tabs.length; ) {
@@ -316,7 +312,7 @@ index 2a055f0c5f34f0a2667f659185120c07d38f4e41..6f956ceeadd17afa0bc55355cd97e4e5
// Adjust window.selected
if (tIndex + 1 < window.selected) {
window.selected -= 1;
@@ -7358,7 +7423,7 @@ var SessionStoreInternal = {
@@ -7358,7 +7419,7 @@ var SessionStoreInternal = {
);
// We don't want to increment tIndex here.
continue;