summaryrefslogtreecommitdiffstats
path: root/addon-sdk/source/test/test-xhr.js
blob: 30ee8e3621d2fab195b470e9cf948ecf43a1ef88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 'use strict'

const { XMLHttpRequest } = require('sdk/net/xhr');
const { LoaderWithHookedConsole } = require('sdk/test/loader');
const { set: setPref } = require("sdk/preferences/service");
const data = require("./fixtures");

const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings";

exports.testAPIExtension = function(assert) {
  let { loader, messages } = LoaderWithHookedConsole(module);
  let { XMLHttpRequest } = loader.require("sdk/net/xhr");
  setPref(DEPRECATE_PREF, true);

  let xhr = new XMLHttpRequest();
  assert.equal(typeof(xhr.forceAllowThirdPartyCookie), "function",
               "forceAllowThirdPartyCookie is defined");
  assert.equal(xhr.forceAllowThirdPartyCookie(), undefined,
               "function can be called");

  assert.ok(messages[0].msg.indexOf("`xhr.forceAllowThirdPartyCookie()` is deprecated") >= 0,
            "deprecation warning was dumped");
  assert.ok(xhr.mozBackgroundRequest, "is background request");

  loader.unload();
};

exports.testAbortedXhr = function(assert, done) {
  let req = new XMLHttpRequest();
  req.open('GET', data.url('testLocalXhr.json'));
  req.addEventListener("abort", function() {
    assert.pass("request was aborted");
    done();
  });
  req.send(null);
  req.abort();
};

exports.testLocalXhr = function(assert, done) {
  let req = new XMLHttpRequest();
  let ready = false;

  req.overrideMimeType('text/plain');
  req.open('GET', data.url('testLocalXhr.json'));
  req.onreadystatechange = function() {
    if (req.readyState == 4 && (req.status == 0 || req.status == 200)) {
      ready = true;
      assert.equal(req.responseText, '{}\n', 'XMLHttpRequest should get local files');
    }
  };
  req.addEventListener('load', function onload() {
    req.removeEventListener('load', onload);
    assert.pass('addEventListener for load event worked');
    assert.ok(ready, 'onreadystatechange listener worked');
    done();
  });
  req.send(null);
};


exports.testResponseHeaders = function(assert, done) {
  let req = new XMLHttpRequest();

  req.overrideMimeType('text/plain');
  req.open('GET', module.uri);
  req.onreadystatechange = function() {
    if (req.readyState == 4 && (req.status == 0 || req.status == 200)) {
      var headers = req.getAllResponseHeaders();
      headers = headers.split("\r\n");
      if (headers.length == 1) {
        headers = headers[0].split("\n");
      }
      for (let i in headers) {
        if (headers[i] && headers[i].search('Content-Type') >= 0) {
          assert.equal(headers[i], 'Content-Type: text/plain',
                       'XHR\'s headers are valid');
        }
      }

      done();
    }
  };
  req.send(null);
}

require('sdk/test').run(exports);