Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/**
* Make sure that the form validation error message shows even if the form is in an iframe.
*/
add_task(async function test_iframe() {
let uri =
"data:text/html;charset=utf-8," +
escape(
"<iframe src=\"data:text/html,<iframe name='t'></iframe><form target='t' action='data:text/html,'><input required id='i'><input id='s' type='submit'></form>\" height=\"600\"></iframe>"
);
var gInvalidFormPopup =
gBrowser.selectedBrowser.browsingContext.currentWindowGlobal
.getActor("FormValidation")
._getAndMaybeCreatePanel(document);
ok(
gInvalidFormPopup,
"The browser should have a popup to show when a form is invalid"
);
await BrowserTestUtils.withNewTab(uri, async function checkTab(browser) {
let popupShownPromise = BrowserTestUtils.waitForEvent(
gInvalidFormPopup,
"popupshown"
);
await SpecialPowers.spawn(browser, [], async function () {
content.document
.getElementsByTagName("iframe")[0]
.contentDocument.getElementById("s")
.click();
});
await popupShownPromise;
let anchorBottom = await SpecialPowers.spawn(
browser,
[],
async function () {
let childdoc =
content.document.getElementsByTagName("iframe")[0].contentDocument;
Assert.equal(
childdoc.activeElement,
childdoc.getElementById("i"),
"First invalid element should be focused"
);
return (
childdoc.defaultView.mozInnerScreenY +
childdoc.getElementById("i").getBoundingClientRect().bottom
);
}
);
function isWithinHalfPixel(a, b) {
return Math.abs(a - b) <= 0.5;
}
is(
isWithinHalfPixel(gInvalidFormPopup.screenY),
isWithinHalfPixel(anchorBottom),
"popup top"
);
ok(
gInvalidFormPopup.state == "showing" || gInvalidFormPopup.state == "open",
"The invalid form popup should be shown"
);
});
});