syntax-mediakeys.js (7648B)
1 function runTest(config) { 2 var keysystem = config.keysystem; 3 var testname = testnamePrefix(null, config.keysystem); 4 var initDataType = config.initDataType; 5 var configuration = { 6 initDataTypes: [config.initDataType], 7 audioCapabilities: [{contentType: config.audioType}], 8 videoCapabilities: [{contentType: config.videoType}], 9 sessionTypes: ['temporary'] 10 }; 11 12 function createMediaKeysAttributeTest() { 13 return new Promise(function (resolve, reject) { 14 var access; 15 isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) { 16 assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function'); 17 assert_true(isTypeSupported, "initDataType should be supported"); 18 return navigator.requestMediaKeySystemAccess(keysystem, [configuration]); 19 }).then(function (result) { 20 access = result; 21 assert_equals(access.keySystem, keysystem); 22 return access.createMediaKeys(); 23 }).then(function (mediaKeys) { 24 assert_not_equals(mediaKeys, null); 25 assert_equals(typeof mediaKeys, 'object'); 26 assert_equals(typeof mediaKeys.createSession, 'function'); 27 assert_equals(typeof mediaKeys.setServerCertificate, 'function'); 28 29 // Test creation of a second MediaKeys. 30 // The extra parameter is ignored. 31 return access.createMediaKeys('extra'); 32 }).then(function (mediaKeys) { 33 assert_not_equals(mediaKeys, null); 34 assert_equals(typeof mediaKeys, 'object'); 35 assert_equals(typeof mediaKeys.createSession, 'function'); 36 assert_equals(typeof mediaKeys.setServerCertificate, 'function'); 37 resolve(); 38 }).catch(function (error) { 39 reject(error); 40 }); 41 }) 42 } 43 44 promise_test(function() { 45 return createMediaKeysAttributeTest(); 46 }, testname + ' test MediaKeys attribute syntax'); 47 48 var kSetServerCertificateExceptionsTestCases = [ 49 // Too few parameters. 50 { 51 exception: 'TypeError', 52 func: function (mk) { 53 return mk.setServerCertificate(); 54 } 55 }, 56 // Invalid parameters. 57 { 58 exception: 'TypeError', 59 func: function (mk) { 60 return mk.setServerCertificate(''); 61 } 62 }, 63 { 64 exception: 'TypeError', 65 func: function (mk) { 66 return mk.setServerCertificate(null); 67 } 68 }, 69 { 70 exception: 'TypeError', 71 func: function (mk) { 72 return mk.setServerCertificate(undefined); 73 } 74 }, 75 { 76 exception: 'TypeError', 77 func: function (mk) { 78 return mk.setServerCertificate(1); 79 } 80 }, 81 // Empty array. 82 { 83 exception: 'TypeError', 84 func: function (mk) { 85 return mk.setServerCertificate(new Uint8Array(0)); 86 } 87 } 88 ]; 89 90 91 function setServerCertificateTestExceptions() { 92 return new Promise(function(resolve, reject) { 93 isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) { 94 assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function'); 95 assert_true(isTypeSupported, "initDataType not supported"); 96 return navigator.requestMediaKeySystemAccess(keysystem, [configuration]); 97 }).then(function (access) { 98 return access.createMediaKeys(); 99 }).then(function (mediaKeys) { 100 var promises = kSetServerCertificateExceptionsTestCases.map(function (testCase) { 101 return test_exception(testCase, mediaKeys); 102 }); 103 assert_not_equals(promises.length, 0); 104 return Promise.all(promises); 105 }).then(function () { 106 resolve(); 107 }).catch(function (error) { 108 reject(error); 109 }); 110 }) 111 } 112 promise_test(function() { 113 return setServerCertificateTestExceptions(); 114 }, testname + ' test MediaKeys setServerCertificate() exceptions.'); 115 116 // All calls to |func| in this group resolve. setServerCertificate with these cert may either resolve with true 117 // for clearkey or throw a DOMException. 118 var kSetServerCertificateTestCases = [ 119 { 120 // Pass in ArrayBufferView 121 func: function (mk) { 122 var cert = new Uint8Array(200); 123 assert_true(ArrayBuffer.isView(cert)); 124 125 return new Promise(function (resolve, reject) { 126 mk.setServerCertificate(cert).then(function (value) { 127 resolve(value); 128 }).catch(function (error) { 129 if (Object.prototype.toString.call(error) === "[object DOMException]") { 130 resolve(false); 131 } 132 }); 133 }) 134 }, 135 expected: false 136 }, 137 { 138 // Pass in ArrayBuffer. 139 func: function (mk) { 140 var cert = new ArrayBuffer(200); 141 assert_false(ArrayBuffer.isView(cert)); 142 return new Promise(function (resolve) { 143 mk.setServerCertificate(cert).then(function (resolveValue) { 144 resolve(resolveValue); 145 }).catch(function (error) { 146 if (Object.prototype.toString.call(error) === "[object DOMException]") { 147 resolve(false); 148 } 149 }); 150 }) 151 }, 152 expected: false 153 } 154 ]; 155 function setServerCertificateTest(){ 156 return new Promise(function(resolve, reject){ 157 var expected_result; 158 isInitDataTypeSupported(keysystem, initDataType).then(function (isTypeSupported) { 159 assert_equals(typeof navigator.requestMediaKeySystemAccess, 'function'); 160 assert_true(isTypeSupported, "initDataType not supported"); 161 return navigator.requestMediaKeySystemAccess(keysystem, [configuration]); 162 }).then(function (access) { 163 return access.createMediaKeys(); 164 }).then(function (mediaKeys) { 165 var promises = kSetServerCertificateTestCases.map(function (testCase) { 166 return testCase.func.call(null, mediaKeys); 167 }); 168 expected_result = kSetServerCertificateTestCases.map(function (testCase) { 169 return testCase.expected; 170 }); 171 assert_not_equals(promises.length, 0); 172 return Promise.all(promises); 173 }).then(function (result) { 174 assert_array_equals(result, expected_result); 175 resolve(); 176 }).catch(function (error) { 177 reject(error); 178 }); 179 }) 180 } 181 promise_test(function() { 182 return setServerCertificateTest(); 183 }, testname + ' test MediaKeys setServerCertificate() syntax with non-empty certificate.'); 184 }