test_streams_srcObject.html (1892B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test interactions of src and srcObject</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 <script type="text/javascript" src="manifest.js"></script> 8 </head> 9 <body onload="doTests()"> 10 <audio id="a1"></audio> 11 <audio id="a2"></audio> 12 <pre id="test"> 13 <script class="testbody" type="text/javascript"> 14 SimpleTest.waitForExplicitFinish(); 15 16 var doTest = srcObject => new Promise(resolve => { 17 var a = document.getElementById('a1'); 18 a.src = getPlayableAudio(gSmallTests).name; 19 var b = new Audio(); 20 21 var newSrc = a.src + "?2"; 22 b.src = newSrc; 23 is(b[srcObject], null, "Initial srcObject is null"); 24 var stream = a.mozCaptureStream(); 25 b[srcObject] = stream; 26 is(b[srcObject], stream, "Stream set correctly"); 27 try { 28 b[srcObject] = "invalid"; 29 ok(false, "Setting srcObject to an invalid value should throw."); 30 } catch (e) { 31 ok(e instanceof TypeError, "Exception should be a TypeError"); 32 } 33 is(b[srcObject], stream, "Stream not set to invalid value"); 34 is(b.src, newSrc, "src attribute not affected by setting srcObject"); 35 var step = 0; 36 b.addEventListener("loadedmetadata", function() { 37 if (step == 0) { 38 is(b.currentSrc, "", "currentSrc set to empty string while playing srcObject"); 39 b[srcObject] = null; 40 is(b[srcObject], null, "Stream set to null"); 41 // The resource selection algorithm will run again and choose b.src 42 } else if (step == 1) { 43 is(b.currentSrc, b.src, "currentSrc set to src now that srcObject is null"); 44 resolve(); 45 } 46 ++step; 47 }); 48 a.play(); 49 b.play(); 50 }); 51 52 var doTests = () => doTest("srcObject") 53 .catch(e => ok(false, "Unexpected error: " + e)) 54 .then(() => SimpleTest.finish()) 55 .catch(e => ok(false, "Coding error: " + e)); 56 57 </script> 58 </pre> 59 </body> 60 </html>