Chromium Code Reviews| 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 |