Bug 1717680, modify the test browser_bug423833.js to not set popupNode and instead open a context menu for testing 'Show Only This Frame' command, r=Gijs

Differential Revision: https://phabricator.services.mozilla.com/D118519
This commit is contained in:
Neil Deakin 2021-07-09 11:51:13 +00:00
parent 29ef20bdea
commit c3a3eed1ba
4 changed files with 158 additions and 171 deletions

View File

@ -15,6 +15,7 @@ support-files =
../../../../../toolkit/components/pdfjs/test/file_pdfjs_test.pdf
contextmenu_common.js
[browser_contextmenu_badiframe.js]
[browser_contextmenu_inspect.js]
[browser_contextmenu_keyword.js]
skip-if = toolkit == "gtk" || (os == "win" && processor == "aarch64") # disabled on Linux due to bug 513558, aarch64 due to 1533161

View File

@ -0,0 +1,157 @@
/* Tests for proper behaviour of "Show this frame" context menu options with a valid frame and
a frame with an invalid url.
*/
// Two frames, one with text content, the other an error page
var invalidPage = "http://127.0.0.1:55555/";
var validPage = "http://example.com/";
var testPage =
'data:text/html,<frameset cols="400,400"><frame src="' +
validPage +
'"><frame src="' +
invalidPage +
'"></frameset>';
async function openTestPage() {
// Waiting for the error page to load in the subframe
await BrowserTestUtils.openNewForegroundTab(gBrowser, testPage, true, true);
await BrowserTestUtils.waitForCondition(() => {
return (
gBrowser.selectedBrowser.browsingContext.children[1].currentWindowGlobal
.documentURI.spec != "about:blank"
);
});
await SpecialPowers.spawn(
gBrowser.selectedBrowser.browsingContext.children[1],
[],
() => {
if (!content.document.body.classList.length) {
return new Promise(resolve => {
content.addEventListener(
"AboutNetErrorLoad",
() => {
resolve();
},
{ once: true }
);
});
}
return undefined;
}
);
}
async function selectFromFrameMenu(frameNumber, menuId) {
const contextMenu = document.getElementById("contentAreaContextMenu");
let popupShownPromise = BrowserTestUtils.waitForEvent(
contextMenu,
"popupshown"
);
await BrowserTestUtils.synthesizeMouseAtPoint(
40,
40,
{
type: "contextmenu",
button: 2,
},
gBrowser.selectedBrowser.browsingContext.children[frameNumber]
);
await popupShownPromise;
let frameItem = document.getElementById("frame");
let framePopup = frameItem.menupopup;
let subPopupShownPromise = BrowserTestUtils.waitForEvent(
framePopup,
"popupshown"
);
frameItem.openMenu(true);
await subPopupShownPromise;
contextMenu.activateItem(document.getElementById(menuId));
}
add_task(async function testOpenFrame() {
for (let frameNumber = 0; frameNumber < 2; frameNumber++) {
await openTestPage();
let expectedResultURI = [validPage, invalidPage][frameNumber];
info("show only this frame for " + expectedResultURI);
let browserLoadedPromise = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
expectedResultURI,
frameNumber == 1
);
await selectFromFrameMenu(frameNumber, "context-showonlythisframe");
await browserLoadedPromise;
is(
gBrowser.selectedBrowser.currentURI.spec,
expectedResultURI,
"Should navigate to page url, not about:neterror"
);
gBrowser.removeCurrentTab();
}
});
add_task(async function testOpenFrameInTab() {
for (let frameNumber = 0; frameNumber < 2; frameNumber++) {
await openTestPage();
let expectedResultURI = [validPage, invalidPage][frameNumber];
info("open frame in tab for " + expectedResultURI);
let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, null, false);
await selectFromFrameMenu(frameNumber, "context-openframeintab");
let newTab = await newTabPromise;
await BrowserTestUtils.switchTab(gBrowser, newTab);
// We should now have the error page in a new, active tab.
is(
gBrowser.selectedBrowser.currentURI.spec,
expectedResultURI,
"New tab should have page url, not about:neterror"
);
gBrowser.removeCurrentTab();
gBrowser.removeCurrentTab();
}
});
add_task(async function testOpenFrameInWindow() {
for (let frameNumber = 0; frameNumber < 2; frameNumber++) {
await openTestPage();
let expectedResultURI = [validPage, invalidPage][frameNumber];
info("open frame in window for " + expectedResultURI);
let newWindowPromise = BrowserTestUtils.waitForNewWindow({
url: frameNumber == 1 ? invalidPage : validPage,
maybeErrorPage: frameNumber == 1,
});
await selectFromFrameMenu(frameNumber, "context-openframe");
let newWindow = await newWindowPromise;
is(
newWindow.gBrowser.selectedBrowser.currentURI.spec,
expectedResultURI,
"New window should have page url, not about:neterror"
);
newWindow.close();
gBrowser.removeCurrentTab();
}
});

