chromium/third_party/blink/web_tests/media/track/track-language-preference.html

<!DOCTYPE html>
<title>Tests that the user's preferred languages are honored.</title>
<video></video>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
    var video = document.querySelector("video");
    t.add_cleanup(function() {
        internals.setUserPreferredLanguages([]);
        internals.settings.setTextTrackKindUserPreference("default");
    });

    // Set user preferred languages.
    internals.setUserPreferredLanguages(['jp', 'es-ES', 'en', 'fr']);
    internals.settings.setTextTrackKindUserPreference('captions');

    var timer;
    var expectedLanguage;
    var testList =
    {
        currentTestIndex : -1,
        tests :
        [
            {
                // A track language matches one of the user's preferred languages exactly.
                languages : ['fr', 'en', 'jp'],
                expectedLanguage : "jp"
            },
            {
                // A track language without locale exactly matches
                // one of the user's preferred languages.
                languages : ['fr-CH', 'da'],
                expectedLanguage : "fr-CH"
            },
            {
                // A track language without locale matches one of
                // the user's preferred languages without locale.
                languages : ['fr', 'es-MX'],
                expectedLanguage : "es-MX"
            },
            {
                // No track language matches any of the user's preferred languages.
                languages : ['fa', 'ru', 'no'],
                expectedLanguage : "fa"
            }
        ]
    };

    runNextTest();

    function runNextTest() {
        testList.currentTestIndex++;
        if (testList.currentTestIndex >= testList.tests.length) {
            var tracks = document.querySelectorAll('track');
            assert_equals(video.textTracks.length, tracks.length);
            t.done();
            return;
        }

        createTrackElements(testList.tests[testList.currentTestIndex].languages);
    }

    function createTrackElements(languages) {
        var tracks = document.querySelectorAll('track');
        for (var index = 0; index < tracks.length; ++index)
            video.removeChild(tracks[index]);

        for (var index = 0; index < languages.length; ++index)
            createTrackElement(languages[index], "captions-webvtt/tc004-webvtt-file.vtt");
    }

    function createTrackElement(language, src) {
        var track = document.createElement('track');
        track.setAttribute('kind', "captions");
        track.setAttribute('src', src);
        track.setAttribute('srclang', language);
        track.onload = t.step_func(trackLoaded);
        video.appendChild(track);
    }

    function trackLoaded() {
        var track = event.target;
        assert_equals(track.readyState, HTMLTrackElement.LOADED);
        assert_equals(track.srclang, testList.tests[testList.currentTestIndex].expectedLanguage);

        timer = setTimeout(runNextTest, 200);
    }
});
</script>