184 lines
7.5 KiB
JavaScript
184 lines
7.5 KiB
JavaScript
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.');
|
|
}
|