blob: 0d10798cc35850ba50c3f01aacc826c5b259c8bd [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src=../video-test.js></script>
<script type="text/javascript">
var mock;
var promise;
var mediaKeySystemAccess;
var mediaKeys;
var mediaKeySession;
var capabilities = {};
var kids;
function doTest()
{
if (!window.internals) {
failTest("Internals is required for this test.")
return;
}
run('internals.initializeMockMediaSource()');
run('mock = internals.registerMockCDM()');
run('mock.supportedDataTypes = ["keyids"]');
run('capabilities.initDataTypes = ["keyids"]');
run(`capabilities.videoCapabilities = [{ contentType: 'video/mock; codecs="mock"' }] `);
run('promise = navigator.requestMediaKeySystemAccess("org.webkit.mock", [capabilities])');
shouldResolve(promise).then(gotMediaKeySystemAccess, failTest);
}
function next() {
if (!tests.length) {
mock.unregister();
endTest()
return;
}
var nextTest = tests.shift();
consoleWrite('');
nextTest();
}
function gotMediaKeySystemAccess(result) {
mediaKeySystemAccess = result;
next();
}
function gotMediaKeys(result) {
mediaKeys = result;
next();
}
function stringToUInt8Array(str)
{
var array = new Uint8Array(str.length);
for (var i=0; i<str.length; i++)
array[i] = str.charCodeAt(i);
return array;
}
tests = [
function() {
run('promise = mediaKeySystemAccess.createMediaKeys()');
shouldResolve(promise).then(gotMediaKeys, failTest);
},
function() {
consoleWrite('Using an invalid initDataType string should reject.')
run('mediaKeySession = mediaKeys.createSession("temporary")');
testExpected('typeof mediaKeySession', 'object')
run('promise = mediaKeySession.generateRequest("invalid", stringToUInt8Array("invalid"))');
shouldReject(promise).then(next, next);
},
function() {
consoleWrite('Re-using a failed mediaKeySession should reject.')
run('kids = JSON.stringify({ kids: [ "MTIzNDU=" ] })');
run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
shouldReject(promise).then(next, next);
},
function() {
consoleWrite('Using a new mediaKeySession should resolve.')
run('kids = JSON.stringify({ kids: [ "MTIzNDU=" ] })');
run('mediaKeySession = mediaKeys.createSession("temporary")');
run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
shouldResolve(promise).then(next, next);
},
function() {
consoleWrite('Using invalid initData should reject.')
run('kids = JSON.stringify({ invalid: "invalid" })');
run('mediaKeySession = mediaKeys.createSession("temporary")');
run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
shouldReject(promise).then(next, next);
},
function() {
consoleWrite('Using initData with extraneous information should resolve.')
run('kids = JSON.stringify({ kids: [ "MTIzNDU="], invalid: "invalid" })');
run('mediaKeySession = mediaKeys.createSession("temporary")');
run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
shouldResolve(promise).then(next, next);
},
function() {
consoleWrite('initData is encoded in base64url.')
run('kids = JSON.stringify({ kids: [ "ig2FRSEF1BU1j-qPaObBkQ"] })');
run('mediaKeySession = mediaKeys.createSession("temporary")');
run('promise = mediaKeySession.generateRequest("keyids", stringToUInt8Array(kids))');
shouldResolve(promise).then(next, next);
},
];
</script>
</head>
<body onload="doTest()">
</body>
</html>