| // This test is only applicable to clearkey |
| function runTest(config, qualifier) |
| { |
| var testname = testnamePrefix(qualifier, config.keysystem) + ' test handling of non-ASCII responses for update()'; |
| |
| var configuration = getSimpleConfigurationForContent(config.content); |
| |
| if (config.initDataType) { |
| configuration.initDataTypes = [config.initDataType]; |
| } |
| |
| promise_test(function (test) { |
| var initDataType; |
| var initData; |
| var mediaKeySession; |
| var messageEventFired = false; |
| |
| var p = navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function (access) { |
| initDataType = access.getConfiguration().initDataTypes[0]; |
| initData = getInitData(config.content, initDataType); |
| return access.createMediaKeys(); |
| }).then(function (mediaKeys) { |
| mediaKeySession = mediaKeys.createSession(); |
| var eventWatcher = new EventWatcher(test, mediaKeySession, ['message']); |
| var promise = eventWatcher.wait_for('message'); |
| mediaKeySession.generateRequest(initDataType, initData); |
| return promise; |
| }).then(function (messageEvent) { |
| // |jwkSet| contains a non-ASCII character \uDC00. |
| var jwkSet = '{"keys":[{' |
| + '"kty":"oct",' |
| + '"k":"MDEyMzQ1Njc4OTAxMjM0NQ",' |
| + '"kid":"MDEyMzQ1Njc4O\uDC00TAxMjM0NQ"' |
| + '}]}'; |
| messageEventFired = true; |
| return messageEvent.target.update(stringToUint8Array(jwkSet)); |
| }).catch(function (error) { |
| // Ensure we reached the update() call we are trying to test. |
| if (!messageEventFired) { |
| assert_unreached( |
| `Failed to reach the update() call. Error: '${error.name}' '${error.message}'`); |
| } |
| |
| // Propagate the error on through. |
| throw error; |
| }); |
| |
| return promise_rejects_js( |
| test, TypeError, p, |
| 'update() should fail because the processed message has non-ASCII character.'); |
| }, testname); |
| } |