Index: chrome/browser/resources/cryptotoken/util.js |
diff --git a/chrome/browser/resources/cryptotoken/util.js b/chrome/browser/resources/cryptotoken/util.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..20b3a0baeda1693ced47880d25a11b1eded3c906 |
--- /dev/null |
+++ b/chrome/browser/resources/cryptotoken/util.js |
@@ -0,0 +1,157 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Various string utility functions by mschilder@google.com |
+'use strict'; |
+ |
+/** |
+ * Converts a string to an array of bytes. |
+ * @param {string} s The string to convert. |
+ * @param {(Array|Uint8Array)=} bytes The Array-like object into which to store |
+ * the bytes. A new Array will be created if not provided. |
+ * @return {(Array|Uint8Array)} An array of bytes representing the string. |
+ */ |
+function UTIL_StringToBytes(s, bytes) { |
+ bytes = bytes || new Array(s.length); |
+ for (var i = 0; i < s.length; ++i) |
+ bytes[i] = s.charCodeAt(i); |
+ return bytes; |
+} |
+ |
+function UTIL_BytesToString(b) { |
+ return String.fromCharCode.apply(null, b); |
+} |
+ |
+function UTIL_BytesToHex(b) { |
+ if (!b) return '(null)'; |
+ var hexchars = '0123456789ABCDEF'; |
+ var hexrep = new Array(b.length * 2); |
+ |
+ for (var i = 0; i < b.length; ++i) { |
+ hexrep[i * 2 + 0] = hexchars.charAt((b[i] >> 4) & 15); |
+ hexrep[i * 2 + 1] = hexchars.charAt(b[i] & 15); |
+ } |
+ return hexrep.join(''); |
+} |
+ |
+function UTIL_BytesToHexWithSeparator(b, sep) { |
+ var hexchars = '0123456789ABCDEF'; |
+ var stride = 2 + (sep ? 1 : 0); |
+ var hexrep = new Array(b.length * stride); |
+ |
+ for (var i = 0; i < b.length; ++i) { |
+ if (sep) hexrep[i * stride + 0] = sep; |
+ hexrep[i * stride + stride - 2] = hexchars.charAt((b[i] >> 4) & 15); |
+ hexrep[i * stride + stride - 1] = hexchars.charAt(b[i] & 15); |
+ } |
+ return (sep ? hexrep.slice(1) : hexrep).join(''); |
+} |
+ |
+function UTIL_HexToBytes(h) { |
+ var hexchars = '0123456789ABCDEFabcdef'; |
+ var res = new Uint8Array(h.length / 2); |
+ for (var i = 0; i < h.length; i += 2) { |
+ if (hexchars.indexOf(h.substring(i, i + 1)) == -1) break; |
+ res[i / 2] = parseInt(h.substring(i, i + 2), 16); |
+ } |
+ return res; |
+} |
+ |
+function UTIL_equalArrays(a, b) { |
+ if (!a || !b) return false; |
+ if (a.length != b.length) return false; |
+ var accu = 0; |
+ for (var i = 0; i < a.length; ++i) |
+ accu |= a[i] ^ b[i]; |
+ return accu === 0; |
+} |
+ |
+function UTIL_ltArrays(a, b) { |
+ if (a.length < b.length) return true; |
+ if (a.length > b.length) return false; |
+ for (var i = 0; i < a.length; ++i) { |
+ if (a[i] < b[i]) return true; |
+ if (a[i] > b[i]) return false; |
+ } |
+ return false; |
+} |
+ |
+function UTIL_gtArrays(a, b) { |
+ return UTIL_ltArrays(b, a); |
+} |
+ |
+function UTIL_geArrays(a, b) { |
+ return !UTIL_ltArrays(a, b); |
+} |
+ |
+function UTIL_unionArrays(a, b) { |
+ var obj = {}; |
+ for (var i = 0; i < a.length; i++) { |
+ obj[a[i]] = a[i]; |
+ } |
+ for (var i = 0; i < b.length; i++) { |
+ obj[b[i]] = b[i]; |
+ } |
+ var union = []; |
+ for (var k in obj) { |
+ union.push(obj[k]); |
+ } |
+ return union; |
+} |
+ |
+function UTIL_getRandom(a) { |
+ var tmp = new Array(a); |
+ var rnd = new Uint8Array(a); |
+ window.crypto.getRandomValues(rnd); // Yay! |
+ for (var i = 0; i < a; ++i) tmp[i] = rnd[i] & 255; |
+ return tmp; |
+} |
+ |
+function UTIL_setFavicon(icon) { |
+ // Construct a new favion link tag |
+ var faviconLink = document.createElement('link'); |
+ faviconLink.rel = 'Shortcut Icon'; |
+ faviconLink.type = 'image/x-icon'; |
+ faviconLink.href = icon; |
+ |
+ // Remove the old favion, if it exists |
+ var head = document.getElementsByTagName('head')[0]; |
+ var links = head.getElementsByTagName('link'); |
+ for (var i = 0; i < links.length; i++) { |
+ var link = links[i]; |
+ if (link.type == faviconLink.type && link.rel == faviconLink.rel) { |
+ head.removeChild(link); |
+ } |
+ } |
+ |
+ // Add in the new one |
+ head.appendChild(faviconLink); |
+} |
+ |
+// Erase all entries in array |
+function UTIL_clear(a) { |
+ if (a instanceof Array) { |
+ for (var i = 0; i < a.length; ++i) |
+ a[i] = 0; |
+ } |
+} |
+ |
+// hr:min:sec.milli string |
+function UTIL_time() { |
+ var d = new Date(); |
+ var m = '000' + d.getMilliseconds(); |
+ var s = d.toTimeString().substring(0, 8) + '.' + m.substring(m.length - 3); |
+ return s; |
+} |
+var UTIL_events = []; |
+var UTIL_max_events = 500; |
+ |
+function UTIL_fmt(s) { |
+ var line = UTIL_time() + ' ' + s; |
+ if (UTIL_events.push(line) > UTIL_max_events) { |
+ // Drop from head. |
+ UTIL_events.splice(0, UTIL_events.length - UTIL_max_events); |
+ } |
+ return line; |
+} |