diff options
author | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-15 00:56:57 +0000 |
---|---|---|
committer | ddorwin@chromium.org <ddorwin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-15 00:56:57 +0000 |
commit | 65a8c103ce8c151780c76ed9cc3e9b4a3a03f1aa (patch) | |
tree | d3426ebfb9ea8c4159e3ec50d64bef258eba5325 /content/test | |
parent | 30965c8349f8478bed8cb7d67e5cea4efd19da8c (diff) | |
download | chromium_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.html | 6 | ||||
-rw-r--r-- | content/test/data/media/encrypted_media_utils.js | 62 |
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); |