tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

xhrAbort_worker.js (2014B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 /* eslint-env worker */
      6 /* global WorkerProgressEvent */
      7 function runTest() {
      8  var xhr = new XMLHttpRequest();
      9 
     10  var events = [];
     11  function pushEvent(event) {
     12    var readyState, responseText, status, statusText;
     13 
     14    try {
     15      readyState = xhr.readyState;
     16    } catch (e) {
     17      readyState = "[exception]";
     18    }
     19 
     20    try {
     21      responseText = xhr.responseText;
     22    } catch (e) {
     23      responseText = "[exception]";
     24    }
     25 
     26    try {
     27      status = xhr.status;
     28    } catch (e) {
     29      status = "[exception]";
     30    }
     31 
     32    try {
     33      statusText = xhr.statusText;
     34    } catch (e) {
     35      statusText = "[exception]";
     36    }
     37 
     38    var str =
     39      event.type +
     40      "(" +
     41      readyState +
     42      ", '" +
     43      responseText +
     44      "', " +
     45      status +
     46      ", '" +
     47      statusText +
     48      "'";
     49    if (
     50      ("ProgressEvent" in this && event instanceof ProgressEvent) ||
     51      ("WorkerProgressEvent" in this && event instanceof WorkerProgressEvent)
     52    ) {
     53      str += ", progressEvent";
     54    }
     55    str += ")";
     56 
     57    events.push(str);
     58  }
     59 
     60  xhr.onerror = function () {
     61    throw new Error("Error: " + xhr.statusText);
     62  };
     63 
     64  xhr.onload = function () {
     65    throw new Error("Shouldn't have gotten load event!");
     66  };
     67 
     68  var seenAbort;
     69  xhr.onabort = function (event) {
     70    if (seenAbort) {
     71      throw new Error("Already seen the abort event!");
     72    }
     73    seenAbort = true;
     74 
     75    pushEvent(event);
     76    postMessage(events);
     77  };
     78 
     79  xhr.onreadystatechange = function (event) {
     80    pushEvent(event);
     81    if (xhr.readyState == xhr.HEADERS_RECEIVED) {
     82      xhr.abort();
     83    }
     84  };
     85 
     86  xhr.open("GET", "worker_testXHR.txt");
     87  xhr.overrideMimeType("text/plain");
     88  xhr.send(null);
     89 }
     90 
     91 function messageListener(event) {
     92  switch (event.data) {
     93    case "start":
     94      runTest();
     95      break;
     96    default:
     97      throw new Error("Bad message!");
     98  }
     99 }
    100 
    101 addEventListener("message", messageListener, false);