Index: third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/setmediakeys-multiple-times-with-different-mediakeys.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ef44477b16fd350c735dac2aa40e352ea09ad7b1 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/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); |
+} |