<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../resources/accessibility-helper.js"></script>
<script src="../resources/js-test.js"></script>
</head>
<body>

<div id="content">
    <p id="p-before-modal">Page content before modal</p>

    <div id="modal" aria-modal="true" role="dialog" style="display: none">
        <p id="p-inside-modal">Page content inside modal</p>
        <button id="close-button">Close modal button</button>
    </div>
    <div id="new-modal-container"></div>

    <p id="p-after-modal">Page content after modal</p>
</div>

<script>
    var testOutput = "This test ensures that we update the page-wide active modal when an aria-modal element is dynamically added and removed.\n\n";

    function backgroundIsAccessible() {
        return accessibilityController.accessibleElementById("p-before-modal") &&
            accessibilityController.accessibleElementById("p-after-modal");
    }
    function modalContentIsAccessible() {
        return accessibilityController.accessibleElementById("p-inside-modal") &&
            accessibilityController.accessibleElementById("close-button");
    }

    if (window.accessibilityController) {
        window.jsTestIsAsync = true;

        if (backgroundIsAccessible() && !modalContentIsAccessible())
            testOutput += "PASS: Modal content is not initially accessible.\n";
        else
            testOutput += "FAIL: Model content is initially accessible.\n";

        testOutput += `\nUn-hiding aria-modal element.\n`;
        // Move the modal in the DOM. This is the key thing being tested -- do we properly preserve modal behavior
        // for a modal that has been moved?
        document.getElementById("new-modal-container").appendChild(document.getElementById("modal"))
        document.getElementById("modal").removeAttribute("style");
        setTimeout(async function() {
            await waitFor(() => { return !backgroundIsAccessible() && modalContentIsAccessible() });
            testOutput += "PASS: Background is inaccessible, modal content is accessible.\n";

            testOutput += `\nRe-hiding aria-modal element.\n`;
            document.getElementById("modal").style.display = "none";
            await waitFor(() => { return backgroundIsAccessible() });
            testOutput += "PASS: Background is accessible, modal content is inaccessible.\n";

            document.getElementById("content").style.visibility = "hidden";
            debug(testOutput);
            finishJSTest();
        }, 0);
    }
</script>
</body>
</html>

