<!DOCTYPE html><!-- webkit-test-runner [ ModernMediaControlsEnabled=false ] -->
<html>
    <head>
        <title>Selecting from a list of tracks</title>
        <script src="media-controls.js"></script>
        <script src="media-file.js"></script>
        <script src="video-test.js"></script>
        <script src="trackmenu-test.js"></script>
        <script>
            if (window.testRunner)
                testRunner.dumpAsText();

            function testMenu()
            {
                showTrackMenu();
                trackListItems = captionTrackMenuList();
                var matchingTracks = 0;
                for (var i = 0; i < video.textTracks.length; ++i) {
                    var kind = video.textTracks[i].kind;
                    if (kind == "captions" || kind == "descriptions" || kind == "subtitles")
                        ++matchingTracks;
                }
                consoleWrite("There are " + matchingTracks + " caption, description or subtitles tracks.");
                
                var expectedItemCount = matchingTracks + 2;
                consoleWrite("Because of \"Off\" and \"Auto\", there should be " + expectedItemCount + " items in the menu.");
                testExpected("trackListItems.length", expectedItemCount);
                endTest();
            }

            function start()
            {
                findMediaElement();
                video.src = findMediaFile('video', 'content/test');
                waitForEvent('canplaythrough', testMenu);
            }
        </script>
    </head>

    <body onload="start()">
        <p>Test that the track menu only shows captions, descriptions and subtitles.</p>
        <video width="500" height="300" controls>
            <track kind="captions" src="track/captions-webvtt/captions-fast.vtt" srclang="fr">
            <track kind="chapters" src="track/captions-webvtt/captions-fast.vtt" srclang="en">
            <track kind="descriptions" src="track/captions-webvtt/captions-fast.vtt" srclang="en">
            <track kind="metadata" src="track/captions-webvtt/captions-fast.vtt" srclang="en">
            <track kind="subtitles" src="track/captions-webvtt/captions-fast.vtt" srclang="ja">
        </video>
    </body>
</html>

