<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <style type="text/css">
        video::-webkit-media-text-track-display {
          padding: 15px;
        }
        </style>

        <script src=../media-file.js></script>
        <script src=../media-controls.js></script>
        <script src=../video-test.js></script>

        <script>
        var cueContainerBottomPoint;
        var cueDisplayBottomPoint;

        function startTest()
        {
            if (!window.internals) {
                consoleWrite("<br><b>** This test only works in DRT! **<" + "/b>");
                return;
            }

            var cueContainerElement = textTrackDisplayElement(video);
            var cueDisplayElement = textTrackDisplayElement(video, 'display', 0);

            cueDisplayBottomPoint = cueDisplayElement.offsetTop + cueDisplayElement.offsetHeight;
            cueContainerBottomPoint = cueContainerElement.offsetTop + cueContainerElement.offsetHeight;

            consoleWrite("<br>** Cue should be displayed entirely within the container. **");
            testExpected("cueDisplayBottomPoint <= cueContainerBottomPoint", true);
            endTest();
        }

        function loaded()
        {
            consoleWrite("Rendering text track cue line with padding set.<br>");
            findMediaElement();

            testTrack = document.querySelector('track');
            video.src = findMediaFile('video', '../content/test');

            waitForEvent('seeked', startTest);
            waitForEvent('canplaythrough', function() {
                video.currentTime = .25;
            });
        }

        setCaptionDisplayMode('Automatic');
        </script>
    </head>
    <body onload="loaded()">
        <video controls>
            <track src="captions-webvtt/captions-fast.vtt" kind="captions" default>
        </video>
    </body>
</html>
