Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
// A test to check the 'Open Link in new tab' functionality in the
const TESTCASE_URI = TEST_BASE_HTTPS + "simple.html";
add_task(async function () {
const { panel, ui } = await openStyleEditorForURL(TESTCASE_URI);
const openLinkNewTabItem = panel.panelWindow.document.getElementById(
"context-openlinknewtab"
);
let menu = await rightClickStyleSheet(panel, ui.editors[0]);
is(
openLinkNewTabItem.getAttribute("disabled"),
"false",
"The menu item is not disabled"
);
ok(!openLinkNewTabItem.hidden, "The menu item is not hidden");
const url = TEST_BASE_HTTPS + "simple.css";
const browserWindow = Services.wm.getMostRecentWindow(
gDevTools.chromeWindowType
);
const originalOpenWebLinkIn = browserWindow.openWebLinkIn;
const tabOpenedDefer = new Promise(resolve => {
browserWindow.openWebLinkIn = newUrl => {
// Reset the actual openWebLinkIn function before proceeding.
browserWindow.openWebLinkIn = originalOpenWebLinkIn;
is(newUrl, url, "The correct tab has been opened");
resolve();
};
});
const hidden = onPopupHide(menu);
menu.activateItem(openLinkNewTabItem);
info(`Waiting for a tab to open - ${url}`);
await tabOpenedDefer;
await hidden;
menu = await rightClickInlineStyleSheet(panel, ui.editors[1]);
is(
openLinkNewTabItem.getAttribute("disabled"),
"true",
"The menu item is disabled"
);
ok(!openLinkNewTabItem.hidden, "The menu item should not be hidden");
menu.hidePopup();
menu = await rightClickNoStyleSheet(panel);
ok(openLinkNewTabItem.hidden, "The menu item should be hidden");
menu.hidePopup();
});
function onPopupShow(contextMenu) {
return new Promise(resolve => {
contextMenu.addEventListener(
"popupshown",
function () {
resolve();
},
{ once: true }
);
});
}
function onPopupHide(contextMenu) {
return new Promise(resolve => {
contextMenu.addEventListener(
"popuphidden",
function () {
resolve();
},
{ once: true }
);
});
}
function rightClickStyleSheet(panel, editor) {
const contextMenu = getContextMenuElement(panel);
return new Promise(resolve => {
onPopupShow(contextMenu).then(() => {
resolve(contextMenu);
});
EventUtils.synthesizeMouseAtCenter(
editor.summary.querySelector(".stylesheet-name"),
{ button: 2, type: "contextmenu" },
panel.panelWindow
);
});
}
function rightClickInlineStyleSheet(panel, editor) {
const contextMenu = getContextMenuElement(panel);
return new Promise(resolve => {
onPopupShow(contextMenu).then(() => {
resolve(contextMenu);
});
EventUtils.synthesizeMouseAtCenter(
editor.summary.querySelector(".stylesheet-name"),
{ button: 2, type: "contextmenu" },
panel.panelWindow
);
});
}
function rightClickNoStyleSheet(panel) {
const contextMenu = getContextMenuElement(panel);
return new Promise(resolve => {
onPopupShow(contextMenu).then(() => {
resolve(contextMenu);
});
EventUtils.synthesizeMouseAtCenter(
panel.panelWindow.document.querySelector(
"#splitview-tpl-summary-stylesheet"
),
{ button: 2, type: "contextmenu" },
panel.panelWindow
);
});
}