<body>
<script src="full-screen-test.js"></script>
<p>This tests that full screen mode does not allow alphanumeric key events.  Press space to continue, then press the 'a' key.
<span></span>
<script>
    // Bail out early if the full screen API is not enabled or is missing:
    if (Element.prototype.webkitRequestFullScreen == undefined) {
        logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
        endTest();
    } else {
        var callback;
        var fullscreenChanged = function(event)
        {
            if (callback)
                callback(event)
        };
        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);

        var spanEnteredFullScreen = function() {
            callback = null;
            testExpected("document.webkitIsFullScreen", true);
            if (window.testRunner && eventSender.keyDown) {
                waitForEvent(document, 'keypress', keyPressed);
                eventSender.keyDown('a', []);
            }
        };
        
        var keyPressed = function(event) {
            testExpected('event.keyCode', 97); // 'A'
            endTest();
        }
        
        var span = document.getElementsByTagName('span')[0];
        callback = spanEnteredFullScreen;
        runWithKeyDown(function(){span.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)});
    }
</script>
