185 lines
6.1 KiB
JavaScript
185 lines
6.1 KiB
JavaScript
/* 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/. */
|
|
"use strict";
|
|
|
|
// Stolen from https://searchfox.org/mozilla-central/source/browser/base/content/test/popups/browser_popup_close_main_window.js
|
|
// When calling this function, the main window where the test runs will be
|
|
// hidden from various APIs, so that they won't be able to find it. This makes
|
|
// it possible to test some behaviors when only private windows are present.
|
|
function concealMainWindow() {
|
|
info("Concealing main window.");
|
|
let oldWinType = document.documentElement.getAttribute("windowtype");
|
|
// Check if we've already done this to allow calling multiple times:
|
|
if (oldWinType != "navigator:testrunner") {
|
|
// Make the main test window not count as a browser window any longer
|
|
document.documentElement.setAttribute("windowtype", "navigator:testrunner");
|
|
BrowserWindowTracker.untrackForTestsOnly(window);
|
|
|
|
registerCleanupFunction(() => {
|
|
info("Unconcealing the main window in the cleanup phase.");
|
|
BrowserWindowTracker.track(window);
|
|
document.documentElement.setAttribute("windowtype", oldWinType);
|
|
});
|
|
}
|
|
}
|
|
|
|
const EXAMPLE_URL = "https://example.org/";
|
|
add_task(async function test_open_tab() {
|
|
const waitForTabPromise = BrowserTestUtils.waitForNewTab(
|
|
gBrowser,
|
|
EXAMPLE_URL
|
|
);
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
openWebLinkIn(EXAMPLE_URL, "tab", {
|
|
resolveOnContentBrowserCreated,
|
|
})
|
|
);
|
|
|
|
const tab = await waitForTabPromise;
|
|
is(
|
|
contentBrowser,
|
|
tab.linkedBrowser,
|
|
"We get a content browser that is the tab's linked browser as the result of opening a tab"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(tab);
|
|
});
|
|
|
|
add_task(async function test_open_window() {
|
|
const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
openWebLinkIn(EXAMPLE_URL, "window", {
|
|
resolveOnContentBrowserCreated,
|
|
})
|
|
);
|
|
|
|
const win = await waitForWindowPromise;
|
|
is(
|
|
contentBrowser,
|
|
win.gBrowser.selectedBrowser,
|
|
"We get the content browser for the newly opened window as a result of opening a window"
|
|
);
|
|
|
|
await BrowserTestUtils.closeWindow(win);
|
|
});
|
|
|
|
add_task(async function test_open_private_window() {
|
|
const waitForWindowPromise = BrowserTestUtils.waitForNewWindow();
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
openWebLinkIn(EXAMPLE_URL, "window", {
|
|
resolveOnContentBrowserCreated,
|
|
private: true,
|
|
})
|
|
);
|
|
|
|
const win = await waitForWindowPromise;
|
|
ok(
|
|
PrivateBrowsingUtils.isBrowserPrivate(win),
|
|
"The new window is a private window."
|
|
);
|
|
is(
|
|
contentBrowser,
|
|
win.gBrowser.selectedBrowser,
|
|
"We get the content browser for the newly opened window as a result of opening a private window"
|
|
);
|
|
|
|
await BrowserTestUtils.closeWindow(win);
|
|
});
|
|
|
|
add_task(async function test_open_private_tab_from_private_window() {
|
|
const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
|
|
private: true,
|
|
});
|
|
const waitForTabPromise = BrowserTestUtils.waitForNewTab(
|
|
privateWindow.gBrowser,
|
|
EXAMPLE_URL
|
|
);
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
|
|
resolveOnContentBrowserCreated,
|
|
})
|
|
);
|
|
|
|
const tab = await waitForTabPromise;
|
|
ok(
|
|
PrivateBrowsingUtils.isBrowserPrivate(tab),
|
|
"The new tab was opened in a private browser."
|
|
);
|
|
is(
|
|
contentBrowser,
|
|
tab.linkedBrowser,
|
|
"We get a content browser that is the tab's linked browser as the result of opening a private tab in a private window"
|
|
);
|
|
|
|
await BrowserTestUtils.closeWindow(privateWindow);
|
|
});
|
|
|
|
add_task(async function test_open_non_private_tab_from_private_window() {
|
|
const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
|
|
private: true,
|
|
});
|
|
|
|
// Opening this tab from the private window should open it in the non-private window.
|
|
const waitForTabPromise = BrowserTestUtils.waitForNewTab(
|
|
gBrowser,
|
|
EXAMPLE_URL
|
|
);
|
|
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
|
|
forceNonPrivate: true,
|
|
resolveOnContentBrowserCreated,
|
|
})
|
|
);
|
|
|
|
const nonPrivateTab = await waitForTabPromise;
|
|
ok(
|
|
!PrivateBrowsingUtils.isBrowserPrivate(nonPrivateTab),
|
|
"The new window isn't a private window."
|
|
);
|
|
is(
|
|
contentBrowser,
|
|
nonPrivateTab.linkedBrowser,
|
|
"We get a content browser that is the non private tab's linked browser as the result of opening a non private tab from a private window"
|
|
);
|
|
|
|
BrowserTestUtils.removeTab(nonPrivateTab);
|
|
await BrowserTestUtils.closeWindow(privateWindow);
|
|
});
|
|
|
|
add_task(async function test_open_non_private_tab_from_only_private_window() {
|
|
const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
|
|
private: true,
|
|
});
|
|
|
|
// In this test we'll hide the existing window from window trackers, because
|
|
// we want to test that we open a new window when there's only a private
|
|
// window.
|
|
concealMainWindow();
|
|
|
|
// Opening this tab from the private window should open it in a new non-private window.
|
|
const waitForWindowPromise = BrowserTestUtils.waitForNewWindow({
|
|
url: EXAMPLE_URL,
|
|
});
|
|
const contentBrowser = await new Promise(resolveOnContentBrowserCreated =>
|
|
privateWindow.openWebLinkIn(EXAMPLE_URL, "tab", {
|
|
forceNonPrivate: true,
|
|
resolveOnContentBrowserCreated,
|
|
})
|
|
);
|
|
|
|
const nonPrivateWindow = await waitForWindowPromise;
|
|
ok(
|
|
!PrivateBrowsingUtils.isBrowserPrivate(nonPrivateWindow),
|
|
"The new window isn't a private window."
|
|
);
|
|
is(
|
|
contentBrowser,
|
|
nonPrivateWindow.gBrowser.selectedBrowser,
|
|
"We get the content browser for the newly opened non private window from a private window, as a result of opening a non private tab."
|
|
);
|
|
|
|
await BrowserTestUtils.closeWindow(nonPrivateWindow);
|
|
await BrowserTestUtils.closeWindow(privateWindow);
|
|
});
|