Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Tests that right-clicking on a view-source page that displays an error page
// shows exactly the same context menu items as right-clicking on the same
// error page without the view-source: prefix.
async function openErrorPage(url) {
let tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
"about:blank",
true
);
let browser = tab.linkedBrowser;
let loaded = BrowserTestUtils.browserLoaded(browser, false, null, true);
BrowserTestUtils.startLoadingURIString(browser, url);
await loaded;
// Ensure the document has had a chance to paint before we interact with it.
await SpecialPowers.spawn(browser.browsingContext, [], async () => {
await new Promise(resolve => content.requestAnimationFrame(resolve));
});
return tab;
}
function getVisibleItemIds(contextMenu) {
let ids = [];
for (let item of contextMenu.children) {
if (!item.hidden) {
ids.push(item.id || item.nodeName);
}
}
return ids;
}
async function getContextMenuItems(tab) {
const browser = tab.linkedBrowser;
const contextMenu = document.getElementById("contentAreaContextMenu");
const popupShown = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
await BrowserTestUtils.synthesizeMouseAtCenter(
"body",
{ type: "contextmenu", button: 2 },
browser
);
await popupShown;
const items = getVisibleItemIds(contextMenu);
const popupHidden = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
contextMenu.hidePopup();
await popupHidden;
return items;
}
add_task(async function test_viewsource_certerror_contextmenu() {
let plainTab = await openErrorPage(url);
let plainItems = await getContextMenuItems(plainTab);
BrowserTestUtils.removeTab(plainTab);
let viewSourceTab = await openErrorPage("view-source:" + url);
let viewSourceItems = await getContextMenuItems(viewSourceTab);
BrowserTestUtils.removeTab(viewSourceTab);
Assert.deepEqual(
viewSourceItems,
plainItems,
"Context menu items on view-source error page match those on the plain error page"
);
});