Bug 1351124 - Factor out ClearKey license generation in EME mochitests. r=jya
Makes it easier to re-use in the test in the next patch.
MozReview-Commit-ID: 56Gbe8KFSgX
--- a/dom/media/test/eme.js
+++ b/dom/media/test/eme.js
@@ -102,51 +102,47 @@ function SourceBufferToString(sb)
+ "}");
}
function SourceBufferListToString(sbl)
{
return "SourceBufferList[" + sbl.map(SourceBufferToString).join(", ") + "]";
}
+function GenerateClearKeyLicense(licenseRequest, keyStore)
+{
+ var msgStr = ArrayBufferToString(licenseRequest);
+ var msg = JSON.parse(msgStr);
+
+ var keys = [];
+ for (var i = 0; i < msg.kids.length; i++) {
+ var id64 = msg.kids[i];
+ var idHex = Base64ToHex(msg.kids[i]).toLowerCase();
+ var key = keyStore[idHex];
+
+ if (key) {
+ keys.push({
+ "kty": "oct",
+ "kid": id64,
+ "k": HexToBase64(key)
+ });
+ }
+ }
+
+ return new TextEncoder().encode(JSON.stringify({
+ "keys" : keys,
+ "type" : msg.type || "temporary"
+ }));
+}
+
function UpdateSessionFunc(test, token, sessionType, resolve, reject) {
return function(ev) {
- var msgStr = ArrayBufferToString(ev.message);
- var msg = JSON.parse(msgStr);
-
- Log(token, "got message from CDM: " + msgStr);
- is(msg.type, sessionType, TimeStamp(token) + " key session type should match");
- ok(msg.kids, TimeStamp(token) + " message event should contain key ID array");
-
- var outKeys = [];
-
- for (var i = 0; i < msg.kids.length; i++) {
- var id64 = msg.kids[i];
- var idHex = Base64ToHex(msg.kids[i]).toLowerCase();
- var key = test.keys[idHex];
-
- if (key) {
- Log(token, "found key " + key + " for key id " + idHex);
- outKeys.push({
- "kty":"oct",
- "kid":id64,
- "k":HexToBase64(key)
- });
- } else {
- reject(`${token} couldn't find key for key id ${idHex}`);
- }
- }
-
- var update = JSON.stringify({
- "keys" : outKeys,
- "type" : msg.type
- });
- Log(token, "sending update message to CDM: " + update);
-
- ev.target.update(StringToArrayBuffer(update)).then(function() {
+ var license = GenerateClearKeyLicense(ev.message, test.keys);
+ Log(token, "sending update message to CDM: " + (new TextDecoder().decode(license)));
+ ev.target.update(license).then(function() {
Log(token, "MediaKeySession update ok!");
resolve(ev.target);
}).catch(function(reason) {
reject(`${token} MediaKeySession update failed: ${reason}`);
});
}
}
--- a/dom/media/test/test_eme_sample_groups_playback.html
+++ b/dom/media/test/test_eme_sample_groups_playback.html
@@ -64,39 +64,26 @@
return navigator.requestMediaKeySystemAccess("org.w3.clearkey", options)
.then((keySystemAccess) => {
return keySystemAccess.createMediaKeys();
}, bail("Failed to request key system access."))
.then((mediaKeys) => {
video.setMediaKeys(mediaKeys);
+
var session = mediaKeys.createSession();
once(session, "message", (ev) => {
is(ev.messageType, "license-request", "Expected a license-request");
+ session.update(GenerateClearKeyLicense(ev.message, test.keys));
+ });
- var keys = [];
- for (var keyid in test.keys) {
- keys.push({
- "kty":"oct",
- "kid":HexToBase64(keyid),
- "k":HexToBase64(test.keys[keyid])
- });
- }
-
- var license = new TextEncoder().encode(JSON.stringify({
- "keys": keys,
- "type": test.sessionType || "temporary"
- }));
- session.update(license);
- });
var json = JSON.stringify({
"kids":Object.keys(test.keys).map(HexToBase64)
});
-
var request = new TextEncoder().encode(json);
session.generateRequest("keyids", request)
.then(e => {
Log(test.name, "Request license success");
}, reason => {
Log("Request license failed! " + reason);
});
});