Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / base / base64.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7 <link rel="import" href="/base.html">
8 <script>
9 'use strict';
10
11 tv.exportTo('tv', function() {
12
13   function Base64() {
14   }
15
16   function b64ToUint6(nChr) {
17     if (nChr > 64 && nChr < 91)
18       return nChr - 65;
19     if (nChr > 96 && nChr < 123)
20       return nChr - 71;
21     if (nChr > 47 && nChr < 58)
22       return nChr + 4;
23     if (nChr === 43)
24       return 62;
25     if (nChr === 47)
26       return 63;
27     return 0;
28   }
29
30   Base64.getDecodedBufferLength = function(input) {
31     return input.length * 3 + 1 >> 2;
32   }
33
34   Base64.DecodeToTypedArray = function(input, output) {
35
36     var nInLen = input.length;
37     var nOutLen = nInLen * 3 + 1 >> 2;
38     var nMod3 = 0;
39     var nMod4 = 0;
40     var nUint24 = 0;
41     var nOutIdx = 0;
42
43     if (nOutLen > output.byteLength)
44       throw new Error('Output buffer too small to decode.');
45
46     for (var nInIdx = 0; nInIdx < nInLen; nInIdx++) {
47       nMod4 = nInIdx & 3;
48       nUint24 |= b64ToUint6(input.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
49       if (nMod4 === 3 || nInLen - nInIdx === 1) {
50         for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
51           output.setUint8(nOutIdx, nUint24 >>> (16 >>> nMod3 & 24) & 255);
52         }
53         nUint24 = 0;
54       }
55     }
56     return nOutIdx - 1;
57   }
58
59   return {
60     Base64: Base64
61   };
62
63 });
64 </script>