<!DOCTYPE html>
<title>Element#requestFullscreen() twice</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="../trusted-click.js"></script>
<div id="log"></div>
<script>
    promise_test(async (t) => {
        const div = document.querySelector("div");
        await trusted_click(document.body);
        const p = div.requestFullscreen();
        assert_equals(
            document.fullscreenElement,
            null,
            "fullscreenElement after first requestFullscreen()"
        );
        const rejectedPromises = [
            promise_rejects_js(t, TypeError, div.requestFullscreen()),
            promise_rejects_js(t, TypeError, div.requestFullscreen()),
        ];
        await Promise.all([p, fullScreenChange()]);
        assert_equals(
            document.fullscreenElement,
            div,
            "fullscreenElement after entering fullscreen"
        );
        // Ensure that there's are not more changes fullscreenchange event.
        document.onfullscreenchange = t.unreached_func(
            "second fullscreenchange event"
        );
        await Promise.all(rejectedPromises);
        await new Promise((r) => requestAnimationFrame(r));
    }, "requestFullscreen() multiple times after going fullscreen");
</script>
