Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"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.startLoadingURIString(
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);
}
});