<!DOCTYPE HTML><!-- webkit-test-runner [ KeygenElementEnabled=true ] -->
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
    <div id="divElement">
    </div>
    <marquee id="outerMarquee">
        <output>
            <base target="divElement"></base>
        </output>
    </marquee>
    <a href="">
        <textarea id="htmlTextArea" onfocus="focusHandler()" onblur="blurHandler()" autofocus="autofocus">Test Text Area</textarea>
    </a>
    <table id="testTable">
        <tbody>
            <tr>
                <th id="htmlTableHeader">
                    <marquee id="innerMarquee">
                        <svg>
                            <mesh/>
                        </svg>
                    </marquee>
                </th>
            </tr>
        </tbody>
    </table>
    <keygen autofocus="autofocus">
    <iframe>Test Frame</iframe>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.preventPopupWindows();
        }

        description("The test passes if it does not ASSERT in debug builds.");

        var innerMarquee = document.getElementById("innerMarquee");
        var outerMarquee = document.getElementById("outerMarquee");

        document.execCommand("createLink", false, "#foo");
        document.getElementById("htmlTableHeader").innerHTML = "TEST";

        function blurHandler() {
            document.getElementById("htmlTextArea").setSelectionRange(0, 0, "foo");
        }

        function focusHandler() {
            document.getElementById("htmlTextArea").click();
            innerMarquee.appendChild(outerMarquee);
        }
    </script>
    <script src="../../resources/js-test-post.js"></script>
</body>
</html>
