Index: chrome/test/data/media/encrypted_media_utils.js |
diff --git a/chrome/test/data/media/encrypted_media_utils.js b/chrome/test/data/media/encrypted_media_utils.js |
index 3486197c594b3a8a819b1df6a23442ee0a3e5e84..28480528bdc9fb1b954a36068a4d9c28760ed82f 100644 |
--- a/chrome/test/data/media/encrypted_media_utils.js |
+++ b/chrome/test/data/media/encrypted_media_utils.js |
@@ -14,21 +14,32 @@ var KEY = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b, |
var KEY_ID = getInitDataFromKeyId("0123456789012345"); |
// Heart beat message header. |
var HEART_BEAT_HEADER = 'HEARTBEAT'; |
+var FILE_IO_TEST_RESULT_HEADER = 'FILEIOTESTRESULT'; |
var EXTERNAL_CLEAR_KEY_KEY_SYSTEM = "org.chromium.externalclearkey"; |
+var EXTERNAL_CLEAR_KEY_FILE_IO_TEST_KEY_SYSTEM = |
+ "org.chromium.externalclearkey.fileiotest"; |
// 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) |
+function hasPrefix(msg, prefix) { |
+ if (msg.length < prefix.length) |
return false; |
- for (var i = 0; i < HEART_BEAT_HEADER.length; ++i) { |
- if (String.fromCharCode(msg[i]) != HEART_BEAT_HEADER[i]) |
+ for (var i = 0; i < prefix.length; ++i) { |
+ if (String.fromCharCode(msg[i]) != prefix[i]) |
return false; |
} |
return true; |
} |
+function isHeartbeatMessage(msg) { |
+ return hasPrefix(msg, HEART_BEAT_HEADER); |
+} |
+ |
+function isFileIOTestMessage(msg) { |
+ return hasPrefix(msg, FILE_IO_TEST_RESULT_HEADER); |
+} |
+ |
function loadEncryptedMediaFromURL(video) { |
return loadEncryptedMedia(video, mediaFile, keySystem, KEY, useMSE); |
} |
@@ -89,6 +100,21 @@ function loadEncryptedMedia(video, mediaFile, keySystem, key, useMSE, |
return; |
} |
+ if (isFileIOTestMessage(e.message)) { |
+ var success = getFileIOTestResult(e); |
+ console.log('onKeyMessage - CDM file IO test: ' + |
+ (success ? 'Success' : 'Fail')); |
+ if (success) |
+ setResultInTitle("FILEIOTESTSUCCESS"); |
+ else |
+ setResultInTitle("FAILED"); |
+ return; |
+ } |
+ |
+ // For FileIOTest key system, no need to start playback. |
+ if (e.keySystem == EXTERNAL_CLEAR_KEY_FILE_IO_TEST_KEY_SYSTEM) |
+ return; |
+ |
// No tested key system returns defaultURL in for key request messages. |
if (e.defaultURL) { |
failTest('keymessage unexpectedly has defaultURL: ' + e.defaultURL); |
@@ -125,6 +151,21 @@ function loadEncryptedMedia(video, mediaFile, keySystem, key, useMSE, |
} |
} |
+ function getFileIOTestResult(e) { |
+ // Only External Clear Key sends a FILEIOTESTRESULT message. |
+ if (e.keySystem != EXTERNAL_CLEAR_KEY_FILE_IO_TEST_KEY_SYSTEM) { |
+ failTest('Unexpected CDM file IO test result from ' + e.keySystem); |
+ return false; |
+ } |
+ |
+ // The test result is either '0' or '1' appended to the header. |
+ if (e.message.length != FILE_IO_TEST_RESULT_HEADER.length + 1) |
+ return false; |
+ |
+ var result_index = FILE_IO_TEST_RESULT_HEADER.length; |
+ return String.fromCharCode(e.message[result_index]) == 1; |
+ } |
+ |
video.addEventListener('webkitneedkey', onNeedKey); |
video.addEventListener('webkitkeymessage', onKeyMessage); |
video.addEventListener('webkitkeyerror', function() { |