| 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'] |
| }; |
| |
| function createMediaKeysAttributeTest() { |
| return new Promise(function (resolve, reject) { |
| var access; |
| isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) { |
| assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function'); |
| assert_true(isTypeSupported, "initDataType should be supported"); |
| return navigator.requestMediaKeySystemAccess(keysystem, [configuration]); |
| }).then(function (result) { |
| access = result; |
| assert_equals(access.keySystem, keysystem); |
| return access.createMediaKeys(); |
| }).then(function (mediaKeys) { |
| assert_not_equals(mediaKeys, null); |
| assert_equals(typeof mediaKeys, 'object'); |
| assert_equals(typeof mediaKeys.createSession, 'function'); |
| assert_equals(typeof mediaKeys.setServerCertificate, 'function'); |
| |
| // Test creation of a second MediaKeys. |
| // The extra parameter is ignored. |
| return access.createMediaKeys('extra'); |
| }).then(function (mediaKeys) { |
| assert_not_equals(mediaKeys, null); |
| assert_equals(typeof mediaKeys, 'object'); |
| assert_equals(typeof mediaKeys.createSession, 'function'); |
| assert_equals(typeof mediaKeys.setServerCertificate, 'function'); |
| resolve(); |
| }).catch(function (error) { |
| reject(error); |
| }); |
| }) |
| } |
| |
| promise_test(function() { |
| return createMediaKeysAttributeTest(); |
| }, testname + ' test MediaKeys attribute syntax'); |
| |
| var kSetServerCertificateExceptionsTestCases = [ |
| // Too few parameters. |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(); |
| } |
| }, |
| // Invalid parameters. |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(''); |
| } |
| }, |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(null); |
| } |
| }, |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(undefined); |
| } |
| }, |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(1); |
| } |
| }, |
| // Empty array. |
| { |
| exception: 'TypeError', |
| func: function (mk) { |
| return mk.setServerCertificate(new Uint8Array(0)); |
| } |
| } |
| ]; |
| |
| |
| function setServerCertificateTestExceptions() { |
| 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) { |
| return access.createMediaKeys(); |
| }).then(function (mediaKeys) { |
| var promises = kSetServerCertificateExceptionsTestCases.map(function (testCase) { |
| return test_exception(testCase, mediaKeys); |
| }); |
| assert_not_equals(promises.length, 0); |
| return Promise.all(promises); |
| }).then(function () { |
| resolve(); |
| }).catch(function (error) { |
| reject(error); |
| }); |
| }) |
| } |
| promise_test(function() { |
| return setServerCertificateTestExceptions(); |
| }, testname + ' test MediaKeys setServerCertificate() exceptions.'); |
| |
| // All calls to |func| in this group resolve. setServerCertificate with these cert may either resolve with true |
| // for clearkey or throw a DOMException. |
| var kSetServerCertificateTestCases = [ |
| { |
| // Pass in ArrayBufferView |
| func: function (mk) { |
| var cert = new Uint8Array(200); |
| assert_true(ArrayBuffer.isView(cert)); |
| |
| return new Promise(function (resolve, reject) { |
| mk.setServerCertificate(cert).then(function (value) { |
| resolve(value); |
| }).catch(function (error) { |
| if (Object.prototype.toString.call(error) === "[object DOMException]") { |
| resolve(false); |
| } |
| }); |
| }) |
| }, |
| expected: false |
| }, |
| { |
| // Pass in ArrayBuffer. |
| func: function (mk) { |
| var cert = new ArrayBuffer(200); |
| assert_false(ArrayBuffer.isView(cert)); |
| return new Promise(function (resolve) { |
| mk.setServerCertificate(cert).then(function (resolveValue) { |
| resolve(resolveValue); |
| }).catch(function (error) { |
| if (Object.prototype.toString.call(error) === "[object DOMException]") { |
| resolve(false); |
| } |
| }); |
| }) |
| }, |
| expected: false |
| } |
| ]; |
| function setServerCertificateTest(){ |
| return new Promise(function(resolve, reject){ |
| var expected_result; |
| 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) { |
| return access.createMediaKeys(); |
| }).then(function (mediaKeys) { |
| var promises = kSetServerCertificateTestCases.map(function (testCase) { |
| return testCase.func.call(null, mediaKeys); |
| }); |
| expected_result = kSetServerCertificateTestCases.map(function (testCase) { |
| return testCase.expected; |
| }); |
| assert_not_equals(promises.length, 0); |
| return Promise.all(promises); |
| }).then(function (result) { |
| assert_array_equals(result, expected_result); |
| resolve(); |
| }).catch(function (error) { |
| reject(error); |
| }); |
| }) |
| } |
| promise_test(function() { |
| return setServerCertificateTest(); |
| }, testname + ' test MediaKeys setServerCertificate() syntax with non-empty certificate.'); |
| } |