| Index: content/test/data/media/encrypted_media_utils.js
|
| diff --git a/content/test/data/media/encrypted_media_utils.js b/content/test/data/media/encrypted_media_utils.js
|
| index 16ab4b7ef687b6f9a74a492879936ad5469d6056..9bde89faec130ec30c581845137c7c8bd63a42f8 100644
|
| --- a/content/test/data/media/encrypted_media_utils.js
|
| +++ b/content/test/data/media/encrypted_media_utils.js
|
| @@ -31,12 +31,17 @@ var failMessage = '';
|
| // Heart beat message header.
|
| var HEART_BEAT_HEADER = 'HEARTBEAT';
|
|
|
| -function isHeartBeatMessage(msg) {
|
| +var EXTERNAL_CLEAR_KEY_KEY_SYSTEM = "org.chromium.externalclearkey";
|
| +// Note that his URL has been normalized from the one in clear_key_cdm.cc.
|
| +var EXTERNAL_CLEAR_KEY_HEARTBEAT_URL =
|
| + 'http://test.externalclearkey.chromium.org/';
|
| +
|
| +function isHeartbeatMessage(msg) {
|
| if (msg.length < HEART_BEAT_HEADER.length)
|
| return false;
|
|
|
| for (var i = 0; i < HEART_BEAT_HEADER.length; ++i) {
|
| - if (HEART_BEAT_HEADER[i] != String.fromCharCode(msg[i]))
|
| + if (String.fromCharCode(msg[i]) != HEART_BEAT_HEADER[i])
|
| return false;
|
| }
|
|
|
| @@ -44,6 +49,7 @@ function isHeartBeatMessage(msg) {
|
| }
|
|
|
| function failTest(msg) {
|
| + console.log("failTest('" + msg + "')");
|
| if (msg instanceof Event)
|
| failMessage = msg.target + '.' + msg.type;
|
| else
|
| @@ -68,8 +74,10 @@ function loadEncryptedMediaFromURL(video) {
|
| function loadEncryptedMedia(video, mediaFile, keySystem, key) {
|
| var keyRequested = false;
|
| var sourceOpened = false;
|
| - // Add a property to video to check key was added.
|
| - video.hasKeyAdded = false;
|
| + // Add properties to enable verification that events occurred.
|
| + video.receivedKeyAdded = false;
|
| + video.receivedHeartbeat = false;
|
| + video.isHeartbeatExpected = keySystem === EXTERNAL_CLEAR_KEY_KEY_SYSTEM;
|
|
|
| if (!(video && mediaFile && keySystem && key))
|
| failTest('Missing parameters in loadEncryptedMedia().');
|
| @@ -104,20 +112,58 @@ function loadEncryptedMedia(video, mediaFile, keySystem, key) {
|
| }
|
| }
|
|
|
| - function onKeyAdded() {
|
| - video.hasKeyAdded = true;
|
| + function onKeyAdded(e) {
|
| + e.target.receivedKeyAdded = true;
|
| }
|
|
|
| function onKeyMessage(e) {
|
| - if (isHeartBeatMessage(e.message)) {
|
| - console.log('onKeyMessage - heart beat', e);
|
| + // TODO(ddorwin): Enable after fixing http://crbug.com/166204.
|
| + if (!e.keySystem && false) {
|
| + failTest('keymessage without a keySystem: ' + e.keySystem);
|
| + return;
|
| + }
|
| +
|
| + if (!e.sessionId) {
|
| + failTest('keymessage without a sessionId: ' + e.sessionId);
|
| + return;
|
| + }
|
| +
|
| + if (!e.message) {
|
| + failTest('keymessage without a message: ' + e.message);
|
| + return;
|
| + }
|
| +
|
| + if (isHeartbeatMessage(e.message)) {
|
| + console.log('onKeyMessage - heartbeat', e);
|
| + e.target.receivedHeartbeat = true;
|
| + verifyHeartbeatMessage(e);
|
| return;
|
| }
|
|
|
| + // No tested key system returns defaultURL in for key request messages.
|
| + if (e.defaultURL) {
|
| + failTest('keymessage unexpectedly has defaultURL: ' + e.defaultURL);
|
| + return;
|
| + }
|
| +
|
| + // keymessage in response to generateKeyRequest. Reply with key.
|
| console.log('onKeyMessage - key request', e);
|
| video.webkitAddKey(keySystem, key, e.message);
|
| }
|
|
|
| + function verifyHeartbeatMessage(e) {
|
| + // Only External Clear Key sends a HEARTBEAT message.
|
| + if (e.keySystem != EXTERNAL_CLEAR_KEY_KEY_SYSTEM) {
|
| + failTest('Unexpected heartbeat from ' + e.keySystem);
|
| + return;
|
| + }
|
| +
|
| + if (e.defaultURL != EXTERNAL_CLEAR_KEY_HEARTBEAT_URL) {
|
| + failTest('Heartbeat message with unexpected defaultURL: ' + e.defaultURL);
|
| + return;
|
| + }
|
| + }
|
| +
|
| var mediaSource = new WebKitMediaSource();
|
|
|
| mediaSource.addEventListener('webkitsourceopen', onSourceOpen);
|
|
|