tor-browser

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

file_fetch_observer.html (3500B)


      1 <script>
      2 function ok(a, msg) {
      3  parent.postMessage({ type: "check", status: !!a, message: msg }, "*");
      4 }
      5 
      6 function is(a, b, msg) {
      7  ok(a === b, msg);
      8 }
      9 
     10 function testObserver() {
     11  ok("FetchObserver" in self, "We have a FetchObserver prototype");
     12 
     13  fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', { observe: o => {
     14    ok(!!o, "We have an observer");
     15    ok(o instanceof FetchObserver, "The correct object has been passed");
     16    is(o.state, "requesting", "By default the state is requesting");
     17    next();
     18  }});
     19 }
     20 
     21 function testObserveAbort() {
     22  var ac = new AbortController();
     23 
     24  fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
     25    signal: ac.signal,
     26    observe: o => {
     27      o.onstatechange = () => {
     28        ok(true, "StateChange event dispatched");
     29        if (o.state == "aborted") {
     30          ok(true, "Aborted!");
     31          next();
     32        }
     33      }
     34      ac.abort();
     35    }
     36  });
     37 }
     38 
     39 function testObserveComplete() {
     40  var ac = new AbortController();
     41 
     42  fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
     43    signal: ac.signal,
     44    observe: o => {
     45      o.onstatechange = () => {
     46        ok(true, "StateChange event dispatched");
     47        if (o.state == "complete") {
     48          ok(true, "Operation completed");
     49          next();
     50        }
     51      }
     52    }
     53  });
     54 }
     55 
     56 function testObserveErrored() {
     57  var ac = new AbortController();
     58 
     59  fetch('foo: bar', {
     60    signal: ac.signal,
     61    observe: o => {
     62      o.onstatechange = () => {
     63        ok(true, "StateChange event dispatched");
     64        if (o.state == "errored") {
     65          ok(true, "Operation completed");
     66          next();
     67        }
     68      }
     69    }
     70  });
     71 }
     72 
     73 function testObserveResponding() {
     74  var ac = new AbortController();
     75 
     76  fetch('http://mochi.test:8888/tests/dom/tests/mochitest/fetch/slow.sjs', {
     77    signal: ac.signal,
     78    observe: o => {
     79      o.onstatechange = () => {
     80        if (o.state == "responding") {
     81          ok(true, "We have responding events");
     82          next();
     83        }
     84      }
     85    }
     86  });
     87 }
     88 
     89 function workify(worker) {
     90  function methods() {
     91    function ok(a, msg) {
     92      postMessage( { type: 'check', state: !!a, message: msg });
     93    };
     94    function is(a, b, msg) {
     95      postMessage( { type: 'check', state: a === b, message: msg });
     96    };
     97    function next() {
     98      postMessage( { type: 'finish' });
     99    };
    100  }
    101 
    102  var str = methods.toString();
    103  var methodsContent = str.substring(0, str.length - 1).split('\n').splice(1).join('\n');
    104 
    105  str = worker.toString();
    106  var workerContent = str.substring(0, str.length - 1).split('\n').splice(1).join('\n');
    107 
    108  var content = methodsContent + workerContent;
    109  var url = URL.createObjectURL(new Blob([content], { type: "application/javascript" }));
    110  var w = new Worker(url);
    111  w.onmessage = e => {
    112    if (e.data.type == 'check') {
    113      ok(e.data.state, "WORKER: " + e.data.message);
    114    } else if (e.data.type == 'finish') {
    115      next();
    116    } else {
    117      ok(false, "Something went wrong");
    118    }
    119  }
    120 }
    121 
    122 var steps = [
    123  testObserver,
    124  testObserveAbort,
    125  function() { workify(testObserveAbort); },
    126  testObserveComplete,
    127  function() { workify(testObserveComplete); },
    128  testObserveErrored,
    129  function() { workify(testObserveErrored); },
    130  testObserveResponding,
    131  function() { workify(testObserveResponding); },
    132 ];
    133 
    134 function next() {
    135  if (!steps.length) {
    136    parent.postMessage({ type: "finish" }, "*");
    137    return;
    138  }
    139 
    140  var step = steps.shift();
    141  step();
    142 }
    143 
    144 next();
    145 
    146 </script>