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

<main id="main" style="display: contents">
    <ol id="list">
        <li>List item one</li>
        <li>List item two</li>
    </ol>
    <p id="paragraph">Content inside main > p tag.<p>
</main>

<script>
    var testOutput = "This test ensures that an aria-hidden display:contents element behaves as expected.";

    function debugElement(id) {
        testOutput += `\n\nTesting element #${id}\n`;
        const axElement = accessibilityController.accessibleElementById(id);
        if (!axElement) {
            debug(`\nFAIL: Couldn't get AX element for #${id}.`);
            return;
        }

        testOutput += axElement.role;
        const computedRoleString = axElement.computedRoleString;
        if (computedRoleString)
            testOutput += `\ncomputedRoleString: ${computedRoleString}`;

        let subrole = axElement.subrole;
        if (subrole.replace("AXSubrole: ", ""))
            testOutput += `\n${subrole}`;
    }

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

        debugElement("main");
        debugElement("list");
        debugElement("paragraph");

        testOutput += "\n\nHiding #main with aria-hidden='true'.";
        document.getElementById("main").ariaHidden = "true";
        setTimeout(async function() {
            await waitFor(() => {
                // Wait for the main to be hidden.
                return !accessibilityController.accessibleElementById("main");
            });
            const list = accessibilityController.accessibleElementById("list");
            const paragraph = accessibilityController.accessibleElementById("paragraph");
            if (!list && !paragraph)
                testOutput += "\nPASS: All elements are now hidden.";
            else {
                if (list)
                    testOutput += "\nFAIL: <ol> was not hidden by aria-hidden.";
                if (paragraph)
                    testOutput += "\nFAIL: <p> was not hidden by aria-hidden.";
            }

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

