Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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/. */
add_task(async function testOpenBrowserWindow() {
let win = OpenBrowserWindow();
Assert.ok(
!PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow() should open a normal window"
);
await BrowserTestUtils.closeWindow(win);
win = OpenBrowserWindow({ private: true });
Assert.ok(
PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow({private: true}) should open a private window"
);
await BrowserTestUtils.closeWindow(win);
win = OpenBrowserWindow({ private: false });
Assert.ok(
!PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow({private: false}) should open a normal window"
);
await BrowserTestUtils.closeWindow(win);
// In permanent browsing mode.
await SpecialPowers.pushPrefEnv({
set: [["browser.privatebrowsing.autostart", true]],
});
win = OpenBrowserWindow();
Assert.ok(
PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow() in PBM should open a private window"
);
await BrowserTestUtils.closeWindow(win);
win = OpenBrowserWindow({ private: true });
Assert.ok(
PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow({private: true}) in PBM should open a private window"
);
await BrowserTestUtils.closeWindow(win);
win = OpenBrowserWindow({ private: false });
Assert.ok(
PrivateBrowsingUtils.isWindowPrivate(win),
"OpenBrowserWindow({private: false}) in PBM should open a private window"
);
await BrowserTestUtils.closeWindow(win);
await SpecialPowers.popPrefEnv();
});
/**
* Check that the "new window" menu items have the expected properties.
*
* @param {Element} newWindowItem - The "new window" item to check.
* @param {Element} privateWindowItem - The "new private window" item to check.
* @param {Object} expect - The expected properties.
* @param {boolean} expect.privateVisible - Whether we expect the private item
* to be visible or not.
* @param {string} expect.newWindowL10nId - The expected string ID used by the
* "new window" item.
* @param {string} expect.privateWindowL10nId - The expected string ID used by
* the "new private window" item.
* @param {boolean} [useIsVisible=true] - Whether to test the "true" visibility
* of the item. Otherwise only the "hidden" attribute is checked.
*/
function assertMenuItems(
newWindowItem,
privateWindowItem,
expect,
useIsVisible = true
) {
Assert.ok(newWindowItem);
Assert.ok(privateWindowItem);
if (useIsVisible) {
Assert.ok(
BrowserTestUtils.isVisible(newWindowItem),
"New window item should be visible"
);
} else {
// The application menu is not accessible on macOS, just check the hidden
// attribute.
Assert.ok(!newWindowItem.hidden, "New window item should be visible");
}
Assert.equal(
newWindowItem.getAttribute("key"),
"key_newNavigator",
"New window item should use the same key"
);
Assert.equal(
newWindowItem.getAttribute("data-l10n-id"),
expect.newWindowL10nId
);
if (!expect.privateVisible) {
if (useIsVisible) {
Assert.ok(
BrowserTestUtils.isHidden(privateWindowItem),
"Private window item should be hidden"
);
} else {
Assert.ok(
privateWindowItem.hidden,
"Private window item should be hidden"
);
}
// Don't check attributes since hidden.
} else {
if (useIsVisible) {
Assert.ok(
BrowserTestUtils.isVisible(privateWindowItem),
"Private window item should be visible"
);
} else {
Assert.ok(
!privateWindowItem.hidden,
"Private window item should be visible"
);
}
Assert.equal(
privateWindowItem.getAttribute("key"),
"key_privatebrowsing",
"Private window item should use the same key"
);
Assert.equal(
privateWindowItem.getAttribute("data-l10n-id"),
expect.privateWindowL10nId
);
}
}
/**
* Check that a window has the expected "new window" items in the "File" and app
* menus.
*
* @param {Window} win - The window to check.
* @param {boolean} expectBoth - Whether we expect the window to contain both
* "new window" and "new private window" as separate controls.
*/
async function checkWindowMenus(win, expectBoth) {
// Check the File menu.
assertMenuItems(
win.document.getElementById("menu_newNavigator"),
win.document.getElementById("menu_newPrivateWindow"),
{
privateVisible: expectBoth,
// If in permanent private browsing, expect the new window item to use the
// "New private window" string.
newWindowL10nId: expectBoth
? "menu-file-new-window"
: "menu-file-new-private-window",
privateWindowL10nId: "menu-file-new-private-window",
},
// The file menu is difficult to open cross-platform, so we do not open it
// for this test.
false
);
// Open the app menu.
let appMenuButton = win.document.getElementById("PanelUI-menu-button");
let appMenu = win.document.getElementById("appMenu-popup");
let menuShown = BrowserTestUtils.waitForEvent(appMenu, "popupshown");
EventUtils.synthesizeMouseAtCenter(appMenuButton, {}, win);
await menuShown;
// Check the app menu.
assertMenuItems(
win.document.getElementById("appMenu-new-window-button2"),
win.document.getElementById("appMenu-new-private-window-button2"),
{
privateVisible: expectBoth,
// If in permanent private browsing, expect the new window item to use the
// "New private window" string.
newWindowL10nId: expectBoth
? "appmenuitem-new-window"
: "appmenuitem-new-private-window",
privateWindowL10nId: "appmenuitem-new-private-window",
}
);
appMenu.hidePopup();
}
add_task(async function testNewWindowMenuItems() {
// In non-private window, expect both menu items.
let win = await BrowserTestUtils.openNewBrowserWindow({
private: false,
});
await checkWindowMenus(win, true);
Assert.equal(win.gBrowser.currentURI.spec, "about:blank");
await BrowserTestUtils.closeWindow(win);
// In non-permanent private window, still expect both menu items.
win = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
await checkWindowMenus(win, true);
Assert.equal(win.gBrowser.currentURI.spec, "about:privatebrowsing");
await BrowserTestUtils.closeWindow(win);
// In permanent private browsing, expect only one menu item.
await SpecialPowers.pushPrefEnv({
set: [["browser.privatebrowsing.autostart", true]],
});
win = await BrowserTestUtils.openNewBrowserWindow();
await checkWindowMenus(win, false);
Assert.equal(win.gBrowser.currentURI.spec, "about:blank");
await BrowserTestUtils.closeWindow(win);
await SpecialPowers.popPrefEnv();
});