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..acbc52181f037db60e1660de20aedfb4dec1cce5 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; |
@@ -32,17 +36,40 @@ |
var keyId = String.fromCharCode.apply(null, new Uint8Array(event.initData)); |
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. Process both audio and |
+ // video generateRequests() at the same time (prevents a |
+ // "message" event from occurring before both "onencrypted" |
ddorwin
2014/10/16 16:14:32
nit: This comment would probably be better before
jrummell
2014/10/16 17:42:56
Done.
|
+ // events are received). |
ddorwin
2014/10/16 16:14:32
Include the reason: expected text
jrummell
2014/10/16 17:42:56
Done.
|
+ 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); |
}); |
} |