addon-sdk/source/test/test-xhr.js

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     4  'use strict'
     6 const { XMLHttpRequest } = require('sdk/net/xhr');
     7 const { LoaderWithHookedConsole } = require('sdk/test/loader');
     8 const { set: setPref } = require("sdk/preferences/service");
     9 const data = require("./fixtures");
    11 const DEPRECATE_PREF = "devtools.errorconsole.deprecation_warnings";
    13 exports.testAPIExtension = function(assert) {
    14   let { loader, messages } = LoaderWithHookedConsole(module);
    15   let { XMLHttpRequest } = loader.require("sdk/net/xhr");
    16   setPref(DEPRECATE_PREF, true);
    18   let xhr = new XMLHttpRequest();
    19   assert.equal(typeof(xhr.forceAllowThirdPartyCookie), "function",
    20                "forceAllowThirdPartyCookie is defined");
    21   assert.equal(xhr.forceAllowThirdPartyCookie(), undefined,
    22                "function can be called");
    24   assert.ok(messages[0].msg.indexOf("`xhr.forceAllowThirdPartyCookie()` is deprecated") >= 0,
    25             "deprecation warning was dumped");
    26   assert.ok(xhr.mozBackgroundRequest, "is background request");
    28   loader.unload();
    29 };
    31 exports.testAbortedXhr = function(assert, done) {
    32   let req = new XMLHttpRequest();
    33   req.open('GET', data.url('testLocalXhr.json'));
    34   req.addEventListener("abort", function() {
    35     assert.pass("request was aborted");
    36     done();
    37   });
    38   req.send(null);
    39   req.abort();
    40 };
    42 exports.testLocalXhr = function(assert, done) {
    43   let req = new XMLHttpRequest();
    44   let ready = false;
    46   req.overrideMimeType('text/plain');
    47   req.open('GET', data.url('testLocalXhr.json'));
    48   req.onreadystatechange = function() {
    49     if (req.readyState == 4 && (req.status == 0 || req.status == 200)) {
    50       ready = true;
    51       assert.equal(req.responseText, '{}\n', 'XMLHttpRequest should get local files');
    52     }
    53   };
    54   req.addEventListener('load', function onload() {
    55     req.removeEventListener('load', onload);
    56     assert.pass('addEventListener for load event worked');
    57     assert.ok(ready, 'onreadystatechange listener worked');
    58     done();
    59   });
    60   req.send(null);
    61 };
    64 exports.testResponseHeaders = function(assert, done) {
    65   let req = new XMLHttpRequest();
    67   req.overrideMimeType('text/plain');
    68   req.open('GET', module.uri);
    69   req.onreadystatechange = function() {
    70     if (req.readyState == 4 && (req.status == 0 || req.status == 200)) {
    71       var headers = req.getAllResponseHeaders();
    72       headers = headers.split("\r\n");
    73       if (headers.length == 1) {
    74         headers = headers[0].split("\n");
    75       }
    76       for (let i in headers) {
    77         if (headers[i] && headers[i].search('Content-Type') >= 0) {
    78           assert.equal(headers[i], 'Content-Type: text/plain',
    79                        'XHR\'s headers are valid');
    80         }
    81       }
    83       done();
    84     }
    85   };
    86   req.send(null);
    87 }
    89 require('test').run(exports);

mercurial