function runTest(config, qualifier) { var testname = testnamePrefix( qualifier, config.keysystem ) + ', setmediakeys multiple times with the same mediakeys'; var configuration = getSimpleConfigurationForContent( config.content ); if ( config.initDataType && config.initData ) { configuration.initDataTypes = [ config.initDataType ]; } async_test (function (test) { var _video = config.video, _mediaKeys; // Test MediaKeys assignment. assert_equals(_video.mediaKeys, null); assert_equals(typeof _video.setMediaKeys, 'function'); function onFailure(error) { forceTestFailureFromPromise(test, error); } navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) { return access.createMediaKeys(); }).then(function(result) { _mediaKeys = result; // Set mediaKeys for first time on video should work. return _video.setMediaKeys(_mediaKeys); }).then(function(result) { assert_equals(_video.mediaKeys, _mediaKeys); // Set mediaKeys on video again should return a resolved promise. return _video.setMediaKeys(_mediaKeys); }).then(function (result) { assert_equals(_video.mediaKeys, _mediaKeys); return testmediasource(config); }).then(function(source) { // Set src attribute on Video Element _video.src = URL.createObjectURL(source); // Set mediaKeys again on video should still return a resolved promise. return _video.setMediaKeys(_mediaKeys); }).then(function() { assert_equals(_video.mediaKeys, _mediaKeys); test.done(); }).catch(onFailure); }, testname); }