fune/dom/tests/browser/browser_test_focus_after_modal_state.js

75 lines
2.2 KiB
JavaScript

const TEST_URL =
"https://example.com/browser/dom/tests/browser/focus_after_prompt.html";
function awaitAndClosePrompt() {
return new Promise(resolve => {
function onDialogShown(node) {
Services.obs.removeObserver(onDialogShown, "tabmodal-dialog-loaded");
let button = node.querySelector(".tabmodalprompt-button0");
button.click();
resolve();
}
Services.obs.addObserver(onDialogShown, "tabmodal-dialog-loaded");
});
}
add_task(async function() {
await SpecialPowers.pushPrefEnv({
set: [["prompts.contentPromptSubDialog", false]],
});
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(event) {
focusOccurred = true;
if (blurOccurred) {
resolve(true);
}
});
doc.addEventListener("blur", function(event) {
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();
await SpecialPowers.spawn(tab.linkedBrowser, [], 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);
});