Chromium Code Reviews| Index: chrome/test/data/media/eme_player_js/utils.js |
| diff --git a/chrome/test/data/media/eme_player_js/utils.js b/chrome/test/data/media/eme_player_js/utils.js |
| index e9ecd2de6347f0903cc1557ae400852e35753235..86082a54b7ec361ee5bea8221661ae6adccf3619 100644 |
| --- a/chrome/test/data/media/eme_player_js/utils.js |
| +++ b/chrome/test/data/media/eme_player_js/utils.js |
| @@ -5,11 +5,18 @@ |
| // Utils provide logging functions and other JS functions commonly used by the |
| // app and media players. |
| var Utils = new function() { |
| -} |
| + this.titleChanged = false; |
|
jrummell
2014/05/29 21:45:05
Should you call resetTitleChange() instead?
shadi
2014/05/31 00:31:37
This is more like a constructor, so setting this.t
|
| +}; |
| -Utils.isHeartBeatMessage = function(msg) { |
| - var message = String.fromCharCode.apply(null, msg); |
| - return message.substring(0, HEART_BEAT_HEADER.length) == HEART_BEAT_HEADER; |
| +// Adds options to document element. |
| +Utils.addOptions = function(elementID, keyValueOptions) { |
| + var selectElement = document.getElementById(elementID); |
| + var keys = Object.keys(keyValueOptions); |
| + for (var i = 0; i < keys.length; i++) { |
| + var option = new Option(keys[i], keyValueOptions[keys[i]]); |
| + option.title = keyValueOptions[keys[i]]; |
| + selectElement.options.add(option); |
| + } |
| }; |
| Utils.convertToArray = function(input) { |
| @@ -18,17 +25,6 @@ Utils.convertToArray = function(input) { |
| return [input]; |
| }; |
| -Utils.getHexString = function(uintArray) { |
| - var hex_str = ''; |
| - for (var i = 0; i < uintArray.length; i++) { |
| - var hex = uintArray[i].toString(16); |
| - if (hex.length == 1) |
| - hex = '0' + hex; |
| - hex_str += hex; |
| - } |
| - return hex_str; |
| -}; |
| - |
| Utils.convertToUint8Array = function(msg) { |
| var ans = new Uint8Array(msg.length); |
| for (var i = 0; i < msg.length; i++) { |
| @@ -37,81 +33,6 @@ Utils.convertToUint8Array = function(msg) { |
| return ans; |
| }; |
| -Utils.timeLog = function(/**/) { |
| - function documentLog(time, log) { |
| - var time = '<span style="color: green">' + time + '</span>'; |
| - docLogs.innerHTML = time + ' - ' + log + '<br>' + docLogs.innerHTML; |
| - } |
| - |
| - if (arguments.length == 0) |
| - return; |
| - var time = Utils.getCurrentTimeString(); |
| - // Log to document. |
| - documentLog(time, arguments[0]); |
| - |
| - // Log to JS console. |
| - var args = []; |
| - args.push(time + ' - '); |
| - for (var i = 0; i < arguments.length; i++) { |
| - args.push(arguments[i]); |
| - } |
| - console.log.apply(console, args); |
| -}; |
| - |
| -Utils.getCurrentTimeString = function() { |
| - var date = new Date(); |
| - var hours = ('0' + date.getHours()).slice(-2); |
| - var minutes = ('0' + date.getMinutes()).slice(-2); |
| - var secs = ('0' + date.getSeconds()).slice(-2); |
| - var milliSecs = ('00' + date.getMilliseconds()).slice(-3); |
| - return hours + ':' + minutes + ':' + secs + '.' + milliSecs; |
| -}; |
| - |
| -Utils.failTest = function(msg) { |
| - var failMessage = 'FAIL: '; |
| - // Handle exception messages; |
| - if (msg.message) { |
| - failMessage += msg.name ? msg.name : 'Error '; |
| - failMessage += msg.message; |
| - } |
| - // Handle failing events. |
| - else if (msg instanceof Event) |
| - failMessage = msg.target + '.' + msg.type; |
| - else |
| - failMessage = msg; |
| - Utils.timeLog('<span style="color: red">' + failMessage + '</span>', msg); |
| -}; |
| - |
| -Utils.sendRequest = function(requestType, responseType, message, serverURL, |
| - onSuccessCallbackFn) { |
| - var xmlhttp = new XMLHttpRequest(); |
| - xmlhttp.responseType = responseType; |
| - xmlhttp.open(requestType, serverURL, true); |
| - |
| - xmlhttp.onload = function(e) { |
| - if (this.status == 200) { |
| - if (onSuccessCallbackFn) |
| - onSuccessCallbackFn(this.response); |
| - } else { |
| - Utils.timeLog('Bad response status: ' + this.status); |
| - Utils.timeLog('Bad response: ' + this.response); |
| - } |
| - }; |
| - Utils.timeLog('Sending request to server: ' + serverURL); |
| - xmlhttp.send(message); |
| -}; |
| - |
| -// Adds options to document element. |
| -Utils.addOptions = function(elementID, keyValueOptions) { |
| - var selectElement = document.getElementById(elementID); |
| - var keys = Object.keys(keyValueOptions); |
| - for (var i = 0; i < keys.length; i++) { |
| - var option = new Option(keys[i], keyValueOptions[keys[i]]); |
| - option.title = keyValueOptions[keys[i]]; |
| - selectElement.options.add(option); |
| - } |
| -}; |
| - |
| Utils.createJWKData = function(keyId, key) { |
| // JWK routines copied from third_party/WebKit/LayoutTests/media/ |
| // encrypted-media/encrypted-media-utils.js |
| @@ -148,3 +69,170 @@ Utils.createJWKData = function(keyId, key) { |
| return Utils.convertToUint8Array(createJWKSet(createJWK(keyId, key))); |
| }; |
| + |
| +Utils.documentLog = function(log, success, time) { |
| + if (!docLogs) |
| + return; |
| + time = time || Utils.getCurrentTimeString(); |
| + var timeLog = '<span style="color: green">' + time + '</span>'; |
| + var logColor = !success ? 'red' : 'black'; // default is true. |
| + log = '<span style="color: "' + logColor + '>' + log + '</span>'; |
| + docLogs.innerHTML = timeLog + ' - ' + log + '<br>' + docLogs.innerHTML; |
| +}; |
| + |
| +Utils.ensureOptionInList = function(listID, option) { |
| + var selectElement = document.getElementById(listID); |
| + for (var i = 0; i < selectElement.length; i++) { |
| + if (selectElement.options[i].value == option) { |
| + selectElement.value = option; |
| + return; |
| + } |
| + } |
| + // The list does not have the option, let's add it and select it. |
| + var optionElement = new Option(option, option); |
| + optionElement.title = option; |
| + selectElement.options.add(optionElement); |
| + selectElement.value = option; |
| +}; |
| + |
| +Utils.failTest = function(msg, newTitle) { |
| + var failMessage = 'FAIL: '; |
| + var title = 'FAILED'; |
| + // Handle exception messages; |
| + if (msg.message) { |
| + failMessage += (msg.name || 'Error') + ' ' + msg.message; |
| + title = msg.name; |
| + } else if (msg instanceof Event) { |
| + // Handle failing events. |
| + failMessage = msg.target + '.' + msg.type; |
| + title = msg.type; |
| + } else { |
| + failMessage += msg; |
| + } |
| + // Force newTitle if passed. |
| + title = newTitle || title; |
| + // Log failure. |
| + Utils.documentLog(failMessage, false); |
| + console.log(failMessage, msg); |
| + Utils.setResultInTitle(title); |
| +}; |
| + |
| +Utils.getCurrentTimeString = function() { |
| + var date = new Date(); |
| + var hours = ('0' + date.getHours()).slice(-2); |
| + var minutes = ('0' + date.getMinutes()).slice(-2); |
| + var secs = ('0' + date.getSeconds()).slice(-2); |
| + var milliSecs = ('00' + date.getMilliseconds()).slice(-3); |
| + return hours + ':' + minutes + ':' + secs + '.' + milliSecs; |
| +}; |
| + |
| +Utils.getDefaultKey = function(forceInvalidResponse) { |
| + if (forceInvalidResponse) { |
| + Utils.timeLog('Forcing invalid key data.'); |
| + return new Uint8Array([0xAA]); |
| + } |
| + return KEY; |
| +}; |
| + |
| +Utils.getHexString = function(uintArray) { |
| + var hex_str = ''; |
| + for (var i = 0; i < uintArray.length; i++) { |
| + var hex = uintArray[i].toString(16); |
| + if (hex.length == 1) |
| + hex = '0' + hex; |
| + hex_str += hex; |
| + } |
| + return hex_str; |
| +}; |
| + |
| +Utils.getInitDataFromMessage = function(message, mediaType) { |
| + var initData = message.message; |
| + if (mediaType.indexOf('mp4') != -1) { |
| + // Temporary hack for Clear Key in v0.1. |
| + // If content uses mp4, then message.message is PSSH data. Instead of |
| + // parsing that data we hard code the initData. |
| + initData = Utils.convertToUint8Array(KEY_ID); |
| + } |
| + return initData; |
| +}; |
| + |
| +Utils.installTitleEventHandler = function(element, event) { |
| + element.addEventListener(event, function(e) { |
| + Utils.setResultInTitle(e.type); |
| + }, false); |
| +}; |
| + |
| +Utils.isHeartBeatMessage = function(msg) { |
| + var message = String.fromCharCode.apply(null, msg); |
| + return message.substring(0, HEART_BEAT_HEADER.length) == HEART_BEAT_HEADER; |
| +}; |
| + |
| +Utils.resetTitleChange = function() { |
| + this.titleChanged = false; |
| + document.title = ''; |
| +}; |
| + |
| +Utils.sendRequest = function(requestType, responseType, message, serverURL, |
| + onSuccessCallbackFn, forceInvalidResponse) { |
| + var requestAttemptCount = 0; |
| + var MAXIMUM_REQUEST_ATTEMPTS = 3; |
| + var REQUEST_RETRY_DELAY_MS = 3000; |
| + |
| + function sendRequestAttempt() { |
| + requestAttemptCount++; |
| + if (requestAttemptCount == MAXIMUM_REQUEST_ATTEMPTS) { |
| + Utils.failTest('FAILED: Exceeded maximum license request attempts.'); |
| + return; |
| + } |
| + |
| + var xmlhttp = new XMLHttpRequest(); |
| + xmlhttp.responseType = responseType; |
| + xmlhttp.open(requestType, serverURL, true); |
| + |
| + xmlhttp.onload = function(e) { |
| + if (this.status == 200) { |
| + if (onSuccessCallbackFn) |
| + onSuccessCallbackFn(this.response); |
| + } else { |
| + Utils.timeLog('Bad response status: ' + this.status); |
| + Utils.timeLog('Bad response: ' + this.response); |
| + Utils.timeLog('Retrying request if possible in ' + |
| + LICENSE_REQUEST_RETRY_DELAY_MS + 'ms'); |
| + setTimeout(sendRequestAttempt, LICENSE_REQUEST_RETRY_DELAY_MS); |
| + } |
| + }; |
| + Utils.timeLog('Attempt (' + requestAttemptCount + |
| + '): sending request to server: ' + serverURL); |
| + xmlhttp.send(message); |
| + } |
| + |
| + if (forceInvalidResponse) { |
| + Utils.timeLog('Not sending request - forcing an invalid response.'); |
| + return onSuccessCallbackFn([0xAA]); |
| + } |
| + sendRequestAttempt(); |
| +}; |
| + |
| +Utils.setResultInTitle = function(title) { |
| + // If document title is 'ENDED', then update it with new title to possibly |
| + // mark a test as failure. Otherwise, keep the first title change in place. |
| + if (!this.titleChanged || document.title.toUpperCase() == 'ENDED') |
| + document.title = title.toUpperCase(); |
| + Utils.timeLog('Set document title to: ' + title + ', updated title: ' + |
| + document.title); |
| + this.titleChanged = true; |
| +}; |
| + |
| +Utils.timeLog = function(/**/) { |
| + if (arguments.length == 0) |
| + return; |
| + var time = Utils.getCurrentTimeString(); |
| + // Log to document. |
| + Utils.documentLog(arguments[0], time); |
| + // Log to JS console. |
| + var logString = time + ' - '; |
| + for (var i = 0; i < arguments.length; i++) { |
| + logString += ' ' + arguments[i]; |
|
jrummell
2014/05/29 21:45:05
Could you use something like format_value() from t
shadi
2014/05/31 00:31:37
That would be nice, except that I would have to du
|
| + } |
| + console.log(logString); |
| +}; |