Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: LayoutTests/media/encrypted-media/encrypted-media-keystatuses-multiple-sessions.html

Issue 880313003: Add additional layout tests for MediaKeySession.keyStatuses (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: more js Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698