<!DOCTYPE html>
<html>
<body>
<div id="host">full screen content</div>
<div style="position: fixed; top: 100px; left: 100px;">foobar</div>
<div style="will-change: transform;">foobar</div>
<pre id=layers></pre>
<button>Enter fullscreen</button>
<script src="../resources/js-test.js"></script>
<script>

description("Test that only elements in fullscreen subtree get layer backed.");

function goFullscreen() {
    host.webkitRequestFullscreen();
    setTimeout(function () {
        if (done)
            return;

        testFailed('webkitfullscreenchange was not fired');
        finishJSTest();
    }, 2000);
}

let done = false;
function finalizeTest() {
    if (done)
        return;
    done = true;

    if (testRunner)
        testRunner.dumpAsText();

    if (window.internals)
        layers.innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_BACKING_STORE_ATTACHED);

    finishJSTest();
}

host.addEventListener('webkitfullscreenchange', finalizeTest);

let button = document.querySelector('button');
button.onclick = goFullscreen;

if (window.eventSender) {
    jsTestIsAsync = true;
    eventSender.mouseMoveTo(button.offsetLeft + 5, button.offsetTop + 5);
    eventSender.mouseDown();
    eventSender.mouseUp();
}

</script>
</body>
</html>
