<body>
<script src="full-screen-test.js"></script>
<style>
    :-webkit-full-screen { background: lime; }
    :-webkit-full-screen-document { color: blue; }
    :root:-webkit-full-screen-document:not(:-webkit-full-screen) { background: red; }
</style>
<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 span = document.getElementsByTagName('span')[0];
    
        testExpected("document.defaultView.getComputedStyle(span, null).getPropertyValue('background-color')", "rgba(0, 0, 0, 0)");
        testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('background-color')", "rgba(0, 0, 0, 0)");
        testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('color')", "rgb(0, 0, 0)");
    
        var spanEnteredFullScreen = function(event) {
            testExpected("document.webkitCurrentFullScreenElement", span);
            testExpected("document.defaultView.getComputedStyle(span, null).getPropertyValue('background-color')", "rgb(0, 255, 0)");
            testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('background-color')", "rgb(255, 0, 0)");
            testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('color')", "rgb(0, 0, 255)");
        
            callback = documentEnteredFullScreen;
            runWithKeyDown(function(){document.documentElement.webkitRequestFullScreen()});
        };
    
        var documentEnteredFullScreen = function(event) {
            testExpected("document.webkitCurrentFullScreenElement", document.documentElement);
            testExpected("document.defaultView.getComputedStyle(span, null).getPropertyValue('background-color')", "rgba(0, 0, 0, 0)");
            testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('background-color')", "rgb(0, 255, 0)");
            testExpected("document.defaultView.getComputedStyle(document.documentElement, null).getPropertyValue('color')", "rgb(0, 0, 255)");
            endTest();
        };
    
        callback = spanEnteredFullScreen;
        runWithKeyDown(function(){span.webkitRequestFullScreen()});
    }
</script>
