From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- ...er_closed_objects_changed_notifications_tabs.js | 136 +++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js (limited to 'browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js') diff --git a/browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js b/browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js new file mode 100644 index 0000000000..7ad3955034 --- /dev/null +++ b/browser/components/sessionstore/test/browser_closed_objects_changed_notifications_tabs.js @@ -0,0 +1,136 @@ +"use strict"; + +/** + * This test is for the sessionstore-closed-objects-changed notifications. + */ + +const MAX_TABS_UNDO_PREF = "browser.sessionstore.max_tabs_undo"; +const TOPIC = "sessionstore-closed-objects-changed"; + +let notificationsCount = 0; + +async function openWindow(url) { + let win = await promiseNewWindowLoaded(); + let flags = Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY; + BrowserTestUtils.loadURIString(win.gBrowser.selectedBrowser, url, { flags }); + await promiseBrowserLoaded(win.gBrowser.selectedBrowser, true, url); + return win; +} + +async function closeWindow(win) { + await awaitNotification(() => BrowserTestUtils.closeWindow(win)); +} + +async function openAndCloseWindow(url) { + let win = await openWindow(url); + await closeWindow(win); +} + +async function openTab(window, url) { + let tab = await BrowserTestUtils.openNewForegroundTab(window.gBrowser, url); + await TabStateFlusher.flush(tab.linkedBrowser); + return tab; +} + +async function openAndCloseTab(window, url) { + let tab = await openTab(window, url); + await promiseRemoveTabAndSessionState(tab); +} + +function countingObserver() { + notificationsCount++; +} + +function assertNotificationCount(count) { + is( + notificationsCount, + count, + "The expected number of notifications was received." + ); +} + +async function awaitNotification(callback) { + let notification = TestUtils.topicObserved(TOPIC); + executeSoon(callback); + await notification; +} + +add_task(async function test_closedObjectsChangedNotifications() { + // Create a closed window so that when we do the purge we can expect a notification. + await openAndCloseWindow("about:robots"); + + // Forget any previous closed windows or tabs from other tests that may have + // run in the same session. + await awaitNotification(() => + Services.obs.notifyObservers(null, "browser:purge-session-history") + ); + + // Add an observer to count the number of notifications. + Services.obs.addObserver(countingObserver, TOPIC); + + // Open a new window. + let win = await openWindow("about:robots"); + + info("Opening and closing a tab."); + await openAndCloseTab(win, "about:mozilla"); + assertNotificationCount(1); + + info("Opening and closing a second tab."); + await openAndCloseTab(win, "about:mozilla"); + assertNotificationCount(2); + + info(`Changing the ${MAX_TABS_UNDO_PREF} pref.`); + registerCleanupFunction(function () { + Services.prefs.clearUserPref(MAX_TABS_UNDO_PREF); + }); + await awaitNotification(() => + Services.prefs.setIntPref(MAX_TABS_UNDO_PREF, 1) + ); + assertNotificationCount(3); + + info("Undoing close of remaining closed tab."); + let tab = SessionStore.undoCloseTab(win, 0); + await promiseTabRestored(tab); + assertNotificationCount(4); + + info("Closing tab again."); + await promiseRemoveTabAndSessionState(tab); + assertNotificationCount(5); + + info("Purging session history."); + await awaitNotification(() => + Services.obs.notifyObservers(null, "browser:purge-session-history") + ); + assertNotificationCount(6); + + info("Opening and closing another tab."); + await openAndCloseTab(win, "http://example.com/"); + assertNotificationCount(7); + + info("Purging domain data with no matches."); + Services.obs.notifyObservers( + null, + "browser:purge-session-history-for-domain", + "mozilla.com" + ); + assertNotificationCount(7); + + info("Purging domain data with matches."); + await awaitNotification(() => + Services.obs.notifyObservers( + null, + "browser:purge-session-history-for-domain", + "example.com" + ) + ); + assertNotificationCount(8); + + info("Opening and closing another tab."); + await openAndCloseTab(win, "http://example.com/"); + assertNotificationCount(9); + + await closeWindow(win); + assertNotificationCount(10); + + Services.obs.removeObserver(countingObserver, TOPIC); +}); -- cgit v1.2.3