| 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 |