Chromium Code Reviews| Index: third_party/WebKit/LayoutTests/media/encrypted-media/encrypted-media-reset-src-during-setmediakeys.html |
| diff --git a/third_party/WebKit/LayoutTests/media/encrypted-media/encrypted-media-reset-src-during-setmediakeys.html b/third_party/WebKit/LayoutTests/media/encrypted-media/encrypted-media-reset-src-during-setmediakeys.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8aee9ea5bf5f0a4260e88cff55a4d6fbed9f773e |
| --- /dev/null |
| +++ b/third_party/WebKit/LayoutTests/media/encrypted-media/encrypted-media-reset-src-during-setmediakeys.html |
| @@ -0,0 +1,69 @@ |
| +<!DOCTYPE html> |
| +<html> |
| + <head> |
| + <title>Reset src during setMediaKeys()</title> |
| + <script src="encrypted-media-utils.js"></script> |
| + <script src="../../resources/testharness.js"></script> |
| + <script src="../../resources/testharnessreport.js"></script> |
| + </head> |
| + <body> |
| + <video></video> |
| + <script> |
| + async_test(function(test) |
| + { |
| + var mediaKeys; |
| + var video = document.querySelector('video'); |
| + assert_not_equals(video, null); |
| + var encryptedEventIndex = 0; |
| + |
| + // Content to be played. These files must be the same format. |
| + var content = '../content/test-encrypted.webm'; |
| + var alternateContent = '../content/test-encrypted-different-av-keys.webm'; |
| + |
| + function setMediaKeys() { |
| + // Create a MediaKeys object and assign it to video. |
| + video.setMediaKeys(mediaKeys) |
| + .then(function(result) { |
| + // setMediaKeys() should succeed even if src is reset before setMediaKeys() promise is resolved. |
| + assert_not_equals(video.mediaKeys, null, 'set successfully'); |
| + assert_true(video.mediaKeys === mediaKeys); |
| + }) |
| + .catch(function(error) { |
| + forceTestFailureFromPromise(test, error); |
| + }); |
| + } |
| + |
| + var onEncrypted = function(event) |
| + { |
| + encryptedEventIndex++; |
| + |
| + // This event is fired once for the audio stream and once |
| + // for the video stream each time .src is set. |
| + if (encryptedEventIndex == 2) { |
|
jrummell
2017/02/22 00:36:48
Maybe assert that video.mediaKeys == null?
xhwang
2017/02/24 17:37:08
Done.
|
| + setMediaKeys(); |
| + video.setMediaKeys(null); |
|
jrummell
2017/02/22 00:36:48
I thought this was bad behavior (setting it again
xhwang
2017/02/24 17:37:08
Removed.
|
| + // Reset src without waiting for setMediaKeys() to finish. |
| + video.src = alternateContent; |
| + } else if (encryptedEventIndex == 4) { |
| + // Finished second video. |
|
jrummell
2017/02/22 00:36:48
assert_true(video.mediaKeys === mediaKeys)?
xhwang
2017/02/24 17:37:08
This is not necessarily true. Imagine setMediaKeys
|
| + test.done(); |
| + } |
| + }; |
| + |
| + navigator.requestMediaKeySystemAccess('org.w3.clearkey', getConfigurationForFile(content)) |
| + .then(function(access) { |
| + assert_equals(access.keySystem, 'org.w3.clearkey'); |
| + return access.createMediaKeys(); |
| + }) |
| + .then(function(result) { |
| + mediaKeys = result; |
| + assert_not_equals(mediaKeys, null); |
| + |
| + // Set src without setMediaKeys(). |
| + video.src = content; |
| + waitForEventAndRunStep('encrypted', video, onEncrypted, test); |
| + }); |
|
jrummell
2017/02/22 00:36:48
Probably needs a .catch(function(error) { forceTes
xhwang
2017/02/24 17:37:08
Done.
|
| + }, 'Reset src during setMediaKeys().'); |
| + </script> |
| + </body> |
| +</html> |