Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

"use strict";
// Testing that when the user opens the add tab menu and clicks menu items
// the correct context id is opened
function findPopup(browser = gBrowser) {
return browser.tabContainer.querySelector(".new-tab-popup");
}
function findContextPopup() {
return document.querySelector("#new-tab-button-popup");
}
add_task(async function test_containers_no_left_click() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.userContext.enabled", true],
["privacy.userContext.newTabContainerOnLeftClick.enabled", false],
],
});
let newTabButton = gBrowser.tabContainer.newTabButton;
ok(newTabButton, "New tab button exists");
ok(!newTabButton.hidden, "New tab button is visible");
let popup = findPopup();
ok(popup, "new tab should have a popup");
// Test context menu
let contextMenu = findContextPopup();
is(contextMenu.state, "closed", "Context menu is initally closed.");
let popupshown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
let target = gBrowser.tabContainer.newTabButton;
EventUtils.synthesizeMouseAtCenter(target, { type: "contextmenu" });
await popupshown;
is(contextMenu.state, "open", "Context menu is open.");
let contextIdItems = contextMenu.querySelectorAll("menuitem");
// 4 + default + manage containers
is(contextIdItems.length, 6, "Has 6 menu items");
contextMenu.hidePopup();
});
add_task(async function test_containers_with_left_click() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.userContext.enabled", true],
["privacy.userContext.newTabContainerOnLeftClick.enabled", true],
],
});
let newTabButton = gBrowser.tabContainer.newTabButton;
ok(newTabButton, "New tab button exists");
ok(!newTabButton.hidden, "New tab button is visible");
await BrowserTestUtils.waitForCondition(
() => !!findPopup(),
"Wait for popup to exist"
);
let popup = findPopup();
let popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
let popupHiddenPromise = BrowserTestUtils.waitForEvent(popup, "popuphidden");
EventUtils.synthesizeMouseAtCenter(newTabButton, { type: "mousedown" });
await popupShownPromise;
let contextIdItems = popup.querySelectorAll("menuitem");
// 4 + default + manage containers
is(contextIdItems.length, 6, "Has 6 menu items");
popup.hidePopup();
await popupHiddenPromise;
for (let i = 0; i <= 4; i++) {
popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
EventUtils.synthesizeMouseAtCenter(newTabButton, { type: "mousedown" });
await popupShownPromise;
let contextIdItem = popup.querySelector(
`menuitem[data-usercontextid="${i}"]`
);
ok(contextIdItem, `User context id ${i} exists`);
// waitForNewTab doesn't work for default tabs due to a different code path that doesn't cause a load event
let waitForTabPromise = BrowserTestUtils.waitForEvent(
gBrowser.tabContainer,
"TabOpen"
);
EventUtils.synthesizeMouseAtCenter(contextIdItem, {});
let tabEvent = await waitForTabPromise;
let tab = tabEvent.target;
if (i > 0) {
is(
tab.getAttribute("usercontextid"),
"" + i,
`New tab has UCI equal ${i}`
);
} else {
ok(!tab.hasAttribute("usercontextid"), `New tab has no UCI`);
}
BrowserTestUtils.removeTab(tab);
}
// Test context menu
let contextMenu = findContextPopup();
is(contextMenu.state, "closed", "Context menu is initally closed.");
let popupshown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
let target = gBrowser.tabContainer.newTabButton;
EventUtils.synthesizeMouseAtCenter(target, { type: "contextmenu" });
await popupshown;
is(contextMenu.state, "open", "Context menu is open.");
contextIdItems = contextMenu.querySelectorAll("menuitem");
// 4 + default + manage containers
is(contextIdItems.length, 6, "Has 6 menu items");
contextMenu.hidePopup();
});
add_task(async function test_no_containers_no_left_click() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.userContext.enabled", false],
["privacy.userContext.newTabContainerOnLeftClick.enabled", false],
],
});
let newTabButton = gBrowser.tabContainer.newTabButton;
ok(newTabButton, "New tab button exists");
ok(!newTabButton.hidden, "New tab button is visible");
let popup = findPopup();
ok(!popup, "new tab should not have a popup");
// Test context menu
let contextMenu = findContextPopup();
let target = gBrowser.tabContainer.newTabButton;
EventUtils.synthesizeMouseAtCenter(target, { type: "contextmenu" });
is(contextMenu.state, "closed", "Context menu does not open.");
});
add_task(async function test_private_mode() {
let privateWindow = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
let privateDocument = privateWindow.document;
let { tabContainer } = privateWindow.gBrowser;
let newTab = tabContainer.newTabButton;
let newTab2 = privateDocument.getElementById("new-tab-button");
// Check to ensure we are talking about the right button
ok(!!newTab.clientWidth, "new tab button should not be hidden");
ok(!newTab2.clientWidth, "overflow new tab button should be hidden");
let popup = findPopup(privateWindow.gBrowser);
ok(!popup, "new tab should not have a popup");
await BrowserTestUtils.closeWindow(privateWindow);
});
add_task(async function test_opening_container_tab_context() {
await SpecialPowers.pushPrefEnv({
set: [
["privacy.userContext.enabled", true],
["privacy.userContext.newTabContainerOnLeftClick.enabled", true],
],
});
let newTabButton = gBrowser.tabContainer.newTabButton;
ok(newTabButton, "New tab button exists");
ok(!newTabButton.hidden, "New tab button is visible");
let popup = findContextPopup();
let popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
let popupHiddenPromise = BrowserTestUtils.waitForEvent(popup, "popuphidden");
EventUtils.synthesizeMouseAtCenter(newTabButton, { type: "contextmenu" });
await popupShownPromise;
let contextIdItems = popup.querySelectorAll("menuitem");
// 4 + default + manage containers
is(contextIdItems.length, 6, "Has 6 menu items");
popup.hidePopup();
await popupHiddenPromise;
for (let i = 0; i <= 4; i++) {
popupShownPromise = BrowserTestUtils.waitForEvent(popup, "popupshown");
EventUtils.synthesizeMouseAtCenter(newTabButton, { type: "contextmenu" });
await popupShownPromise;
let contextIdItem = popup.querySelector(
`menuitem[data-usercontextid="${i}"]`
);
ok(contextIdItem, `User context id ${i} exists`);
// waitForNewTab doesn't work for default tabs due to a different code path that doesn't cause a load event
let waitForTabPromise = BrowserTestUtils.waitForEvent(
gBrowser.tabContainer,
"TabOpen"
);
popup.activateItem(contextIdItem);
let tabEvent = await waitForTabPromise;
let tab = tabEvent.target;
if (i > 0) {
is(
tab.getAttribute("usercontextid"),
"" + i,
`New tab has UCI equal ${i}`
);
} else {
ok(!tab.hasAttribute("usercontextid"), `New tab has no UCI`);
}
BrowserTestUtils.removeTab(tab);
}
});