79 lines
No EOL
3 KiB
JavaScript
79 lines
No EOL
3 KiB
JavaScript
function runTest(config, qualifier) {
|
|
var testname = testnamePrefix(qualifier, config.keysystem)
|
|
+ ', setmediakeys again after playback';
|
|
|
|
var configuration = getSimpleConfigurationForContent(config.content);
|
|
|
|
if (config.initDataType && config.initData) {
|
|
configuration.initDataTypes = [config.initDataType];
|
|
}
|
|
|
|
async_test(function(test) {
|
|
var _video = config.video,
|
|
_access,
|
|
_mediaKeys,
|
|
_mediaKeySession,
|
|
_mediaSource;
|
|
|
|
function onFailure(error) {
|
|
forceTestFailureFromPromise(test, error);
|
|
}
|
|
|
|
function onMessage(event) {
|
|
config.messagehandler(event.messageType, event.message).then( function(response) {
|
|
_mediaKeySession.update(response).catch(onFailure).then(function() {
|
|
_video.play();
|
|
});
|
|
});
|
|
}
|
|
|
|
function onEncrypted(event) {
|
|
waitForEventAndRunStep('message', _mediaKeySession, onMessage, test);
|
|
_mediaKeySession.generateRequest( config.initData ? config.initDataType : event.initDataType,
|
|
config.initData || event.initData )
|
|
.catch(onFailure);
|
|
}
|
|
|
|
function playVideo()
|
|
{
|
|
return new Promise(function(resolve) {
|
|
_mediaKeySession = _mediaKeys.createSession('temporary');
|
|
waitForEventAndRunStep('encrypted', _video, onEncrypted, test);
|
|
_video.src = URL.createObjectURL(_mediaSource);
|
|
resolve('success');
|
|
});
|
|
}
|
|
|
|
navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) {
|
|
_access = access;
|
|
return _access.createMediaKeys();
|
|
}).then(function(result) {
|
|
_mediaKeys = result;
|
|
return _video.setMediaKeys(_mediaKeys);
|
|
}).then(function() {
|
|
return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true;
|
|
}).then(function( success ) {
|
|
return testmediasource(config);
|
|
}).then(function(source) {
|
|
_mediaSource = source;
|
|
return playVideo();
|
|
}).then(function(results) {
|
|
return _access.createMediaKeys();
|
|
}).then(function(result) {
|
|
_mediaKeys = result;
|
|
return waitForEvent('playing', _video);
|
|
}).then(test.step_func(function(result) {
|
|
assert_false(_video.ended);
|
|
return _video.setMediaKeys(_mediaKeys);
|
|
})).then(function() {
|
|
// Able to change MediaKeys while playing.
|
|
// This is not required to fail.
|
|
_video.src='';
|
|
test.done();
|
|
}, test.step_func(function(error) {
|
|
assert_in_array(error.name, ['InvalidStateError','NotSupportedError']);
|
|
_video.src='';
|
|
test.done();
|
|
})).catch(onFailure);
|
|
}, testname);
|
|
} |