Index: LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html |
diff --git a/LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html b/LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html |
index 7c3335f9c30307fabf89166d5e65b4d62b20cfb0..eb9ccea2575fc377b922c32c30968c483ba2f414 100644 |
--- a/LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html |
+++ b/LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html |
@@ -16,6 +16,10 @@ |
var video = document.getElementById('testVideo'); |
var audioMediaKeySession = null; |
var videoMediaKeySession = null; |
+ var audioInitDataType = null; |
+ var videoInitDataType = null; |
+ var audioInitData = null; |
+ var videoInitData = null; |
var audioKeyProvided = false; |
var videoKeyProvided = false; |
@@ -31,18 +35,44 @@ |
{ |
var keyId = String.fromCharCode.apply(null, new Uint8Array(event.initData)); |
+ // To avoid issues when comparing the expected.txt file |
+ // (which logs the events in the order they occur), save |
+ // the initData and make the calls to generateRequest() |
+ // only after both "onencrypted" events are received. |
+ // This prevents a "message" event from occurring before |
+ // both "onencrypted" events are received. |
var mediaKeySession = video.mediaKeys.createSession(); |
- waitForEventAndRunStep('message', mediaKeySession, onMessage, test); |
- mediaKeySession.generateRequest(event.initDataType, event.initData).then(function() { |
- if (keyId == videoKeyId) { |
- assert_equals(videoMediaKeySession, null); |
- videoMediaKeySession = mediaKeySession; |
- } else { |
- assert_equals(keyId, audioKeyId); |
- assert_equals(audioMediaKeySession, null); |
- audioMediaKeySession = mediaKeySession; |
- } |
- }).catch(function(error) { |
+ if (keyId == videoKeyId) { |
+ assert_equals(videoMediaKeySession, null); |
+ videoMediaKeySession = mediaKeySession; |
+ videoInitDataType = event.initDataType; |
+ videoInitData = event.initData; |
+ // Return if audio "onencrypted" event not yet received. |
+ if (audioMediaKeySession == null) |
+ return; |
+ } else { |
+ assert_equals(keyId, audioKeyId); |
+ assert_equals(audioMediaKeySession, null); |
+ audioMediaKeySession = mediaKeySession; |
+ audioInitDataType = event.initDataType; |
+ audioInitData = event.initData; |
+ // Return if video "onencrypted" event not yet received. |
+ if (videoMediaKeySession == null) |
+ return; |
+ } |
+ |
+ // Both sessions have been created. |
+ assert_not_equals(videoMediaKeySession, null); |
+ assert_not_equals(audioMediaKeySession, null); |
+ |
+ var promises = []; |
+ waitForEventAndRunStep('message', videoMediaKeySession, onMessage, test); |
+ promises.push(videoMediaKeySession.generateRequest(videoInitDataType, videoInitData)); |
+ |
+ waitForEventAndRunStep('message', audioMediaKeySession, onMessage, test); |
+ promises.push(audioMediaKeySession.generateRequest(audioInitDataType, audioInitData)); |
+ |
+ Promise.all(promises).catch(function(error) { |
forceTestFailureFromPromise(test, error); |
}); |
} |