<!DOCTYPE html>
<html>
    <head>
        <script src=../resources/gc.js></script>
        <script>
        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        function removeNodes(start, end) {
            var range = document.createRange();
            range.setStart(start, 0);
            range.setEnd(end, 0);
            range.deleteContents();
        }

        function beforeLoadFunc()
        {
            document.removeEventListener("beforeload", beforeLoadFunc, true);
            var start = document.getElementById("start");
            var end = document.getElementById("end");
            removeNodes(start, end);

            gc();
            if (window.testRunner)
                setTimeout("testRunner.notifyDone()", 0);
        }

        document.addEventListener("beforeload", beforeLoadFunc, true);
        </script>
    </head>
    <body>
    <video controls autoplay>
        <b id="start"></b>
        <source src="content/test.mp4" type="video/mp4">
        <source src="content/test.ogv" type="video/ogg">
        <b id="end"></b>
    </video>
    <div>Test passes if it does not crash.</div>
    </body>
</html>
