<!doctype html>
<title>Test that the controls attribute is not affected by fullscreen</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<video></video>
<script>
async_test(function(t) {
    var video = document.querySelector("video");
    video.src = "content/test.ogv";
    video.onloadeddata = t.step_func(function() {
        assert_false(video.controls);
        video.onwebkitfullscreenchange = t.step_func_done(function() {
            assert_false(video.controls);
        });

        document.onclick = t.step_func(function() {
            video.webkitRequestFullscreen();
        });
        eventSender.mouseDown();
        eventSender.mouseUp();
    });
});
</script>