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 () {
await testShiftClickOpensNewWindow("back-button");
});
add_task(async function () {
await testShiftClickOpensNewWindow("forward-button");
});
// Create new private browser, open new tab and set history state, then return the window
async function createPrivateWindow() {
const privateWindow = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
await BrowserTestUtils.openNewForegroundTab(
privateWindow.gBrowser,
);
await SpecialPowers.spawn(
privateWindow.gBrowser.selectedBrowser,
[],
async function () {
content.history.pushState({}, "first item", "first-item.html");
content.history.pushState({}, "second item", "second-item.html");
content.history.pushState({}, "third item", "third-item.html");
content.history.back();
}
);
await TestUtils.topicObserved("sessionstore-state-write-complete");
// Wait for the session data to be flushed before continuing the test
await new Promise(resolve =>
SessionStore.getSessionHistory(privateWindow.gBrowser.selectedTab, resolve)
);
info("Private window created");
return privateWindow;
}
async function testShiftClickOpensNewWindow(buttonId) {
const privateWindow = await createPrivateWindow();
const button = privateWindow.document.getElementById(buttonId);
// Wait for the new private window to be created after click
const newPrivateWindowPromise = BrowserTestUtils.waitForNewWindow();
EventUtils.synthesizeMouseAtCenter(button, { shiftKey: true }, privateWindow);
info("Waiting for new private browser to open");
const newPrivateWindow = await newPrivateWindowPromise;
ok(
PrivateBrowsingUtils.isBrowserPrivate(newPrivateWindow.gBrowser),
"New window is private"
);
// Cleanup
await Promise.all([
BrowserTestUtils.closeWindow(privateWindow),
BrowserTestUtils.closeWindow(newPrivateWindow),
]);
info("Closed all windows");
}