Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && (asan || debug) OR os == 'android'
- Manifest: dom/media/test/mochitest_eme.toml
<!DOCTYPE HTML>
<html>
<head>
<title>Test Encrypted Media Extensions</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="manifest.js"></script>
<script type="text/javascript" src="eme.js"></script>
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">
var tests = [
{
name: "One keyId",
initDataType: 'keyids',
initData: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A"]}',
expectedRequest: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A"],"type":"temporary"}',
sessionType: 'temporary',
expectPass: true,
},
{
name: "Two keyIds",
initDataType: 'keyids',
initData: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A", "0DdtU9od-Bh5L3xbv0Xf_A"]}',
expectedRequest: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A","0DdtU9od-Bh5L3xbv0Xf_A"],"type":"temporary"}',
sessionType: 'temporary',
expectPass: true,
},
{
name: "Two keyIds, temporary session",
initDataType: 'keyids',
initData: '{"type":"temporary", "kids":["LwVHf8JLtPrv2GUXFW2v_A", "0DdtU9od-Bh5L3xbv0Xf_A"]}',
expectedRequest: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A","0DdtU9od-Bh5L3xbv0Xf_A"],"type":"temporary"}',
sessionType: 'temporary',
expectPass: true,
},
{
name: "Two keyIds, persistent session, type before kids",
initDataType: 'keyids',
initData: '{"type":"persistent-license", "kids":["LwVHf8JLtPrv2GUXFW2v_A", "0DdtU9od-Bh5L3xbv0Xf_A"]}',
expectedRequest: '{"kids":["LwVHf8JLtPrv2GUXFW2v_A","0DdtU9od-Bh5L3xbv0Xf_A"],"type":"persistent-license"}',
sessionType: 'persistent-license',
expectPass: false,
},
{
name: "Invalid keyId",
initDataType: 'keyids',
initData: '{"kids":["0"]}',
sessionType: 'temporary',
expectPass: false,
},
{
name: "Empty keyId",
initDataType: 'keyids',
initData: '{"kids":[""]}',
sessionType: 'temporary',
expectPass: false,
},
{
name: "Invalid initData",
initDataType: 'keyids',
initData: 'invalid initData',
sessionType: 'temporary',
expectPass: false,
},
{
name: "'webm' initDataType",
initDataType: 'webm',
initData: 'YAYeAX5Hfod+V9ANHtANHg==',
expectedRequest: '{"kids":["YAYeAX5Hfod-V9ANHtANHg"],"type":"temporary"}',
sessionType: 'temporary',
expectPass: true,
},
{
name: "'webm' initDataType with non 16 byte keyid",
initDataType: 'webm',
initData: 'YAYeAX5Hfod',
expectedRequest: '{\"kids\":[\"YAYeAX5Hfoc\"],\"type\":\"temporary\"}',
sessionType: 'temporary',
expectPass: true,
},
];
function PrepareInitData(initDataType, initData)
{
if (initDataType == "keyids") {
return new TextEncoder().encode(initData);
} else if (initDataType == "webm") {
return StringToArrayBuffer(atob(initData));
}
}
function Test(test) {
return new Promise(function(resolve) {
var configs = [{
initDataTypes: [test.initDataType],
videoCapabilities: [{contentType: 'video/mp4' }],
}];
navigator.requestMediaKeySystemAccess('org.w3.clearkey', configs)
.then((access) => access.createMediaKeys())
.then((mediaKeys) => {
var session = mediaKeys.createSession(test.sessionType);
session.addEventListener("message", function(event) {
is(event.messageType, "license-request", "'" + test.name + "' MediaKeyMessage type should be license-request.");
var text = new TextDecoder().decode(event.message);
is(text, test.expectedRequest, "'" + test.name + "' got expected response.");
is(text == test.expectedRequest, test.expectPass,
"'" + test.name + "' expected to " + (test.expectPass ? "pass" : "fail"));
resolve();
});
var initData = PrepareInitData(test.initDataType, test.initData);
return session.generateRequest(test.initDataType, initData);
}
).catch(() => {
ok(!test.expectPass, "'" + test.name + "' expected to fail.");
resolve();
});
});
}
SimpleTest.waitForExplicitFinish();
Promise.all(tests.map(Test)).then(function() {
SimpleTest.finish();
});
</script>
</pre>
</body>
</html>