summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/embedded-content/media-elements/track/track-element/track-mode-not-changed-by-new-track.html
blob: 3ec47a39e2f229e48c3ae14ec6428c88931013a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html>
<title>A track appended after the initial track configuration does not change other tracks</title>
<script src="/common/media.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<video>
    <track kind="metadata" src="resources/metadata.vtt">
</video>
<script>
async_test(function(t) {
    var video = document.querySelector('video');

    var track1 = document.querySelectorAll('track')[0];
    assert_equals(track1.readyState, HTMLTrackElement.NONE);
    assert_equals(track1.track.mode, 'disabled');

    video.src = getVideoURI('/media/test');
    video.oncanplaythrough = t.step_func(canplaythrough);
    track1.onload = t.step_func(metadataTrackLoaded);

    function canplaythrough() {
        // check initial metadata track state.
        assert_equals(track1.readyState, HTMLTrackElement.NONE);
        assert_equals(track1.track.mode, 'disabled');
        assert_equals(track1.track.cues, null);
        track1.track.mode = 'hidden';
    }

    function metadataTrackLoaded() {
        // check metadata track state.
        assert_equals(track1.readyState, HTMLTrackElement.LOADED);
        assert_equals(track1.track.mode, 'hidden');
        assert_equals(track1.track.cues.length, 12);
        assert_equals(track1.track.cues[11].startTime, 22);

        // Add a caption track, and explicitly enable it.
        track2 = document.createElement('track');
        track2.setAttribute('kind', 'captions');
        track2.setAttribute('default', 'default');
        track2.setAttribute('src', 'resources/webvtt-file.vtt');
        track2.track.mode = 'showing';
        track2.onload = t.step_func(captionsTrackLoaded);
        video.appendChild(track2);
    }

    function captionsTrackLoaded() {
        // Check that metadata track state has not changed.
        assert_equals(track1.readyState, HTMLTrackElement.LOADED);
        assert_equals(track1.track.mode, 'hidden');
        // and that the caption track state is correct.
        assert_equals(track2.readyState, HTMLTrackElement.LOADED);
        assert_equals(track2.track.mode, 'showing');

        video.textTracks.onaddtrack = t.step_func_done(trackAdded);
        // add a subtitle track with video.addTextTrack().
        track3 = video.addTextTrack('subtitles', 'Subtitle Track', 'en');
        track3.mode = 'showing';
    }

    function trackAdded(event) {
        // Check that metadata track state has not changed.
        assert_equals(track1.readyState, HTMLTrackElement.LOADED);
        assert_equals(track1.track.mode, 'hidden');
        // and that the caption track state has not changed.
        assert_equals(track2.readyState, HTMLTrackElement.LOADED);
        assert_equals(track2.track.mode, 'showing');
        // and that the subtitle track state is correct.
        assert_equals(event.target, video.textTracks);
        assert_true(event instanceof window.TrackEvent);
        assert_equals(event.track, video.textTracks[video.textTracks.length - 1]);
        assert_equals(track3.mode, 'showing');
    }
});
</script>