summaryrefslogtreecommitdiffstats
path: root/content/test
diff options
context:
space:
mode:
authorddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-15 00:56:57 +0000
committerddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-15 00:56:57 +0000
commit65a8c103ce8c151780c76ed9cc3e9b4a3a03f1aa (patch)
treed3426ebfb9ea8c4159e3ec50d64bef258eba5325 /content/test
parent30965c8349f8478bed8cb7d67e5cea4efd19da8c (diff)
downloadchromium_src-65a8c103ce8c151780c76ed9cc3e9b4a3a03f1aa.zip
chromium_src-65a8c103ce8c151780c76ed9cc3e9b4a3a03f1aa.tar.gz
chromium_src-65a8c103ce8c151780c76ed9cc3e9b4a3a03f1aa.tar.bz2
EME v0.1: Report defaultURL in KeyMessage.
Only valid URLs will be reported. BUG=164656 TEST=The keymessage event for external Clear Key includes a fixed URL. Review URL: https://codereview.chromium.org/11469040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173251 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/test')
-rw-r--r--content/test/data/media/encrypted_media_player.html6
-rw-r--r--content/test/data/media/encrypted_media_utils.js62
2 files changed, 58 insertions, 10 deletions
diff --git a/content/test/data/media/encrypted_media_player.html b/content/test/data/media/encrypted_media_player.html
index 777a7e4..8c7d0cd 100644
--- a/content/test/data/media/encrypted_media_player.html
+++ b/content/test/data/media/encrypted_media_player.html
@@ -11,10 +11,12 @@
function onTimeUpdate() {
// webkitkeyadded should have been fired before playback.
- if (!video.hasKeyAdded)
- failTest('Key not added.');
+ if (!video.receivedKeyAdded)
+ failTest('Key added event not received.');
if (video.currentTime < 1)
return;
+ if (video.isHeartbeatExpected && !video.receivedHeartbeat)
+ failTest('Heartbeat keymessage event not received.');
video.removeEventListener('ended', failTest);
installTitleEventHandler(video, 'ended');
video.removeEventListener('timeupdate', onTimeUpdate);
diff --git a/content/test/data/media/encrypted_media_utils.js b/content/test/data/media/encrypted_media_utils.js
index 16ab4b7..9bde89f 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);