OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <!-- |
3 Copyright (c) 2013 The Chromium Authors. All rights reserved. | 3 Copyright (c) 2013 The Chromium Authors. All rights reserved. |
4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
5 found in the LICENSE file. | 5 found in the LICENSE file. |
6 --> | 6 --> |
7 | 7 |
8 <link rel="import" href="/tracing/base/base.html"> | 8 <link rel="import" href="/tracing/base/base.html"> |
9 | 9 |
10 <script> | 10 <script> |
11 'use strict'; | 11 'use strict'; |
12 | 12 |
13 tr.exportTo('tr.b', function() { | 13 tr.exportTo('tr.b', function() { |
14 var fs; | 14 var fs; |
15 if (tr.isNode) | 15 if (tr.isNode) fs = require('fs'); |
16 fs = require('fs'); | |
17 | 16 |
18 function guessBinary(url) { | 17 function guessBinary(url) { |
19 return /[.]gz$/.test(url) || /[.]zip$/.test(url); | 18 return /[.]gz$/.test(url) || /[.]zip$/.test(url); |
20 } | 19 } |
21 function xhr(method, url, async, opt_data, forceBinary) { | 20 function xhr(method, url, async, opt_data, forceBinary) { |
22 var req = new XMLHttpRequest(); | 21 var req = new XMLHttpRequest(); |
23 req.overrideMimeType('text/plain; charset=x-user-defined'); | 22 req.overrideMimeType('text/plain; charset=x-user-defined'); |
24 req.open(method, url, async); | 23 req.open(method, url, async); |
25 | 24 |
26 var isBinary = forceBinary; | 25 var isBinary = forceBinary; |
27 | 26 |
28 if (isBinary === undefined) { | 27 if (isBinary === undefined) { |
29 guessBinary(url); | 28 guessBinary(url); |
30 if (isBinary && async) | 29 if (isBinary && async) req.responseType = 'arraybuffer'; |
31 req.responseType = 'arraybuffer'; | |
32 } | 30 } |
33 | 31 |
34 var data = opt_data !== undefined ? opt_data : null; | 32 var data = opt_data !== undefined ? opt_data : null; |
35 | 33 |
36 if (!async) { | 34 if (!async) { |
37 req.send(data); | 35 req.send(data); |
38 if (req.status === 200) | 36 if (req.status === 200) return req.responseText; |
39 return req.responseText; | |
40 throw new Error('XHR failed with status ' + req.status + | 37 throw new Error('XHR failed with status ' + req.status + |
41 ' for url ' + url); | 38 ' for url ' + url); |
42 } | 39 } |
43 | 40 |
44 var p = new Promise(function(resolve, reject) { | 41 var p = new Promise(function(resolve, reject) { |
45 req.onreadystatechange = function(aEvt) { | 42 req.onreadystatechange = function(aEvt) { |
46 if (req.readyState === 4) { | 43 if (req.readyState === 4) { |
47 window.setTimeout(function() { | 44 window.setTimeout(function() { |
48 if (req.status === 200) { | 45 if (req.status === 200) { |
49 if (req.responseType === 'arraybuffer') | 46 if (req.responseType === 'arraybuffer') { |
50 return resolve(req.response); | 47 return resolve(req.response); |
| 48 } |
51 return resolve(req.responseText); | 49 return resolve(req.responseText); |
52 } | 50 } |
53 reject(new Error('XHR failed with status ' + req.status + | 51 reject(new Error('XHR failed with status ' + req.status + |
54 ' for url ' + url)); | 52 ' for url ' + url)); |
55 }, 0); | 53 }, 0); |
56 } | 54 } |
57 }; | 55 }; |
58 }); | 56 }); |
59 req.send(data); | 57 req.send(data); |
60 return p; | 58 return p; |
61 } | 59 } |
62 | 60 |
63 function getAsync(url) { | 61 function getAsync(url) { |
64 // Browser. | 62 // Browser. |
65 if (!tr.isHeadless) | 63 if (!tr.isHeadless) return xhr('GET', url, true); |
66 return xhr('GET', url, true); | |
67 | 64 |
68 // Node or vinn prep. | 65 // Node or vinn prep. |
69 var filename; | 66 var filename; |
70 if (url.startsWith('file:///')) | 67 if (url.startsWith('file:///')) { |
71 filename = url.substring(7); | 68 filename = url.substring(7); |
72 else | 69 } else { |
73 filename = global.HTMLImportsLoader.hrefToAbsolutePath(url); | 70 filename = global.HTMLImportsLoader.hrefToAbsolutePath(url); |
| 71 } |
74 var isBinary = guessBinary(url); | 72 var isBinary = guessBinary(url); |
75 | 73 |
76 // Node. | 74 // Node. |
77 if (tr.isNode) { | 75 if (tr.isNode) { |
78 var encoding = isBinary ? undefined : 'utf8'; | 76 var encoding = isBinary ? undefined : 'utf8'; |
79 return new Promise(function(resolve, reject) { | 77 return new Promise(function(resolve, reject) { |
80 fs.readFile(filename, encoding, function(err, data) { | 78 fs.readFile(filename, encoding, function(err, data) { |
81 if (err) { | 79 if (err) { |
82 reject(err); | 80 reject(err); |
83 return; | 81 return; |
84 } | 82 } |
85 resolve(data); | 83 resolve(data); |
86 }); | 84 }); |
87 }); | 85 }); |
88 } | 86 } |
89 | 87 |
90 // Vinn. | 88 // Vinn. |
91 return Promise.resolve().then(function() { | 89 return Promise.resolve().then(function() { |
92 if (isBinary) | 90 if (isBinary) return readbuffer(filename); |
93 return readbuffer(filename); | |
94 return read(filename); | 91 return read(filename); |
95 }); | 92 }); |
96 } | 93 } |
97 | 94 |
98 function getSync(url) { | 95 function getSync(url) { |
99 // Browser. | 96 // Browser. |
100 if (!tr.isHeadless) | 97 if (!tr.isHeadless) return xhr('GET', url, false); |
101 return xhr('GET', url, false); | |
102 | 98 |
103 // Node or vinn prep. | 99 // Node or vinn prep. |
104 var filename; | 100 var filename; |
105 if (url.startsWith('file:///')) // posix | 101 if (url.startsWith('file:///')) { // posix |
106 filename = url.substring(7); | 102 filename = url.substring(7); |
107 else if (url.startsWith('file://') && url[8] === ':') // win | 103 } else if (url.startsWith('file://') && url[8] === ':') { // win |
108 filename = url.substring(7); | 104 filename = url.substring(7); |
109 else | 105 } else { |
110 filename = global.HTMLImportsLoader.hrefToAbsolutePath(url); | 106 filename = global.HTMLImportsLoader.hrefToAbsolutePath(url); |
| 107 } |
111 var isBinary = guessBinary(url); | 108 var isBinary = guessBinary(url); |
112 | 109 |
113 // Node. | 110 // Node. |
114 if (tr.isNode) { | 111 if (tr.isNode) { |
115 var encoding = isBinary ? undefined : 'utf8'; | 112 var encoding = isBinary ? undefined : 'utf8'; |
116 return fs.readFileSync(filename, encoding); | 113 return fs.readFileSync(filename, encoding); |
117 } | 114 } |
118 | 115 |
119 // Vinn. | 116 // Vinn. |
120 try { | 117 try { |
121 if (isBinary) | 118 if (isBinary) return readbuffer(filename); |
122 return readbuffer(filename); | |
123 return read(filename); | 119 return read(filename); |
124 } catch (ex) { | 120 } catch (ex) { |
125 if (ex.message) { | 121 if (ex.message) { |
126 ex.message += ' when reading ' + filename; | 122 ex.message += ' when reading ' + filename; |
127 throw ex; | 123 throw ex; |
128 } | 124 } |
129 throw new Error(ex + ' when reading' + filename); | 125 throw new Error(ex + ' when reading' + filename); |
130 } | 126 } |
131 } | 127 } |
132 | 128 |
133 function postAsync(url, data) { | 129 function postAsync(url, data) { |
134 if (tr.isHeadless) | 130 if (tr.isHeadless) { |
135 throw new Error('Only supported inside a browser'); | 131 throw new Error('Only supported inside a browser'); |
| 132 } |
136 return xhr('POST', url, true, data); | 133 return xhr('POST', url, true, data); |
137 } | 134 } |
138 | 135 |
139 function postTextAsync(url, data) { | 136 function postTextAsync(url, data) { |
140 if (tr.isHeadless) | 137 if (tr.isHeadless) { |
141 throw new Error('Only supported inside a browser'); | 138 throw new Error('Only supported inside a browser'); |
| 139 } |
142 return xhr('POST', url, true, data, false); | 140 return xhr('POST', url, true, data, false); |
143 } | 141 } |
144 | 142 |
145 return { | 143 return { |
146 getAsync, | 144 getAsync, |
147 getSync, | 145 getSync, |
148 postAsync, | 146 postAsync, |
149 }; | 147 }; |
150 }); | 148 }); |
151 </script> | 149 </script> |
OLD | NEW |