blob: 55edacc68a28f20ee3f67a54e19596bfb1265769 [file] [log] [blame] [edit]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/accessibility-helper.js"></script>
<p role="group" id="background-content">background</p>
<custom-dialog id="custom-dialog" tabindex="0">modal content</custom-dialog>
<script>
customElements.define('custom-dialog', class CustomDialog extends HTMLElement {
constructor()
{
super();
const internals = this.attachInternals();
internals.role = 'dialog';
internals.ariaModal = 'true';
}
});
// In order for an object to be "modal" (trapping user focus inside), it must have focus within itself, or on the modal.
// Here, we focus the modal. This is intentional as a testcase ensuring we allow focus on the modal element itself to
// trigger modality.
document.getElementById("custom-dialog").focus();
description("This tests that aria fallback roles work correctly.");
if (!window.accessibilityController)
debug('This test requires accessibilityController');
else {
jsTestIsAsync = true;
(async () => {
await expectAsyncExpression('!accessibilityController.accessibleElementById("background-content") || accessibilityController.accessibleElementById("background-content").isIgnored', 'true');
document.getElementById('custom-dialog').setAttribute('aria-modal', 'false');
await new Promise(requestAnimationFrame);
await expectAsyncExpression('accessibilityController.accessibleElementById("background-content").isIgnored', 'false');
finishJSTest();
})();
}
</script>
</body>
</html>