From 598e042b4a97568bccf0641d2f6f9e1215e49fea Mon Sep 17 00:00:00 2001 From: Joey Parrish Date: Fri, 27 Feb 2015 16:19:52 -0800 Subject: [PATCH] Always use base64url encoding. This fixes clearkey errors on newer versions of Chrome 42. Change-Id: I3c0d7336fa21587fe730c747e8aea92657a6cf33 --- lib/util/string_utils.js | 10 ++++++---- lib/util/uint8array_utils.js | 9 ++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/util/string_utils.js b/lib/util/string_utils.js index 5aee6301f..b8ad4f30c 100644 --- a/lib/util/string_utils.js +++ b/lib/util/string_utils.js @@ -26,25 +26,27 @@ goog.provide('shaka.util.StringUtils'); /** - * Convert a raw string to a base-64 string. + * Convert a raw string to a base64 string. The output will always use the + * alternate encoding/alphabet also known as "base64url". * @param {string} str * @param {boolean=} opt_padding If true, pad the output with equals signs. * Defaults to true. * @return {string} */ shaka.util.StringUtils.toBase64 = function(str, opt_padding) { - var base64 = window.btoa(str); var padding = (opt_padding == undefined) ? true : opt_padding; + var base64 = window.btoa(str).replace(/\+/g, '-').replace(/\//g, '_'); return padding ? base64 : base64.replace(/=*$/, ''); }; /** - * Convert a base-64 string to a raw string. + * Convert a base64 string to a raw string. Accepts either the standard + * alphabet or the alternate "base64url" alphabet. * @param {string} str * @return {string} */ shaka.util.StringUtils.fromBase64 = function(str) { - return window.atob(str); + return window.atob(str.replace(/-/g, '+').replace(/_/g, '/')); }; diff --git a/lib/util/uint8array_utils.js b/lib/util/uint8array_utils.js index 5e26e3cd2..c8a4bde79 100644 --- a/lib/util/uint8array_utils.js +++ b/lib/util/uint8array_utils.js @@ -55,7 +55,8 @@ shaka.util.Uint8ArrayUtils.fromString = function(str) { /** - * Convert a Uint8Array to a base-64 string. + * Convert a Uint8Array to a base64 string. The output will always use the + * alternate encoding/alphabet also known as "base64url". * @param {!Uint8Array} arr * @param {boolean=} opt_padding If true, pad the output with equals signs. * Defaults to true. @@ -69,13 +70,15 @@ shaka.util.Uint8ArrayUtils.toBase64 = function(arr, opt_padding) { /** - * Convert a base-64 string to a Uint8Array. + * Convert a base64 string to a Uint8Array. Accepts either the standard + * alphabet or the alternate "base64url" alphabet. * @param {string} str * @return {!Uint8Array} * @export */ shaka.util.Uint8ArrayUtils.fromBase64 = function(str) { - return shaka.util.Uint8ArrayUtils.fromString(window.atob(str)); + return shaka.util.Uint8ArrayUtils.fromString( + shaka.util.StringUtils.fromBase64(str)); };