| Index: LayoutTests/media/encrypted-media/encrypted-media-keystatuses-multiple-sessions.html
|
| diff --git a/LayoutTests/media/encrypted-media/encrypted-media-keystatuses-multiple-sessions.html b/LayoutTests/media/encrypted-media/encrypted-media-keystatuses-multiple-sessions.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a2c61c3b52555e8283a36f3620a5acd4dba631c2
|
| --- /dev/null
|
| +++ b/LayoutTests/media/encrypted-media/encrypted-media-keystatuses-multiple-sessions.html
|
| @@ -0,0 +1,115 @@
|
| +<!DOCTYPE html>
|
| +<html>
|
| + <head>
|
| + <title>Verify MediaKeySession.keyStatuses with multiple sessions</title>
|
| + <script src="encrypted-media-utils.js"></script>
|
| + <script src="../../resources/testharness.js"></script>
|
| + <script src="../../resources/testharnessreport.js"></script>
|
| + </head>
|
| + <body>
|
| + <div id="log"></div>
|
| + <script>
|
| + var mediaKeySession1;
|
| + var mediaKeySession2;
|
| +
|
| + // Even though key ids are uint8, using printable values so that
|
| + // they can be verified easily.
|
| + var key1 = stringToUint8Array('123');
|
| + var key2 = stringToUint8Array('4567890');
|
| + var rawKey1 = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b,
|
| + 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c]);
|
| + var rawKey2 = new Uint8Array([0x3c, 0xae, 0xe4, 0xfc, 0x2a, 0x12, 0xef, 0x68,
|
| + 0x7b, 0xd2, 0x14, 0x68, 0xf1, 0x62, 0xdd, 0xeb]);
|
| +
|
| + async_test(function(test)
|
| + {
|
| + function processMessage1(event)
|
| + {
|
| + // This should only be called for session1.
|
| + assert_equals(event.target, mediaKeySession1);
|
| +
|
| + // No keys added yet.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, { expected: [], unexpected: [key1, key2] });
|
| +
|
| + // Add key1 to session1.
|
| + var jwkSet = stringToUint8Array(createJWKSet(createJWK(key1, rawKey1)));
|
| + mediaKeySession1.update(jwkSet).catch(function(error) {
|
| + forceTestFailureFromPromise(test, error);
|
| + });
|
| + }
|
| +
|
| + function processKeyStatusesChange1(event)
|
| + {
|
| + // This should only be called for session1.
|
| + assert_equals(event.target, mediaKeySession1);
|
| +
|
| + // Check that keyStatuses contains the expected key1 only.
|
| + dumpKeyStatuses(mediaKeySession1.keyStatuses);
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, { expected: [key1], unexpected: [key2] });
|
| +
|
| + // Now trigger a message event on session2.
|
| + var initDataType = getInitDataType();
|
| + mediaKeySession2.generateRequest(initDataType, getInitData(initDataType)).catch(function(error) {
|
| + forceTestFailureFromPromise(test, error);
|
| + });
|
| + }
|
| +
|
| + function processMessage2(event)
|
| + {
|
| + // This should only be called for session2.
|
| + assert_equals(event.target, mediaKeySession2);
|
| +
|
| + // session2 has no keys added yet.
|
| + verifyKeyStatuses(mediaKeySession2.keyStatuses, { expected: [], unexpected: [key1, key2] });
|
| +
|
| + // session1 should still have 1 key.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, { expected: [key1], unexpected: [key2] });
|
| +
|
| + // Add key2 to session2.
|
| + var jwkSet = stringToUint8Array(createJWKSet(createJWK(key2, rawKey2)));
|
| + mediaKeySession2.update(jwkSet).catch(function(error) {
|
| + forceTestFailureFromPromise(test, error);
|
| + });
|
| + }
|
| +
|
| + function processKeyStatusesChange2(event)
|
| + {
|
| + // This should only be called for session2.
|
| + assert_equals(event.target, mediaKeySession2);
|
| +
|
| + // Check that keyStatuses contains the expected key2 only.
|
| + dumpKeyStatuses(mediaKeySession2.keyStatuses);
|
| + verifyKeyStatuses(mediaKeySession2.keyStatuses, { expected: [key2], unexpected: [key1] });
|
| +
|
| + // session1 should still have 1 key.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, { expected: [key1], unexpected: [key2] });
|
| +
|
| + test.done();
|
| + }
|
| +
|
| + navigator.requestMediaKeySystemAccess('org.w3.clearkey').then(function(access) {
|
| + return access.createMediaKeys();
|
| + }).then(function(mediaKeys) {
|
| + var initDataType = getInitDataType();
|
| + mediaKeySession1 = mediaKeys.createSession();
|
| + mediaKeySession2 = mediaKeys.createSession();
|
| +
|
| + // There should be no keys defined on either session.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, { expected: [], unexpected: [key1, key2] });
|
| + verifyKeyStatuses(mediaKeySession2.keyStatuses, { expected: [], unexpected: [key1, key2] });
|
| +
|
| + // Bind all the event handlers now.
|
| + waitForEventAndRunStep('message', mediaKeySession1, processMessage1, test);
|
| + waitForEventAndRunStep('message', mediaKeySession2, processMessage2, test);
|
| + waitForEventAndRunStep('keystatuseschange', mediaKeySession1, processKeyStatusesChange1, test);
|
| + waitForEventAndRunStep('keystatuseschange', mediaKeySession2, processKeyStatusesChange2, test);
|
| +
|
| + // Generate a request on session1.
|
| + return mediaKeySession1.generateRequest(initDataType, getInitData(initDataType));
|
| + }).catch(function(error) {
|
| + forceTestFailureFromPromise(test, error);
|
| + });
|
| + }, 'Verify MediaKeySession.keyStatuses with multiple sessions.');
|
| + </script>
|
| + </body>
|
| +</html>
|
|
|