blob: 4ec6551e8fd73e6dd6007dc8483a0fed9939b76c [file] [log] [blame]
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.');
}