<!DOCTYPE HTML> <html> <head> <title>Video controls test - VTT</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> </head> <body> <p id="display"></p> <div id="content"> <video id="video" controls preload="auto"></video> </div> <pre id="test"> <script clas="testbody" type="application/javascript"> SimpleTest.waitForExplicitFinish(); const domUtils = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"]. getService(SpecialPowers.Ci.inIDOMUtils); const video = document.getElementById("video"); const ccBtn = getElementByAttribute("class", "closedCaptionButton"); const ttList = getElementByAttribute("class", "textTrackList"); const testCases = []; testCases.push(() => new Promise(resolve => { is(ccBtn.getAttribute("hidden"), "true", "CC button should hide"); resolve(); })); testCases.push(() => new Promise(resolve => { video.addTextTrack("descriptions", "English", "en"); video.addTextTrack("chapters", "English", "en"); video.addTextTrack("metadata", "English", "en"); SimpleTest.executeSoon(() => { is(ccBtn.getAttribute("hidden"), "true", "CC button should hide if no supported tracks provided"); resolve(); }); })); testCases.push(() => new Promise(resolve => { const sub = video.addTextTrack("subtitles", "English", "en"); sub.mode = "disabled"; SimpleTest.executeSoon(() => { is(ccBtn.getAttribute("hidden"), "", "CC button should show"); is(ccBtn.getAttribute("enabled"), "", "CC button should be disabled"); resolve(); }); })); testCases.push(() => new Promise(resolve => { const subtitle = video.addTextTrack("subtitles", "English", "en"); subtitle.mode = "showing"; SimpleTest.executeSoon(() => { is(ccBtn.getAttribute("enabled"), "true", "CC button should be enabled"); subtitle.mode = "disabled"; resolve(); }); })); testCases.push(() => new Promise(resolve => { const caption = video.addTextTrack("captions", "English", "en"); caption.mode = "showing"; SimpleTest.executeSoon(() => { is(ccBtn.getAttribute("enabled"), "true", "CC button should be enabled"); resolve(); }); })); testCases.push(() => new Promise(resolve => { synthesizeMouseAtCenter(ccBtn, {}); SimpleTest.executeSoon(() => { is(ttList.hasAttribute("hidden"), false, "Texttrack menu should show up"); is(ttList.lastChild.getAttribute("on"), "true", "The last added item should be highlighted"); resolve(); }); })); testCases.push(() => new Promise(resolve => { const tt = ttList.children[1]; isnot(tt.getAttribute("on"), "true", "Item should be off before click"); synthesizeMouseAtCenter(tt, {}); SimpleTest.executeSoon(() => { is(tt.getAttribute("on"), "true", "Selected item should be enabled"); is(ttList.getAttribute("hidden"), "true", "Should hide texttrack menu once clicked on an item"); resolve(); }); })); function executeTestCases(tasks) { return tasks.reduce((promise, task) => promise.then(task), Promise.resolve()); } function getElementByAttribute(aName, aValue) { const videoControl = domUtils.getChildrenForNode(video, true)[1]; return SpecialPowers.wrap(document) .getAnonymousElementByAttribute(videoControl, aName, aValue); } function loadedmetadata() { executeTestCases(testCases).then(SimpleTest.finish); } function startMediaLoad() { video.src = "seek_with_sound.ogg"; video.addEventListener("loadedmetadata", loadedmetadata, false); } function loadevent() { SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, startMediaLoad); } window.addEventListener("load", loadevent, false); </script> </pre> </body> </html>