• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3// found in the LICENSE file.
4
5/**
6 * @fileoverview Implements a simple XmlHttpRequest-based text document
7 * fetcher.
8 *
9 */
10'use strict';
11
12/**
13 * A fetcher of text files.
14 * @interface
15 */
16function TextFetcher() {}
17
18/**
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
22 * @return {!Promise.<string>} A promise for the fetched text. In case of an
23 *     error, this promise is rejected with an HTTP status code.
24 */
25TextFetcher.prototype.fetch = function(url, opt_method, opt_body) {};
26
27/**
28 * @constructor
29 * @implements {TextFetcher}
30 */
31function XhrTextFetcher() {
32}
33
34/**
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
38 * @return {!Promise.<string>} A promise for the fetched text. In case of an
39 *     error, this promise is rejected with an HTTP status code.
40 */
41XhrTextFetcher.prototype.fetch = function(url, opt_method, opt_body) {
42  return new Promise(function(resolve, reject) {
43    var xhr = new XMLHttpRequest();
44    var method = opt_method || 'GET';
45    xhr.open(method, url, true);
46    xhr.onloadend = function() {
47      if (xhr.status != 200) {
48        reject(xhr.status);
49        return;
50      }
51      resolve(xhr.responseText);
52    };
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();
61  });
62};
63