<body>
<script src="full-screen-test.js"></script>
<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 {
        if (window.testRunner) {
            testRunner.setCanOpenWindows(true);
            testRunner.setCloseRemainingWindowsWhenComplete(true);
        }
        var callback;
        var fullscreenChanged = function(event)
        {
            if (callback)
                callback(event)
        };
        waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);

        var spanEnteredFullScreen = function() {
            testExpected("document.webkitIsFullScreen", true);
            testExpected("document.webkitCurrentFullScreenElement", span);
            callback = cancelledFullScreen;
            testExpected("window.open('about:blank')", null, "!=");
        };

        var cancelledFullScreen = function() {
            testExpected("document.webkitIsFullScreen", false);
            testExpected("document.webkitCurrentFullScreenElement", undefined);
            endTest();
        };

        var span = document.getElementsByTagName('span')[0];

        callback = spanEnteredFullScreen;
        runWithKeyDown(function(){span.webkitRequestFullScreen()});
    }
</script>
