Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

const TEST_URL =
const { PromptTestUtils } = ChromeUtils.importESModule(
);
function awaitAndClosePrompt(browser) {
return PromptTestUtils.handleNextPrompt(
browser,
{ modalType: Services.prompt.MODAL_TYPE_CONTENT, promptType: "prompt" },
{ buttonNumClick: 0 }
);
}
add_task(async function () {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL);
let browser = tab.linkedBrowser;
// Focus on editable iframe.
await BrowserTestUtils.synthesizeMouseAtCenter("#edit", {}, browser);
await SpecialPowers.spawn(browser, [], async function () {
is(
content.document.activeElement,
content.document.getElementById("edit"),
"Focus should be on iframe element"
);
});
let focusBlurPromise = SpecialPowers.spawn(browser, [], async function () {
let focusOccurred = false;
let blurOccurred = false;
return new Promise(resolve => {
let doc = content.document.getElementById("edit").contentDocument;
doc.addEventListener("focus", function () {
focusOccurred = true;
if (blurOccurred) {
resolve(true);
}
});
doc.addEventListener("blur", function () {
blurOccurred = true;
if (focusOccurred) {
resolve(false);
}
});
});
});
// Click on div that triggers a prompt, and then check that focus is back on
// the editable iframe.
let dialogShown = awaitAndClosePrompt(browser);
await SpecialPowers.spawn(browser, [], async function () {
let div = content.document.getElementById("clickMeDiv");
div.click();
});
await dialogShown;
let blurCameFirst = await focusBlurPromise;
await SpecialPowers.spawn(browser, [], async function () {
is(
content.document.activeElement,
content.document.getElementById("edit"),
"Focus should be back on iframe element"
);
});
ok(blurCameFirst, "Should receive blur and then focus event");
BrowserTestUtils.removeTab(tab);
});