| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Test handling of invalid responses for update().</title> |
| <script src="encrypted-media-utils.js"></script> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| // This test passes |response| to update() as a JSON Web Key Set. |
| // CDMs other than Clear Key won't expect |response| in this format. |
| |
| async_test(function(test) |
| { |
| var initDataType; |
| var initData; |
| var mediaKeySession; |
| |
| function repeat(pattern, count) { |
| var result = ''; |
| while (count > 1) { |
| if (count & 1) result += pattern; |
| count >>= 1; |
| pattern += pattern; |
| } |
| return result + pattern; |
| } |
| |
| function createReallyLongJWKSet() |
| { |
| // This is just a standard JWKSet with a lot of |
| // extra items added to the end. Key ID and key |
| // doesn't really matter. |
| var jwkSet = '{"keys":[{' |
| + '"kty":"oct",' |
| + '"k":"MDEyMzQ1Njc4OTAxMjM0NQ",' |
| + '"kid":"MDEyMzQ1Njc4OTAxMjM0NQ"' |
| + '}]'; |
| return jwkSet + repeat(',"test":"unknown"', 4000) + '}'; |
| } |
| |
| function processMessage(event) |
| { |
| var jwkSet = createReallyLongJWKSet(); |
| assert_greater_than(jwkSet.length, 65536); |
| var jwkSetArray = stringToUint8Array(jwkSet); |
| mediaKeySession.update(jwkSetArray).then(function() { |
| forceTestFailureFromPromise(test, 'Error: update() succeeded'); |
| }, function(error) { |
| assert_equals(error.name, 'TypeError'); |
| test.done(); |
| }); |
| } |
| |
| navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) { |
| initDataType = access.getConfiguration().initDataTypes[0]; |
| initData = getInitData(initDataType); |
| return access.createMediaKeys(); |
| }).then(function(mediaKeys) { |
| mediaKeySession = mediaKeys.createSession(); |
| waitForEventAndRunStep('message', mediaKeySession, processMessage, test); |
| return mediaKeySession.generateRequest(initDataType, initData); |
| }); |
| }, 'update() with response longer than 64Kb characters.'); |
| </script> |
| </body> |
| </html> |