diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /browser/components/sessionstore/test/browser_restored_window_features.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/sessionstore/test/browser_restored_window_features.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_restored_window_features.js | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_restored_window_features.js b/browser/components/sessionstore/test/browser_restored_window_features.js new file mode 100644 index 0000000000..efb470e385 --- /dev/null +++ b/browser/components/sessionstore/test/browser_restored_window_features.js @@ -0,0 +1,164 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const BARPROP_NAMES = [ + "locationbar", + "menubar", + "personalbar", + "scrollbars", + "statusbar", + "toolbar", +]; + +function testFeatures(win, test) { + for (let name of BARPROP_NAMES) { + is( + win[name].visible, + !!test.barprops?.[name], + name + " should be " + (test.barprops?.[name] ? "visible" : "hidden") + ); + } + let toolbar = win.document.getElementById("TabsToolbar"); + is( + toolbar.collapsed, + !win.toolbar.visible, + win.toolbar.visible + ? "tabbar should not be collapsed" + : "tabbar should be collapsed" + ); + let chromeFlags = win.docShell.treeOwner + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIAppWindow).chromeFlags; + is(chromeFlags & test.chromeFlags, test.chromeFlags, "flags should be set"); + if (test.unsetFlags) { + is(chromeFlags & test.unsetFlags, 0, "flags should be unset"); + } +} + +add_task(async function testRestoredWindowFeatures() { + const DUMMY_PAGE = "browser/base/content/test/tabs/dummy_page.html"; + const ALL_BARPROPS = { + locationbar: true, + menubar: true, + personalbar: true, + scrollbars: true, + statusbar: true, + toolbar: true, + }; + const TESTS = [ + { + url: "http://example.com/browser/" + DUMMY_PAGE, + features: "menubar=0,resizable", + barprops: { scrollbars: true }, + chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, + unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, + }, + { + url: "data:,", // title should be empty + checkContentTitleEmpty: true, + features: "location,resizable", + barprops: { locationbar: true, scrollbars: true }, + chromeFlags: Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, + unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, + }, + { + url: "http://example.com/browser/" + DUMMY_PAGE, + features: "dialog,resizable", + barprops: { scrollbars: true }, + chromeFlags: + Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG | + Ci.nsIWebBrowserChrome.CHROME_WINDOW_RESIZE, + }, + { + chrome: true, + url: "http://example.com/browser/" + DUMMY_PAGE, + features: "chrome,all,dialog=no", + barprops: ALL_BARPROPS, + chromeFlags: Ci.nsIWebBrowserChrome.CHROME_ALL, + unsetFlags: Ci.nsIWebBrowserChrome.CHROME_OPENAS_DIALOG, + }, + { + chrome: true, + url: "http://example.com/browser/" + DUMMY_PAGE, + features: "chrome,all,dialog=no,alwayslowered,centerscreen", + barprops: ALL_BARPROPS, + chromeFlags: + Ci.nsIWebBrowserChrome.CHROME_WINDOW_LOWERED | + Ci.nsIWebBrowserChrome.CHROME_CENTER_SCREEN, + }, + { + chrome: true, + url: "http://example.com/browser/" + DUMMY_PAGE, + features: "chrome,all,dialog=no,alwaysraised,dependent", + barprops: ALL_BARPROPS, + chromeFlags: + Ci.nsIWebBrowserChrome.CHROME_WINDOW_RAISED | + Ci.nsIWebBrowserChrome.CHROME_DEPENDENT, + }, + ]; + const TEST_URL_CHROME = "chrome://mochitests/content/browser/" + DUMMY_PAGE; + + BrowserTestUtils.loadURIString(gBrowser.selectedBrowser, TEST_URL_CHROME); + await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); + + for (let test of TESTS) { + let newWindowPromise = BrowserTestUtils.waitForNewWindow({ + url: test.url, + }); + let win; + if (test.chrome) { + win = window.openDialog( + AppConstants.BROWSER_CHROME_URL, + "_blank", + test.features, + test.url + ); + } else { + await SpecialPowers.spawn(gBrowser.selectedBrowser, [test], t => { + content.window.open(t.url, "_blank", t.features); + }); + } + win = await newWindowPromise; + + let title = win.document.title; + if (test.checkContentTitleEmpty) { + let contentTitle = await SpecialPowers.spawn( + win.gBrowser.selectedBrowser, + [], + () => content.document.title + ); + is(contentTitle, "", "title should be empty"); + } + + testFeatures(win, test); + let chromeFlags = win.docShell.treeOwner + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIAppWindow).chromeFlags; + + await BrowserTestUtils.closeWindow(win); + + newWindowPromise = BrowserTestUtils.waitForNewWindow({ + url: test.url, + }); + SessionStore.undoCloseWindow(0); + win = await newWindowPromise; + + is(title, win.document.title, "title should be preserved"); + testFeatures(win, test); + is( + win.docShell.treeOwner + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIAppWindow).chromeFlags, + // Use |>>> 0| to force unsigned. + (chromeFlags | + Ci.nsIWebBrowserChrome.CHROME_OPENAS_CHROME | + Ci.nsIWebBrowserChrome.CHROME_SUPPRESS_ANIMATION) >>> + 0, + "unexpected chromeFlags" + ); + + await BrowserTestUtils.closeWindow(win); + } +}); |