<!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">

<input type="text" id="text-input-outside-iframe">
<iframe id="iframe-contentwindow" width=500 height=500></iframe>
<iframe id="iframe-src" width=500 height=500></iframe>

<script>
    var testOutput = "This test ensures that an iframe that changes its document dynamically remains accessible.\n\n";

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

        var contentWindowIframe = document.getElementById('iframe-contentwindow');
        var srcIframe = document.getElementById('iframe-src');

        setTimeout(async () => {
            const updateIframeMilliseconds = 500;
            const firstHtmlFilePath = "resources/text.html";
            const secondHtmlFilePath = "resources/purple-pineapple-text.html";

            contentWindowIframe.contentWindow.location = firstHtmlFilePath;
            srcIframe.src = firstHtmlFilePath;
            await sleep(updateIframeMilliseconds);

            contentWindowIframe.contentWindow.location = secondHtmlFilePath;
            srcIframe.src = secondHtmlFilePath;
            await sleep(updateIframeMilliseconds);

            traverseBodyContent();
            debug(testOutput);
            finishJSTest();
        }, 0);
    }

    function traverseBodyContent() {
        const body = accessibilityController.accessibleElementById("body");

        testOutput += "Beginning search traversal from the body element.\n";
        let elementCount = 0;
        let searchResult = null;
        while (true) {
            searchResult = body.uiElementForSearchPredicate(searchResult, true, "AXAnyTypeSearchKey", "", false);
            if (!searchResult)
                break;

            const role = searchResult.role;
            testOutput += `\n${role}`;
            if (role.includes("StaticText")) {
                let textContent = accessibilityController.platformName === "ios" ? searchResult.description : searchResult.stringValue;
                testOutput += `\n${textContent}`;
            }

            if (searchResult.domIdentifier)
                testOutput += `\n${searchResult.domIdentifier}`;

            testOutput += "\n";
            elementCount += 1;
        }
        testOutput += `\nTraversed ${elementCount} elements.`;
    }

</script>
</body>
</html>

