function runTest(config) { var keysystem = config.keysystem; var testname = testnamePrefix(null, config.keysystem); var initDataType = config.initDataType; var configuration = { initDataTypes: [config.initDataType], audioCapabilities: [{contentType: config.audioType}], videoCapabilities: [{contentType: config.videoType}], sessionTypes: ['temporary'] }; var kRequestMediaKeySystemAccessExceptionsTestCases = [ // Too few parameters. { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(); } }, { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem); } }, // Invalid key systems. Note that JavaScript converts all these // values into strings by calling toString(), so they fail due // to the key system not being supported, not due to the type. { exception: 'NotSupportedError', func: function () { return navigator.requestMediaKeySystemAccess(null, [{}]); } }, { exception: 'NotSupportedError', func: function () { return navigator.requestMediaKeySystemAccess(undefined, [{}]); } }, { exception: 'NotSupportedError', func: function () { return navigator.requestMediaKeySystemAccess(1, [{}]); } }, { exception: 'NotSupportedError', func: function () { return navigator.requestMediaKeySystemAccess('unsupported', [{}]); } }, // Empty keysystem string should be rejected with TypeError. { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess('', [{}]); } }, // (new Uint8Array(0)).toString() should return ''. So this case should be the same // as the above. { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(new Uint8Array(0), [{}]); } }, // Non-ASCII names. { exception: 'NotSupportedError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem + '\u263A', [{}]); } }, // Empty sequence of MediaKeySystemConfiguration. { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem, []); } }, // Things that don't convert to valid sequences of MediaKeySystemConfigurations. { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem, {}); } }, { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem, "invalid"); } }, { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem, [{}, 6]); } }, { exception: 'TypeError', func: function () { return navigator.requestMediaKeySystemAccess(keysystem, ["invalid", "upsupported"]); } } ]; function requestMediaKeySystemAccessTestExceptions(){ return new Promise(function(resolve, reject){ var createPromises = kRequestMediaKeySystemAccessExceptionsTestCases.map(function (testCase) { return test_exception(testCase); }); Promise.all(createPromises).then(function (result) { resolve(); }).catch(function (error) { reject(error); }); }) } promise_test(function() { return requestMediaKeySystemAccessTestExceptions(); }, testname + ' test requestMediaKeySystemAccess() exceptions.'); function requestMediaKeySystemAccessTestAttributes(){ return new Promise(function(resolve, reject){ isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) { assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function'); assert_true(isTypeSupported, "initDataType not supported"); return navigator.requestMediaKeySystemAccess(keysystem, [configuration]); }).then(function (access) { assert_not_equals(access, null); assert_equals(typeof access, 'object'); assert_equals(access.keySystem, keysystem); assert_equals(typeof access.getConfiguration, 'function'); assert_equals(typeof access.createMediaKeys, 'function'); resolve(); }).catch(function(error){ reject(error); }) }) } promise_test(function() { return requestMediaKeySystemAccessTestAttributes(); }, testname + ' test MediaKeySystemAccess attribute syntax.'); }