/** * 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( "
\" height=\"600\">" ); 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" ); }); });