mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 23:35:34 +00:00
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:
parent
29ef20bdea
commit
c3a3eed1ba
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
});
|
@ -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]
|
||||
|
@ -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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user