setmediakeys-again-after-resetting-src.js (3181B)
1 function runTest(config, qualifier) { 2 var testname = testnamePrefix(qualifier, config.keysystem) 3 + ', setmediakeys again after resetting src'; 4 5 var configuration = getSimpleConfigurationForContent(config.content); 6 7 if (config.initDataType && config.initData) { 8 configuration.initDataTypes = [config.initDataType]; 9 } 10 11 async_test(function(test) { 12 var _video = config.video, 13 _access, 14 _mediaKeys, 15 _mediaKeySession, 16 _mediaSource; 17 18 function onFailure(error) { 19 forceTestFailureFromPromise(test, error); 20 } 21 22 function onMessage(event) { 23 config.messagehandler(event.messageType, event.message).then(function(response) { 24 _mediaKeySession.update(response).catch(onFailure).then(function() { 25 _video.play(); 26 }); 27 }); 28 } 29 30 function onEncrypted(event) { 31 waitForEventAndRunStep('message', _mediaKeySession, onMessage, test); 32 _mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType, 33 config.initData || event.initData ) 34 .catch(onFailure); 35 } 36 37 function playVideoAndWaitForTimeupdate() 38 { 39 return new Promise(function(resolve) { 40 testmediasource(config).then(function(source) { 41 _mediaKeySession = _mediaKeys.createSession('temporary'); 42 _video.src = URL.createObjectURL(source); 43 }); 44 _video.addEventListener('timeupdate', function listener(event) { 45 if (event.target.currentTime < (config.duration || 1)) 46 return; 47 _video.removeEventListener('timeupdate', listener); 48 resolve('success'); 49 }); 50 }); 51 } 52 53 waitForEventAndRunStep('encrypted', _video, onEncrypted, test); 54 navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) { 55 _access = access; 56 return _access.createMediaKeys(); 57 }).then(function(result) { 58 _mediaKeys = result; 59 return _video.setMediaKeys(_mediaKeys); 60 }).then(function() { 61 return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true; 62 }).then(function( success ) { 63 return playVideoAndWaitForTimeupdate(); 64 }).then(function(results) { 65 return _access.createMediaKeys(); 66 }).then(function(result) { 67 _mediaKeys = result; 68 _video.src = ''; 69 return _video.setMediaKeys(_mediaKeys); 70 }).then(function() { 71 return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true; 72 }).then(function( success ) { 73 return playVideoAndWaitForTimeupdate(); 74 }).then(function() { 75 _video.src = ''; 76 test.done(); 77 }).catch(onFailure); 78 }, testname); 79 }