diff options
Diffstat (limited to 'testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js')
-rw-r--r-- | testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js b/testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js new file mode 100644 index 000000000..6f0bd93f2 --- /dev/null +++ b/testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js @@ -0,0 +1,86 @@ +function runTest(config, qualifier) { + var testname = testnamePrefix( qualifier, config.keysystem ) + + ', setmediakeys multiple times with different mediakeys'; + + var configuration = getSimpleConfigurationForContent( config.content ); + + async_test (function (test) { + var _video = config.video, + _access, + _mediaKeys1, + _mediaKeys2, + fail; + + // 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) { + _access = access; + return _access.createMediaKeys(); + }).then(test.step_func(function(result) { + _mediaKeys1 = result; + assert_not_equals(_mediaKeys1, null); + // Create a second mediaKeys. + return _access.createMediaKeys(); + })).then(test.step_func(function(result) { + _mediaKeys2 = result; + assert_not_equals(_mediaKeys2, null); + // Set _mediaKeys1 on video. + return _video.setMediaKeys(_mediaKeys1); + })).then(test.step_func(function() { + assert_equals(_video.mediaKeys, _mediaKeys1); + // Set _mediaKeys2 on video (switching MediaKeys). + return _video.setMediaKeys(_mediaKeys2); + })).then(test.step_func(function() { + assert_equals(_video.mediaKeys, _mediaKeys2); + // Clear mediaKeys from video. + return _video.setMediaKeys(null); + })).then(test.step_func(function() { + assert_equals(_video.mediaKeys, null); + // Set _mediaKeys1 on video again. + return _video.setMediaKeys(_mediaKeys1); + })).then(test.step_func(function() { + assert_equals(_video.mediaKeys, _mediaKeys1); + return testmediasource(config); + })).then(function(source) { + // Set src attribute on Video Element + _video.src = URL.createObjectURL(source); + // Set mediaKeys2 on video element (switching MediaKeys) need not + // fail after src attribute is set. + return _video.setMediaKeys(_mediaKeys2); + })).then(test.step_func(function() { + // Switching setMediaKeys after setting src attribute on video element + // is not required to fail. + assert_equals(_video2.mediaKeys, _mediaKeys2); + fail = false; + return Promise.resolve(); + }, test.step_func(function(error) { + fail = true; + assert_equals(_video.mediaKeys, _mediaKeys1); + assert_in_array(error.name, ['InvalidStateError','NotSupportedError']); + assert_not_equals(error.message, ''); + // Return something so the promise resolves properly. + return Promise.resolve(); + })).then(function() { + // Set null mediaKeys on video (clearing MediaKeys) not + // supported after src attribute is set. + return _video.setMediaKeys(null); + }).then(test.step_func(function() { + assert_unreached('Clearing mediaKeys after setting src should have failed.'); + }), test.step_func(function(error) { + if(fail) { + assert_equals(_video.mediaKeys, _mediaKeys1); + } else { + assert_equals(_video.mediaKeys, _mediaKeys2); + } + assert_is_array(error.name, ['InvalidStateError','ReferenceError']); + assert_not_equals(error.message, ''); + test.done(); + })).catch(onFailure); + }, testname); +}
\ No newline at end of file |