| <!doctype html> |
| <title>TextTrackCue display cue</title> |
| |
| <div></div> |
| <script src=../../../resources/testharness.js></script> |
| <script src=../../../resources/testharnessreport.js></script> |
| <script src=../../media-controls.js></script> |
| <script src=../../media-file.js></script> |
| <script> |
| if (window.internals) |
| internals.settings.setGenericCueAPIEnabled(true); |
| |
| function createValidCueFragment(text) |
| { |
| let cueNode = document.createElement('span'); |
| cueNode.setAttribute('cue', ''); |
| cueNode.innerText = text; |
| |
| let backgroundNode = document.createElement('div'); |
| backgroundNode.setAttribute('cuebackground', ''); |
| backgroundNode.appendChild(cueNode); |
| |
| fragment = document.createDocumentFragment(); |
| fragment.appendChild(backgroundNode); |
| |
| return fragment; |
| } |
| |
| async_test(test => { |
| |
| video = document.createElement('video'); |
| video.controls = true; |
| |
| track = video.addTextTrack('subtitles'); |
| track.default = true; |
| track.mode = 'showing'; |
| |
| document.body.appendChild(video); |
| |
| let cue1Text = 'First cue'; |
| let cue1 = new TextTrackCue(0, 1.1, createValidCueFragment(cue1Text)); |
| cue1.id = "one"; |
| track.addCue(cue1); |
| assert_equals(track.cues.length, 1, 'only one cue'); |
| |
| let cue2Text = 'Second cue'; |
| let cue2 = new TextTrackCue(1, 2, createValidCueFragment(cue2Text)); |
| cue2.id = "two"; |
| track.addCue(cue2); |
| assert_equals(track.cues.length, 2, "track.cues.length includes second cue"); |
| |
| assert_equals(track.cues[0].id, 'one', 'cue 1 should be first'); |
| assert_equals(track.cues[1].id, 'two', 'cue 2 should be second'); |
| |
| video.addEventListener('canplay', event => { |
| |
| let seekCount = 0; |
| let step = _ => { |
| let cueContainer = mediaControlsElement(internals.shadowRoot(video).firstChild, "-webkit-media-text-track-container"); |
| switch (++seekCount) { |
| case 1: |
| assert_equals(track.activeCues.length, 1, "only one active cue"); |
| assert_equals(cueContainer.innerText, cue1Text, "cue one is visible"); |
| video.currentTime = track.cues[1].startTime; |
| break; |
| |
| case 2: |
| assert_equals(track.activeCues.length, 2, "two active cues"); |
| assert_equals(cueContainer.innerText, `${cue1Text}\n${cue2Text}`, "cues one and two are visible"); |
| video.currentTime = track.cues[1].endTime - .5; |
| break; |
| |
| case 3: |
| assert_equals(track.activeCues.length, 1, "only one active cue"); |
| assert_equals(cueContainer.innerText, cue2Text, "cue two is visible"); |
| video.currentTime = track.cues[1].endTime + 1; |
| break; |
| |
| case 4: |
| assert_equals(track.activeCues.length, 0, "no active cues"); |
| assert_equals(cueContainer.innerText, '', "no cues are visible"); |
| test.done(); |
| break; |
| } |
| } |
| video.addEventListener('seeked', test.step_func(step)); |
| video.currentTime = track.cues[0].startTime; |
| }); |
| |
| video.src = findMediaFile('video', '../../content/test'); |
| |
| }, 'Cues are displayed'); |
| |
| </script> |