<!DOCTYPE html>
<html>
<body>
    <iframe id="subframe"></iframe>
    <a href="resources/keyboard-events-after-navigation.html" accesskey="z"></a>
    <script src="resources/keyboard-events-test.js"></script>
    <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.dumpChildFramesAsText();
            testRunner.waitUntilDone();
            internals.settings.setShouldSuppressTextInputFromEditingDuringProvisionalNavigation(true);
        }

        runBeforeTest(window);

        waitForProvisionalNavigation(function () {
            console.log("Provisional navigation started.");
            console.log("No trusted events should be logged and the input element should have the value \"\".");
            runTest(document.getElementById("subframe").contentWindow);

            console.log("Pressing \"z\" with access key modifiers should navigate to resources/keyboard-events-after-navigation.html.");
            window.focus();
            eventSender.keyDown("z", internals.accessKeyModifiers());
        });
    </script>
</body>
</html>
