diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
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 | 98 |
1 files changed, 98 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 0000000000..ef44477b16 --- /dev/null +++ b/testing/web-platform/tests/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js @@ -0,0 +1,98 @@ +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, + _usingMediaKeys2 = false;; + + // 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); + // According to the specification, support for changing the Media Keys object after + // the src attribute on the video element has been set is optional. The following operation + // may therefore either succeed or fail. We handle both cases. + return _video.setMediaKeys(_mediaKeys2); + }).then(test.step_func(function() { + // Changing the Media Keys object succeeded + _usingMediaKeys2 = true; + assert_equals(_video.mediaKeys, _mediaKeys2); + // Return something so the promise resolves properly. + return Promise.resolve(); + }), test.step_func(function(error) { + // Changing the Media Keys object failed + _usingMediaKeys2 = false; + assert_equals(_video.mediaKeys, _mediaKeys1); + // The specification allows either NotSupportedError or InvalidStateError depending on + // whether the failure was because changing Media Keys object is not supported + // or just not allowed at this time, respectively. + assert_in_array(error.name, ['InvalidStateError','NotSupportedError']); + assert_not_equals(error.message, ''); + // Return something so the promise resolves properly. + return Promise.resolve(); + })).then(function() { + // According to the specification, support for clearing the Media Keys object associated + // with the video element is optional. The following operation + // may therefore either succeed or fail. We handle both cases. + return _video.setMediaKeys(null); + }).then(test.step_func(function() { + // Clearing the media keys succeeded + assert_equals(_video.mediaKeys, null); + test.done(); + }), test.step_func(function(error) { + // Clearing the media keys failed + if(!_usingMediaKeys2) { + assert_equals(_video.mediaKeys, _mediaKeys1); + } else { + assert_equals(_video.mediaKeys, _mediaKeys2); + } + // The specification allows either NotSupportedError or InvalidStateError depending on + // whether the failure was because changing Media Keys object is not supported + // or just not allowed at this time, respectively. + assert_in_array(error.name, ['InvalidStateError','NotSupportedError']); + assert_not_equals(error.message, ''); + test.done(); + })).catch(onFailure); + }, testname); +} |