View File

@ -68,9 +68,6 @@ skip-if = (verify && !debug && (os == 'win'))
[browser_bug417483.js]
skip-if = (verify && debug && (os == 'mac')) || (os == 'mac') || (os == 'linux') #Bug 1444703
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
[browser_bug423833.js]
skip-if = true # bug 428712
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
[browser_bug424101.js]
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
[browser_bug427559.js]

View File

@ -1,168 +0,0 @@
/* Tests for proper behaviour of "Show this frame" context menu options */
// Two frames, one with text content, the other an error page
var invalidPage = "http://127.0.0.1:55555/";
var validPage = "http://example.com/";
var testPage =
'data:text/html,<frameset cols="400,400"><frame src="' +
validPage +
'"><frame src="' +
invalidPage +
'"></frameset>';
// Store the tab and window created in tests 2 and 3 respectively
var test2tab;
var test3window;
// We use setInterval instead of setTimeout to avoid race conditions on error doc loads
var intervalID;
function test() {
waitForExplicitFinish();
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
gBrowser.selectedBrowser.addEventListener("load", test1Setup, true);
content.location = testPage;
}
function test1Setup() {
if (content.frames.length < 2 || content.frames[1].location != invalidPage) {
// The error frame hasn't loaded yet
return;
}
gBrowser.selectedBrowser.removeEventListener("load", test1Setup, true);
var badFrame = content.frames[1];
document.popupNode = badFrame.document.firstElementChild;
var contentAreaContextMenu = document.getElementById(
"contentAreaContextMenu"
);
var contextMenu = new nsContextMenu(contentAreaContextMenu);
// We'd like to use another load listener here, but error pages don't fire load events
contextMenu.showOnlyThisFrame();
intervalID = setInterval(testShowOnlyThisFrame, 3000);
}
function testShowOnlyThisFrame() {
if (content.location.href == testPage) {
// This is a stale event from the original page loading
return;
}
// We should now have loaded the error page frame content directly
// in the tab, make sure the URL is right.
clearInterval(intervalID);
is(
content.location.href,
invalidPage,
"Should navigate to page url, not about:neterror"
);
// Go back to the frames page
gBrowser.addEventListener("load", test2Setup, true);
content.location = testPage;
}
function test2Setup() {
if (content.frames.length < 2 || content.frames[1].location != invalidPage) {
// The error frame hasn't loaded yet
return;
}
gBrowser.removeEventListener("load", test2Setup, true);
// Now let's do the whole thing again, but this time for "Open frame in new tab"
var badFrame = content.frames[1];
document.popupNode = badFrame.document.firstElementChild;
var contentAreaContextMenu = document.getElementById(
"contentAreaContextMenu"
);
var contextMenu = new nsContextMenu(contentAreaContextMenu);
gBrowser.tabContainer.addEventListener("TabOpen", function listener(event) {
test2tab = event.target;
gBrowser.tabContainer.removeEventListener("TabOpen", listener);
});
contextMenu.openFrameInTab();
ok(test2tab, "openFrameInTab() opened a tab");
gBrowser.selectedTab = test2tab;
intervalID = setInterval(testOpenFrameInTab, 3000);
}
function testOpenFrameInTab() {
if (gBrowser.contentDocument.location.href == "about:blank") {
// Wait another cycle
return;
}
clearInterval(intervalID);
// We should now have the error page in a new, active tab.
is(
gBrowser.contentDocument.location.href,
invalidPage,
"New tab should have page url, not about:neterror"
);
// Clear up the new tab, and punt to test 3
gBrowser.removeCurrentTab();
test3Setup();
}
function test3Setup() {
// One more time, for "Open frame in new window"
var badFrame = content.frames[1];
document.popupNode = badFrame.document.firstElementChild;
var contentAreaContextMenu = document.getElementById(
"contentAreaContextMenu"
);
var contextMenu = new nsContextMenu(contentAreaContextMenu);
Services.ww.registerNotification(function notification(
aSubject,
aTopic,
aData
) {
if (aTopic == "domwindowopened") {
test3window = aSubject;
}
Services.ww.unregisterNotification(notification);
});
contextMenu.openFrame();
intervalID = setInterval(testOpenFrame, 3000);
}
function testOpenFrame() {
if (!test3window || test3window.content.location.href == "about:blank") {
info("testOpenFrame: Wait another cycle");
return;
}
clearInterval(intervalID);
is(
test3window.content.location.href,
invalidPage,
"New window should have page url, not about:neterror"
);
test3window.close();
cleanup();
}
function cleanup() {
gBrowser.removeCurrentTab();
finish();
}