OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview Implements a simple XmlHttpRequest-based text document | 6 * @fileoverview Implements a simple XmlHttpRequest-based text document |
7 * fetcher. | 7 * fetcher. |
8 * | 8 * |
9 */ | 9 */ |
10 'use strict'; | 10 'use strict'; |
11 | 11 |
12 /** | 12 /** |
13 * A fetcher of text files. | 13 * A fetcher of text files. |
14 * @interface | 14 * @interface |
15 */ | 15 */ |
16 function TextFetcher() {} | 16 function TextFetcher() {} |
17 | 17 |
18 /** | 18 /** |
19 * @param {string} url The URL to fetch. | 19 * @param {string} url The URL to fetch. |
| 20 * @param {string?} opt_method The HTTP method to use (default GET) |
| 21 * @param {string?} opt_body The request body |
20 * @return {!Promise.<string>} A promise for the fetched text. In case of an | 22 * @return {!Promise.<string>} A promise for the fetched text. In case of an |
21 * error, this promise is rejected with an HTTP status code. | 23 * error, this promise is rejected with an HTTP status code. |
22 */ | 24 */ |
23 TextFetcher.prototype.fetch = function(url) {}; | 25 TextFetcher.prototype.fetch = function(url, opt_method, opt_body) {}; |
24 | 26 |
25 /** | 27 /** |
26 * @constructor | 28 * @constructor |
27 * @implements {TextFetcher} | 29 * @implements {TextFetcher} |
28 */ | 30 */ |
29 function XhrTextFetcher() { | 31 function XhrTextFetcher() { |
30 } | 32 } |
31 | 33 |
32 /** | 34 /** |
33 * @param {string} url The URL to fetch. | 35 * @param {string} url The URL to fetch. |
| 36 * @param {string?} opt_method The HTTP method to use (default GET) |
| 37 * @param {string?} opt_body The request body |
34 * @return {!Promise.<string>} A promise for the fetched text. In case of an | 38 * @return {!Promise.<string>} A promise for the fetched text. In case of an |
35 * error, this promise is rejected with an HTTP status code. | 39 * error, this promise is rejected with an HTTP status code. |
36 */ | 40 */ |
37 XhrTextFetcher.prototype.fetch = function(url) { | 41 XhrTextFetcher.prototype.fetch = function(url, opt_method, opt_body) { |
38 return new Promise(function(resolve, reject) { | 42 return new Promise(function(resolve, reject) { |
39 var xhr = new XMLHttpRequest(); | 43 var xhr = new XMLHttpRequest(); |
40 xhr.open('GET', url, true); | 44 var method = opt_method || 'GET'; |
| 45 xhr.open(method, url, true); |
41 xhr.onloadend = function() { | 46 xhr.onloadend = function() { |
42 if (xhr.status != 200) { | 47 if (xhr.status != 200) { |
43 reject(xhr.status); | 48 reject(xhr.status); |
44 return; | 49 return; |
45 } | 50 } |
46 resolve(xhr.responseText); | 51 resolve(xhr.responseText); |
47 }; | 52 }; |
48 xhr.send(); | 53 xhr.onerror = function() { |
| 54 // Treat any network-level errors as though the page didn't exist. |
| 55 reject(404); |
| 56 }; |
| 57 if (opt_body) |
| 58 xhr.send(opt_body); |
| 59 else |
| 60 xhr.send(); |
49 }); | 61 }); |
50 }; | 62 }; |
OLD | NEW |