OLD | NEW |
(Empty) | |
| 1 function runTest(config,qualifier) |
| 2 { |
| 3 var testname = testnamePrefix(qualifier, config.keysystem) + ', temporary, k
eystatuses, multiple sessions'; |
| 4 |
| 5 var configuration = getSimpleConfigurationForContent(config.content); |
| 6 |
| 7 if (config.initDataType && config.initData) configuration.initDataTypes = [c
onfig.initDataType]; |
| 8 |
| 9 async_test(function(test) |
| 10 { |
| 11 var mediaKeySession1; |
| 12 var mediaKeySession2; |
| 13 |
| 14 // Even though key ids are uint8, using printable values so that |
| 15 // they can be verified easily. |
| 16 var key1 = new Uint8Array(config.content.keys[0].kid), |
| 17 key2 = new Uint8Array(config.content.keys[1].kid), |
| 18 variant1 = config.content.keys[0].variantId, |
| 19 variant2 = config.content.keys[1].variantId; |
| 20 |
| 21 function onFailure(error) { |
| 22 forceTestFailureFromPromise(test,error); |
| 23 } |
| 24 |
| 25 function processMessage1(event) |
| 26 { |
| 27 // This should only be called for session1. |
| 28 assert_equals(event.target, mediaKeySession1); |
| 29 |
| 30 // No keys added yet. |
| 31 verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [], unexp
ected: [key1, key2]}); |
| 32 |
| 33 // Add key1 to session1. |
| 34 config.messagehandler(event.messageType, event.message, {variantId:v
ariant1}).then(function(response) { |
| 35 return event.target.update(response); |
| 36 }).catch(onFailure); |
| 37 |
| 38 } |
| 39 |
| 40 function processKeyStatusesChange1(event) |
| 41 { |
| 42 // This should only be called for session1. |
| 43 assert_equals(event.target, mediaKeySession1); |
| 44 |
| 45 // Check that keyStatuses contains the expected key1 only. |
| 46 verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [key1], u
nexpected: [key2]}); |
| 47 |
| 48 // Now trigger a message event on session2. |
| 49 mediaKeySession2.generateRequest(config.initDataType, config.initDat
a[1]).catch(onFailure); |
| 50 } |
| 51 |
| 52 function processMessage2(event) |
| 53 { |
| 54 // This should only be called for session2. |
| 55 assert_equals(event.target, mediaKeySession2); |
| 56 |
| 57 // session2 has no keys added yet. |
| 58 verifyKeyStatuses(mediaKeySession2.keyStatuses, {expected: [], unexp
ected: [key1, key2]}); |
| 59 |
| 60 // session1 should still have 1 key. |
| 61 verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [key1], u
nexpected: [key2]}); |
| 62 |
| 63 // Add key2 to session2. |
| 64 config.messagehandler(event.messageType, event.message, {variantId:v
ariant2}).then(function(response) { |
| 65 return event.target.update(response); |
| 66 }).catch(onFailure); |
| 67 } |
| 68 |
| 69 function processKeyStatusesChange2(event) |
| 70 { |
| 71 // This should only be called for session2. |
| 72 assert_equals(event.target, mediaKeySession2); |
| 73 |
| 74 // Check that keyStatuses contains the expected key2 only. |
| 75 verifyKeyStatuses(mediaKeySession2.keyStatuses, {expected: [key2], u
nexpected: [key1]}); |
| 76 |
| 77 // session1 should still have 1 key. |
| 78 verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [key1], u
nexpected: [key2]}); |
| 79 |
| 80 test.done(); |
| 81 } |
| 82 |
| 83 navigator.requestMediaKeySystemAccess(config.keysystem, [configuration])
.then(function(access) { |
| 84 return access.createMediaKeys(); |
| 85 }).then(function(mediaKeys) { |
| 86 mediaKeySession1 = mediaKeys.createSession(); |
| 87 mediaKeySession2 = mediaKeys.createSession(); |
| 88 |
| 89 // There should be no keys defined on either session. |
| 90 verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [], unexp
ected: [key1, key2]}); |
| 91 verifyKeyStatuses(mediaKeySession2.keyStatuses, {expected: [], unexp
ected: [key1, key2]}); |
| 92 |
| 93 // Bind all the event handlers now. |
| 94 waitForEventAndRunStep('message', mediaKeySession1, processMessage1,
test); |
| 95 waitForEventAndRunStep('message', mediaKeySession2, processMessage2,
test); |
| 96 waitForEventAndRunStep('keystatuseschange', mediaKeySession1, proces
sKeyStatusesChange1, test); |
| 97 waitForEventAndRunStep('keystatuseschange', mediaKeySession2, proces
sKeyStatusesChange2, test); |
| 98 |
| 99 // Generate a request on session1. |
| 100 return mediaKeySession1.generateRequest(config.initDataType, config.
initData[0]); |
| 101 }).catch(onFailure); |
| 102 }, testname ); |
| 103 } |
OLD | NEW |