michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: 'use strict' michael@0: michael@0: const { XMLHttpRequest } = require('sdk/net/xhr'); michael@0: const { LoaderWithHookedConsole } = require('sdk/test/loader'); michael@0: const { set: setPref } = require("sdk/preferences/service"); michael@0: const data = require("./fixtures"); michael@0: michael@0: const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings"; michael@0: michael@0: exports.testAPIExtension = function(assert) { michael@0: let { loader, messages } = LoaderWithHookedConsole(module); michael@0: let { XMLHttpRequest } = loader.require("sdk/net/xhr"); michael@0: setPref(DEPRECATE_PREF, true); michael@0: michael@0: let xhr = new XMLHttpRequest(); michael@0: assert.equal(typeof(xhr.forceAllowThirdPartyCookie), "function", michael@0: "forceAllowThirdPartyCookie is defined"); michael@0: assert.equal(xhr.forceAllowThirdPartyCookie(), undefined, michael@0: "function can be called"); michael@0: michael@0: assert.ok(messages[0].msg.indexOf("`xhr.forceAllowThirdPartyCookie()` is deprecated") >= 0, michael@0: "deprecation warning was dumped"); michael@0: assert.ok(xhr.mozBackgroundRequest, "is background request"); michael@0: michael@0: loader.unload(); michael@0: }; michael@0: michael@0: exports.testAbortedXhr = function(assert, done) { michael@0: let req = new XMLHttpRequest(); michael@0: req.open('GET', data.url('testLocalXhr.json')); michael@0: req.addEventListener("abort", function() { michael@0: assert.pass("request was aborted"); michael@0: done(); michael@0: }); michael@0: req.send(null); michael@0: req.abort(); michael@0: }; michael@0: michael@0: exports.testLocalXhr = function(assert, done) { michael@0: let req = new XMLHttpRequest(); michael@0: let ready = false; michael@0: michael@0: req.overrideMimeType('text/plain'); michael@0: req.open('GET', data.url('testLocalXhr.json')); michael@0: req.onreadystatechange = function() { michael@0: if (req.readyState == 4 && (req.status == 0 || req.status == 200)) { michael@0: ready = true; michael@0: assert.equal(req.responseText, '{}\n', 'XMLHttpRequest should get local files'); michael@0: } michael@0: }; michael@0: req.addEventListener('load', function onload() { michael@0: req.removeEventListener('load', onload); michael@0: assert.pass('addEventListener for load event worked'); michael@0: assert.ok(ready, 'onreadystatechange listener worked'); michael@0: done(); michael@0: }); michael@0: req.send(null); michael@0: }; michael@0: michael@0: michael@0: exports.testResponseHeaders = function(assert, done) { michael@0: let req = new XMLHttpRequest(); michael@0: michael@0: req.overrideMimeType('text/plain'); michael@0: req.open('GET', module.uri); michael@0: req.onreadystatechange = function() { michael@0: if (req.readyState == 4 && (req.status == 0 || req.status == 200)) { michael@0: var headers = req.getAllResponseHeaders(); michael@0: headers = headers.split("\r\n"); michael@0: if (headers.length == 1) { michael@0: headers = headers[0].split("\n"); michael@0: } michael@0: for (let i in headers) { michael@0: if (headers[i] && headers[i].search('Content-Type') >= 0) { michael@0: assert.equal(headers[i], 'Content-Type: text/plain', michael@0: 'XHR\'s headers are valid'); michael@0: } michael@0: } michael@0: michael@0: done(); michael@0: } michael@0: }; michael@0: req.send(null); michael@0: } michael@0: michael@0: require('test').run(exports);