<!DOCTYPE html>
<html>
    <head>
        <script src=media-file.js></script>
        <script src=video-test.js></script>
        <script>
            var canplaythrough1 = false;
            var canplaythrough2 = false;
            var start1 = 0;
            var start2 = 0;
            var delta1 = 0;
            var delta2 = 0;

            function checkElementState() {
                if (canplaythrough1 && canplaythrough2) {
                    if (delta1 * 5 > delta2)
                        endTest();
                    else
                        failTest("Loading a data URL takes too long time. delta1 = " + delta1 + ", delta2 = " + delta2 + ".");
                }
            }

            function runTest() {
                const videos = document.querySelectorAll('video');
                const video1 = videos[0];
                const video2 = videos[1];

                const url = findMediaFile("video", "content/long-test");

                video1.oncanplaythrough = () => {
                    canplaythrough1 = true;
                    delta1 = Date.now() - start1;
                    checkElementState();
                }

                video2.oncanplaythrough = () => {
                    canplaythrough2 = true;
                    delta2 = Date.now() - start2;
                    checkElementState();
                }

                const request = new XMLHttpRequest();
                request.open('GET', url, true);
                request.responseType = 'blob';

                request.onload = () => {
                    const reader = new FileReader();
                    reader.onload = event => {
                        const createdDataUrl = event.target.result;
                        video2.src = createdDataUrl;
                        video1.src = url;

                        const now = Date.now();
                        start1 = now;
                        start2 = now;
                    };
                    reader.readAsDataURL(request.response);
                };
                request.send();

                setTimeout(() => failTest("Cannot complete the test in 10 seconds."), 10000);
            }
        </script>
    </head>
    <body onload="runTest()">
        <div>
            This tests that a video element loads a blob URL in a reasonable amount of time (should be shorter than 5x of the time to load the binary form of the media file).
        </div>
        <video controls></video>
        <video controls></video>
    </body>
</html>
