From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../components/sessionstore/test/browser_464199.js | 176 +++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 browser/components/sessionstore/test/browser_464199.js (limited to 'browser/components/sessionstore/test/browser_464199.js') diff --git a/browser/components/sessionstore/test/browser_464199.js b/browser/components/sessionstore/test/browser_464199.js new file mode 100644 index 0000000000..4ac8fba1a5 --- /dev/null +++ b/browser/components/sessionstore/test/browser_464199.js @@ -0,0 +1,176 @@ +/* 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/. */ + +let { ForgetAboutSite } = ChromeUtils.importESModule( + "resource://gre/modules/ForgetAboutSite.sys.mjs" +); + +function promiseClearHistory() { + return new Promise(resolve => { + let observer = { + observe(aSubject, aTopic, aData) { + Services.obs.removeObserver( + this, + "browser:purge-session-history-for-domain" + ); + resolve(); + }, + }; + Services.obs.addObserver( + observer, + "browser:purge-session-history-for-domain" + ); + }); +} + +add_task(async function () { + /** Test for Bug 464199 **/ + + const REMEMBER = Date.now(), + FORGET = Math.random(); + let test_state = { + windows: [ + { + tabs: [{ entries: [] }], + _closedTabs: [ + { + state: { entries: [{ url: "http://www.example.net/" }] }, + title: FORGET, + }, + { + state: { entries: [{ url: "http://www.example.org/" }] }, + title: REMEMBER, + }, + { + state: { + entries: [ + { url: "http://www.example.net/" }, + { url: "http://www.example.org/" }, + ], + }, + title: FORGET, + }, + { + state: { entries: [{ url: "http://example.net/" }] }, + title: FORGET, + }, + { + state: { entries: [{ url: "http://sub.example.net/" }] }, + title: FORGET, + }, + { + state: { entries: [{ url: "http://www.example.net:8080/" }] }, + title: FORGET, + }, + { state: { entries: [{ url: "about:license" }] }, title: REMEMBER }, + { + state: { + entries: [ + { + url: "http://www.example.org/frameset", + children: [ + { url: "http://www.example.org/frame" }, + { url: "http://www.example.org:8080/frame2" }, + ], + }, + ], + }, + title: REMEMBER, + }, + { + state: { + entries: [ + { + url: "http://www.example.org/frameset", + children: [ + { url: "http://www.example.org/frame" }, + { url: "http://www.example.net/frame" }, + ], + }, + ], + }, + title: FORGET, + }, + { + state: { + entries: [ + { + url: "http://www.example.org/form", + formdata: { id: { url: "http://www.example.net/" } }, + }, + ], + }, + title: REMEMBER, + }, + { + state: { + entries: [{ url: "http://www.example.org/form" }], + extData: { setCustomTabValue: "http://example.net:80" }, + }, + title: REMEMBER, + }, + ], + }, + ], + }; + let remember_count = 5; + + function countByTitle(aClosedTabList, aTitle) { + return aClosedTabList.filter(aData => aData.title == aTitle).length; + } + + // open a window and add the above closed tab list + let newWin = openDialog(location, "", "chrome,all,dialog=no"); + await promiseWindowLoaded(newWin); + Services.prefs.setIntPref( + "browser.sessionstore.max_tabs_undo", + test_state.windows[0]._closedTabs.length + ); + + let restoring = promiseWindowRestoring(newWin); + let restored = promiseWindowRestored(newWin); + ss.setWindowState(newWin, JSON.stringify(test_state), true); + await restoring; + await restored; + + let closedTabs = ss.getClosedTabDataForWindow(newWin); + is( + closedTabs.length, + test_state.windows[0]._closedTabs.length, + "Closed tab list has the expected length" + ); + is( + countByTitle(closedTabs, FORGET), + test_state.windows[0]._closedTabs.length - remember_count, + "The correct amout of tabs are to be forgotten" + ); + is( + countByTitle(closedTabs, REMEMBER), + remember_count, + "Everything is set up." + ); + + let promise = promiseClearHistory(); + await ForgetAboutSite.removeDataFromDomain("example.net"); + await promise; + closedTabs = ss.getClosedTabDataForWindow(newWin); + is( + closedTabs.length, + remember_count, + "The correct amout of tabs was removed" + ); + is( + countByTitle(closedTabs, FORGET), + 0, + "All tabs to be forgotten were indeed removed" + ); + is( + countByTitle(closedTabs, REMEMBER), + remember_count, + "... and tabs to be remembered weren't." + ); + // clean up + Services.prefs.clearUserPref("browser.sessionstore.max_tabs_undo"); + await BrowserTestUtils.closeWindow(newWin); +}); -- cgit v1.2.3