| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
| |
| <script src=../video-test.js></script> |
| <script> |
| |
| async function testTracks() |
| { |
| findMediaElement(); |
| |
| if (window.internals) { |
| run("internals.settings.setShouldDisplayTrackKind('Captions', false)"); |
| run("internals.settings.setShouldDisplayTrackKind('Subtitles', true)"); |
| run("internals.setUserPreferredLanguages(['en'])"); |
| run("internals.setPrimaryAudioTrackLanguageOverride('fr')"); |
| run("internals.setCaptionDisplayMode('ForcedOnly')"); |
| } |
| video.src = '../content/CC+Subtitles.mov'; |
| |
| await waitFor(video, 'canplaythrough'); |
| |
| consoleWrite("<br><i>** Forced tracks should be in .textTracks, but not in the menu<" + "/i>"); |
| testExpected("video.textTracks.length", 11); |
| |
| consoleWrite("<br><i>** Only the 'fr' forced track should be showing<" + "/i>"); |
| testExpected("video.textTracks[0].language", "en"); |
| testExpected("video.textTracks[0].kind", "subtitles"); |
| testExpected("video.textTracks[0].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[1].language", "en"); |
| testExpected("video.textTracks[1].kind", "forced"); |
| testExpected("video.textTracks[1].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[2].language", "fr"); |
| testExpected("video.textTracks[2].kind", "subtitles"); |
| testExpected("video.textTracks[2].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[3].language", "fr"); |
| testExpected("video.textTracks[3].kind", "forced"); |
| testExpected("video.textTracks[3].mode", "showing"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[4].language", "es"); |
| testExpected("video.textTracks[4].kind", "subtitles"); |
| testExpected("video.textTracks[4].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[5].language", "es"); |
| testExpected("video.textTracks[5].kind", "forced"); |
| testExpected("video.textTracks[5].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[6].language", "de"); |
| testExpected("video.textTracks[6].kind", "subtitles"); |
| testExpected("video.textTracks[6].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[7].language", "de"); |
| testExpected("video.textTracks[7].kind", "forced"); |
| testExpected("video.textTracks[7].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[8].language", "en"); |
| testExpected("video.textTracks[8].kind", "captions"); |
| testExpected("video.textTracks[8].mode", "disabled"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[9].language", "es"); |
| testExpected("video.textTracks[9].kind", "chapters"); |
| testExpected("video.textTracks[9].mode", "hidden"); |
| consoleWrite(""); |
| |
| testExpected("video.textTracks[10].language", "en"); |
| testExpected("video.textTracks[10].kind", "chapters"); |
| testExpected("video.textTracks[10].mode", "hidden"); |
| consoleWrite(""); |
| |
| consoleWrite("<i>** A cue should become active when current time is within its active range<" + "/i>"); |
| run("video.currentTime = 9.5"); |
| let result = await Promise.race([ |
| Promise.all([ |
| waitFor(video, 'seeked', true), |
| waitFor(video.textTracks[3], 'cuechange', true) |
| ]), |
| new Promise((resolve, reject) => { setTimeout(resolve, 5000, 'timeout'); }) |
| ]); |
| |
| if (result === 'timeout') { |
| consoleWrite(''); |
| failTest('Test timed out.'); |
| } |
| |
| consoleWrite('EVENT(seeked)'); |
| consoleWrite('EVENT(cuechange)'); |
| |
| testExpected('video.textTracks[3].activeCues.length === 1', true); |
| consoleWrite(''); |
| |
| endTest(); |
| } |
| </script> |
| </head> |
| <body onload='testTracks()'> |
| <p>Tests that forced subtitles are enable automatically.</p> |
| <video width=640 height=360 controls> |
| </video> |
| </body> |
| </html> |