| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <title>Verify MediaKeySession.keyStatuses</title> | 4 <title>Verify MediaKeySession.keyStatuses with multiple updates</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 <div id="log"></div> | 10 <div id="log"></div> |
| 11 <script> | 11 <script> |
| 12 var mediaKeySession; | 12 var mediaKeySession; |
| 13 var firstEvent; |
| 13 | 14 |
| 14 // Even though key ids are uint8, using printable values so that | 15 // Even though key ids are uint8, using printable values so that |
| 15 // they can be verified easily. | 16 // they can be verified easily. |
| 16 var key1 = stringToUint8Array('123'); | 17 var key1 = stringToUint8Array('123'); |
| 17 var key2 = stringToUint8Array('4567890'); | 18 var key2 = stringToUint8Array('4567890'); |
| 18 var rawKey1 = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0x
d2, 0x7b, | 19 var rawKey1 = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0x
d2, 0x7b, |
| 19 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0x
ae, 0x3c]); | 20 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0x
ae, 0x3c]); |
| 20 var rawKey2 = new Uint8Array([0x3c, 0xae, 0xe4, 0xfc, 0x2a, 0x12, 0x
ef, 0x68, | 21 var rawKey2 = new Uint8Array([0x3c, 0xae, 0xe4, 0xfc, 0x2a, 0x12, 0x
ef, 0x68, |
| 21 0x7b, 0xd2, 0x14, 0x68, 0xf1, 0x62, 0x
dd, 0xeb]); | 22 0x7b, 0xd2, 0x14, 0x68, 0xf1, 0x62, 0x
dd, 0xeb]); |
| 22 | 23 |
| 23 async_test(function(test) | 24 async_test(function(test) |
| 24 { | 25 { |
| 25 function processMessage(event) | 26 function processMessage(event) |
| 26 { | 27 { |
| 27 // No keys added yet. | 28 // No keys added yet. |
| 28 assert_equals(mediaKeySession.keyStatuses.size, 0); | 29 verifyKeyStatuses(mediaKeySession.keyStatuses, { expected: [
], unexpected: [key1, key2] }); |
| 29 | 30 |
| 30 waitForEventAndRunStep('keystatuseschange', mediaKeySession,
processKeyStatusesChange, test); | 31 // Add key1 to the session. |
| 31 | 32 firstEvent = true; |
| 32 var jwkSet = stringToUint8Array(createJWKSet(createJWK(key1,
rawKey1), createJWK(key2, rawKey2))); | 33 var jwkSet = stringToUint8Array(createJWKSet(createJWK(key1,
rawKey1))); |
| 33 mediaKeySession.update(jwkSet).catch(function(error) { | 34 mediaKeySession.update(jwkSet).catch(function(error) { |
| 34 forceTestFailureFromPromise(test, error); | 35 forceTestFailureFromPromise(test, error); |
| 35 }); | 36 }); |
| 36 } | 37 } |
| 37 | 38 |
| 38 function processKeyStatusesChange(event) | 39 function processKeyStatusesChange(event) |
| 39 { | 40 { |
| 40 assert_equals(mediaKeySession.keyStatuses.size, 2); | 41 if (firstEvent) { |
| 41 consoleWrite("for (var entry of keyStatuses)"); | 42 // Verify that the session only contains key1. |
| 42 for (var entry of mediaKeySession.keyStatuses) { | 43 dumpKeyStatuses(mediaKeySession.keyStatuses); |
| 43 consoleWrite(arrayBufferAsString(entry[0]) + ", " + entr
y[1]); | 44 verifyKeyStatuses(mediaKeySession.keyStatuses, { expecte
d: [key1], unexpected: [key2] }); |
| 45 |
| 46 // Now add key2 to the session. |
| 47 firstEvent = false; |
| 48 var jwkSet = stringToUint8Array(createJWKSet(createJWK(k
ey2, rawKey2))); |
| 49 mediaKeySession.update(jwkSet).catch(function(error) { |
| 50 forceTestFailureFromPromise(test, error); |
| 51 }); |
| 52 } else { |
| 53 // Verify that the session now contains key1 and key2. |
| 54 dumpKeyStatuses(mediaKeySession.keyStatuses); |
| 55 verifyKeyStatuses(mediaKeySession.keyStatuses, { expecte
d: [key1, key2], unexpected: [] }); |
| 56 |
| 57 test.done(); |
| 44 } | 58 } |
| 45 consoleWrite("for (var key of keyStatuses.keys())"); | |
| 46 for (var key of mediaKeySession.keyStatuses.keys()) { | |
| 47 consoleWrite(arrayBufferAsString(key)); | |
| 48 } | |
| 49 consoleWrite("for (var value of keyStatuses.values())"); | |
| 50 for (var value of mediaKeySession.keyStatuses.values()) { | |
| 51 consoleWrite(value); | |
| 52 } | |
| 53 consoleWrite("for (var entry of keyStatuses.entries())"); | |
| 54 for (var entry of mediaKeySession.keyStatuses.entries()) { | |
| 55 consoleWrite(arrayBufferAsString(entry[0]) + ", " + entr
y[1]); | |
| 56 } | |
| 57 assert_true(mediaKeySession.keyStatuses.has(key1)); | |
| 58 assert_true(mediaKeySession.keyStatuses.has(key2)); | |
| 59 assert_false(mediaKeySession.keyStatuses.has(stringToUint8Ar
ray('123456'))); | |
| 60 assert_equals(mediaKeySession.keyStatuses.get(key1), 'usable
'); | |
| 61 assert_equals(mediaKeySession.keyStatuses.get(key2), 'usable
'); | |
| 62 assert_equals(mediaKeySession.keyStatuses.get(stringToUint8A
rray('123456')), undefined); | |
| 63 test.done(); | |
| 64 } | 59 } |
| 65 | 60 |
| 66 navigator.requestMediaKeySystemAccess('org.w3.clearkey').then(fu
nction(access) { | 61 navigator.requestMediaKeySystemAccess('org.w3.clearkey').then(fu
nction(access) { |
| 67 return access.createMediaKeys(); | 62 return access.createMediaKeys(); |
| 68 }).then(function(mediaKeys) { | 63 }).then(function(mediaKeys) { |
| 69 var initDataType = getInitDataType(); | 64 var initDataType = getInitDataType(); |
| 70 mediaKeySession = mediaKeys.createSession(); | 65 mediaKeySession = mediaKeys.createSession(); |
| 71 | 66 |
| 72 // There should be no keys defined yet. | 67 // There should be no keys defined yet. |
| 73 assert_equals(mediaKeySession.keyStatuses.size, 0); | 68 assert_equals(mediaKeySession.keyStatuses.size, 0); |
| 74 | 69 |
| 75 waitForEventAndRunStep('message', mediaKeySession, processMe
ssage, test); | 70 waitForEventAndRunStep('message', mediaKeySession, processMe
ssage, test); |
| 71 waitForEventAndRunStep('keystatuseschange', mediaKeySession,
processKeyStatusesChange, test); |
| 72 |
| 76 return mediaKeySession.generateRequest(initDataType, getInit
Data(initDataType)); | 73 return mediaKeySession.generateRequest(initDataType, getInit
Data(initDataType)); |
| 77 }).catch(function(error) { | 74 }).catch(function(error) { |
| 78 forceTestFailureFromPromise(test, error); | 75 forceTestFailureFromPromise(test, error); |
| 79 }); | 76 }); |
| 80 }, 'Verify MediaKeySession.keyStatuses.'); | 77 }, 'Verify MediaKeySession.keyStatuses with multiple updates.'); |
| 81 </script> | 78 </script> |
| 82 </body> | 79 </body> |
| 83 </html> | 80 </html> |
| OLD | NEW |