test_eme_waitingforkey.html (2476B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test Encrypted Media Extensions</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 <script type="text/javascript" src="https://example.com:443/tests/dom/media/test/eme.js"></script> 9 </head> 10 <body> 11 <pre id="test"> 12 <script class="testbody" type="text/javascript"> 13 /* import-globals-from eme.js */ 14 var manager = new MediaTestManager; 15 16 function startTest(test, token) 17 { 18 manager.started(token); 19 20 let v = document.createElement("video"); 21 document.body.appendChild(v); 22 23 var gotWaitingForKey = 0; 24 var gotOnwaitingforkey = 0; 25 26 let waitForKey = new EMEPromise; 27 v.addEventListener("waitingforkey", function() { 28 gotWaitingForKey += 1; 29 waitForKey.resolve(); 30 }); 31 32 v.onwaitingforkey = function() { 33 gotOnwaitingforkey += 1; 34 }; 35 36 v.addEventListener("loadedmetadata", function() { 37 ok(SpecialPowers.do_lookupGetter(v, "isEncrypted").apply(v), 38 TimeStamp(token) + " isEncrypted should be true"); 39 is(v.isEncrypted, undefined, "isEncrypted should not be accessible from content"); 40 }); 41 42 let finish = new EMEPromise; 43 v.addEventListener("ended", function() { 44 ok(true, TimeStamp(token) + " got ended event"); 45 // We expect only one waitingForKey as we delay until all sessions are ready. 46 // I.e. one waitingForKey should be fired, after which, we process all sessions, 47 // so it should not be possible to be blocked by a key after that point. 48 ok(gotWaitingForKey == 1, "Expected number 1 wait, got: " + gotWaitingForKey); 49 ok(gotOnwaitingforkey == gotWaitingForKey, "Should have as many event listener calls as event handler calls, got: " + gotOnwaitingforkey); 50 51 finish.resolve(); 52 }); 53 54 Promise.all([ 55 LoadInitData(v, test, token), 56 CreateAndSetMediaKeys(v, test, token), 57 LoadTest(test, v, token), 58 waitForKey.promise]) 59 .then(values => { 60 let initData = values[0]; 61 return ProcessInitData(v, test, token, initData); 62 }) 63 .then(sessions => { 64 Log(token, "Updated all sessions, loading complete -> Play"); 65 v.play(); 66 finish.promise.then(() => CloseSessions(v, sessions)); 67 return finish.promise; 68 }) 69 .catch(reason => ok(false, reason)) 70 .then(() => manager.finished(token)); 71 } 72 73 SimpleTest.waitForExplicitFinish(); 74 manager.runTests(gEMETests, startTest); 75 </script> 76 </pre> 77 </body> 78 </html>