| Index: third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/keystatuses-multiple-sessions.js
|
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/keystatuses-multiple-sessions.js b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/keystatuses-multiple-sessions.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e9bf10e8860e85eaa43369246a744eaf17749cd1
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/scripts/keystatuses-multiple-sessions.js
|
| @@ -0,0 +1,103 @@
|
| +function runTest(config,qualifier)
|
| +{
|
| + var testname = testnamePrefix(qualifier, config.keysystem) + ', temporary, keystatuses, multiple sessions';
|
| +
|
| + var configuration = getSimpleConfigurationForContent(config.content);
|
| +
|
| + if (config.initDataType && config.initData) configuration.initDataTypes = [config.initDataType];
|
| +
|
| + async_test(function(test)
|
| + {
|
| + var mediaKeySession1;
|
| + var mediaKeySession2;
|
| +
|
| + // Even though key ids are uint8, using printable values so that
|
| + // they can be verified easily.
|
| + var key1 = new Uint8Array(config.content.keys[0].kid),
|
| + key2 = new Uint8Array(config.content.keys[1].kid),
|
| + variant1 = config.content.keys[0].variantId,
|
| + variant2 = config.content.keys[1].variantId;
|
| +
|
| + function onFailure(error) {
|
| + forceTestFailureFromPromise(test,error);
|
| + }
|
| +
|
| + 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.
|
| + config.messagehandler(event.messageType, event.message, {variantId:variant1}).then(function(response) {
|
| + return event.target.update(response);
|
| + }).catch(onFailure);
|
| +
|
| + }
|
| +
|
| + function processKeyStatusesChange1(event)
|
| + {
|
| + // This should only be called for session1.
|
| + assert_equals(event.target, mediaKeySession1);
|
| +
|
| + // Check that keyStatuses contains the expected key1 only.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [key1], unexpected: [key2]});
|
| +
|
| + // Now trigger a message event on session2.
|
| + mediaKeySession2.generateRequest(config.initDataType, config.initData[1]).catch(onFailure);
|
| + }
|
| +
|
| + 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.
|
| + config.messagehandler(event.messageType, event.message, {variantId:variant2}).then(function(response) {
|
| + return event.target.update(response);
|
| + }).catch(onFailure);
|
| + }
|
| +
|
| + function processKeyStatusesChange2(event)
|
| + {
|
| + // This should only be called for session2.
|
| + assert_equals(event.target, mediaKeySession2);
|
| +
|
| + // Check that keyStatuses contains the expected key2 only.
|
| + verifyKeyStatuses(mediaKeySession2.keyStatuses, {expected: [key2], unexpected: [key1]});
|
| +
|
| + // session1 should still have 1 key.
|
| + verifyKeyStatuses(mediaKeySession1.keyStatuses, {expected: [key1], unexpected: [key2]});
|
| +
|
| + test.done();
|
| + }
|
| +
|
| + navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) {
|
| + return access.createMediaKeys();
|
| + }).then(function(mediaKeys) {
|
| + 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(config.initDataType, config.initData[0]);
|
| + }).catch(onFailure);
|
| + }, testname );
|
| +}
|
|
|