OLD | NEW |
---|---|
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <title>Clear Key Playback with Multiple Sessions</title> | 4 <title>Clear Key Playback with Multiple Sessions</title> |
5 <script src="encrypted-media-utils.js"></script> | 5 <script src="encrypted-media-utils.js"></script> |
6 <script src="../../resources/testharness.js"></script> | 6 <script src="../../resources/testharness.js"></script> |
7 <script src="../../resources/testharnessreport.js"></script> | 7 <script src="../../resources/testharnessreport.js"></script> |
8 </head> | 8 </head> |
9 <body> | 9 <body> |
10 <video id="testVideo"></video> | 10 <video id="testVideo"></video> |
11 <div id="log"></div> | 11 <div id="log"></div> |
12 <p>Test playback of encrypted media using Clear Key key system with mult iple sessions.</p> | 12 <p>Test playback of encrypted media using Clear Key key system with mult iple sessions.</p> |
13 <script> | 13 <script> |
14 async_test(function(test) | 14 async_test(function(test) |
15 { | 15 { |
16 var video = document.getElementById('testVideo'); | 16 var video = document.getElementById('testVideo'); |
17 var audioMediaKeySession = null; | 17 var audioMediaKeySession = null; |
18 var videoMediaKeySession = null; | 18 var videoMediaKeySession = null; |
19 var audioInitDataType = null; | |
20 var videoInitDataType = null; | |
21 var audioInitData = null; | |
22 var videoInitData = null; | |
19 var audioKeyProvided = false; | 23 var audioKeyProvided = false; |
20 var videoKeyProvided = false; | 24 var videoKeyProvided = false; |
21 | 25 |
22 // The 2 streams use different key ids and different keys. | 26 // The 2 streams use different key ids and different keys. |
23 var audioKeyId = '1234567890123456'; | 27 var audioKeyId = '1234567890123456'; |
24 var audioKey = new Uint8Array([0x30, 0x30, 0x62, 0xF1, 0x68, 0x1 4, 0xD2, 0x7B, | 28 var audioKey = new Uint8Array([0x30, 0x30, 0x62, 0xF1, 0x68, 0x1 4, 0xD2, 0x7B, |
25 0x68, 0xEF, 0x12, 0x2A, 0xFC, 0xE 4, 0xAE, 0x0A]); | 29 0x68, 0xEF, 0x12, 0x2A, 0xFC, 0xE 4, 0xAE, 0x0A]); |
26 var videoKeyId = '0123456789012345'; | 30 var videoKeyId = '0123456789012345'; |
27 var videoKey = new Uint8Array([0x7A, 0x7A, 0x62, 0xF1, 0x68, 0x1 4, 0xD2, 0x7B, | 31 var videoKey = new Uint8Array([0x7A, 0x7A, 0x62, 0xF1, 0x68, 0x1 4, 0xD2, 0x7B, |
28 0x68, 0xEF, 0x12, 0x2A, 0xFC, 0xE 4, 0xAE, 0x0A]); | 32 0x68, 0xEF, 0x12, 0x2A, 0xFC, 0xE 4, 0xAE, 0x0A]); |
29 | 33 |
30 function onEncrypted(event) | 34 function onEncrypted(event) |
31 { | 35 { |
32 var keyId = String.fromCharCode.apply(null, new Uint8Array(e vent.initData)); | 36 var keyId = String.fromCharCode.apply(null, new Uint8Array(e vent.initData)); |
33 | 37 |
34 var mediaKeySession = video.mediaKeys.createSession(); | 38 var mediaKeySession = video.mediaKeys.createSession(); |
35 waitForEventAndRunStep('message', mediaKeySession, onMessage , test); | 39 if (keyId == videoKeyId) { |
36 mediaKeySession.generateRequest(event.initDataType, event.in itData).then(function() { | 40 assert_equals(videoMediaKeySession, null); |
37 if (keyId == videoKeyId) { | 41 videoMediaKeySession = mediaKeySession; |
38 assert_equals(videoMediaKeySession, null); | 42 videoInitDataType = event.initDataType; |
39 videoMediaKeySession = mediaKeySession; | 43 videoInitData = event.initData; |
40 } else { | 44 // Return if audio "onencrypted" event not yet received. |
41 assert_equals(keyId, audioKeyId); | 45 if (audioMediaKeySession == null) |
42 assert_equals(audioMediaKeySession, null); | 46 return; |
43 audioMediaKeySession = mediaKeySession; | 47 } else { |
44 } | 48 assert_equals(keyId, audioKeyId); |
45 }).catch(function(error) { | 49 assert_equals(audioMediaKeySession, null); |
50 audioMediaKeySession = mediaKeySession; | |
51 audioInitDataType = event.initDataType; | |
52 audioInitData = event.initData; | |
53 // Return if video "onencrypted" event not yet received. | |
54 if (videoMediaKeySession == null) | |
55 return; | |
56 } | |
57 | |
58 // Both sessions have been created. Process both audio and | |
59 // video generateRequests() at the same time (prevents a | |
60 // "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.
| |
61 // events are received). | |
ddorwin
2014/10/16 16:14:32
Include the reason: expected text
jrummell
2014/10/16 17:42:56
Done.
| |
62 assert_not_equals(videoMediaKeySession, null); | |
63 assert_not_equals(audioMediaKeySession, null); | |
64 | |
65 var promises = []; | |
66 waitForEventAndRunStep('message', videoMediaKeySession, onMe ssage, test); | |
67 promises.push(videoMediaKeySession.generateRequest(videoInit DataType, videoInitData)); | |
68 | |
69 waitForEventAndRunStep('message', audioMediaKeySession, onMe ssage, test); | |
70 promises.push(audioMediaKeySession.generateRequest(audioInit DataType, audioInitData)); | |
71 | |
72 Promise.all(promises).catch(function(error) { | |
46 forceTestFailureFromPromise(test, error); | 73 forceTestFailureFromPromise(test, error); |
47 }); | 74 }); |
48 } | 75 } |
49 | 76 |
50 function onMessage(event) | 77 function onMessage(event) |
51 { | 78 { |
52 var keyId = extractSingleKeyIdFromMessage(event.message); | 79 var keyId = extractSingleKeyIdFromMessage(event.message); |
53 if (event.target == videoMediaKeySession) { | 80 if (event.target == videoMediaKeySession) { |
54 assert_equals(String.fromCharCode.apply(null, keyId), vi deoKeyId); | 81 assert_equals(String.fromCharCode.apply(null, keyId), vi deoKeyId); |
55 var jwkSet = stringToUint8Array(createJWKSet(createJWK(k eyId, videoKey))); | 82 var jwkSet = stringToUint8Array(createJWKSet(createJWK(k eyId, videoKey))); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
97 return video.setMediaKeys(mediaKeys); | 124 return video.setMediaKeys(mediaKeys); |
98 }).then(function(result) { | 125 }).then(function(result) { |
99 video.play(); | 126 video.play(); |
100 }).catch(function(error) { | 127 }).catch(function(error) { |
101 forceTestFailureFromPromise(test, error); | 128 forceTestFailureFromPromise(test, error); |
102 }); | 129 }); |
103 }, 'Playback using Clear Key key system with multiple sessions.'); | 130 }, 'Playback using Clear Key key system with multiple sessions.'); |
104 </script> | 131 </script> |
105 </body> | 132 </body> |
106 </html> | 133 </html> |
OLD | NEW |