tor-browser

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

abort-refresh-immediate.window.js (4842B)


      1 // The following tests deal with the <meta http-equiv=refresh> pragma and the
      2 // `Refresh` header. The spec is still hazy on the precise behavior in those
      3 // cases but we use https://github.com/whatwg/html/issues/4003 as a guideline.
      4 
      5 async_test(t => {
      6  const frame = document.body.appendChild(document.createElement("iframe"));
      7  t.add_cleanup(() => frame.remove());
      8  frame.onload = t.step_func(() => {
      9    frame.onload = null;
     10 
     11    const client = new frame.contentWindow.XMLHttpRequest();
     12    client.open("GET", "/common/blank.html");
     13    client.onabort = t.step_func_done();
     14    client.send();
     15 
     16    frame.contentDocument.open();
     17  });
     18  frame.src = "resources/meta-refresh.py?0";
     19 }, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (XMLHttpRequest)");
     20 
     21 async_test(t => {
     22  const frame = document.body.appendChild(document.createElement("iframe"));
     23  t.add_cleanup(() => frame.remove());
     24  frame.onload = t.step_func(() => {
     25    frame.onload = null;
     26 
     27    frame.contentWindow.fetch("/common/blank.html").then(
     28      t.unreached_func("Fetch should have been aborted"),
     29      t.step_func_done());
     30 
     31    frame.contentDocument.open();
     32  });
     33  frame.src = "resources/meta-refresh.py?0";
     34 }, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (fetch())");
     35 
     36 // We cannot test for img element's error event for this test, as Firefox does
     37 // not fire the event if the fetch is aborted while Chrome does.
     38 async_test(t => {
     39  const frame = document.body.appendChild(document.createElement("iframe"));
     40  t.add_cleanup(() => frame.remove());
     41  frame.onload = t.step_func(() => {
     42    frame.onload = null;
     43 
     44    let happened = false;
     45    const img = frame.contentDocument.createElement("img");
     46    img.src = new URL("resources/slow-png.py", document.URL);
     47    img.onload = t.unreached_func("Image loading should not have succeeded");
     48    // The image fetch starts in a microtask, so let's be sure to test after
     49    // the fetch has started.
     50    t.step_timeout(() => {
     51      frame.contentDocument.open();
     52      happened = true;
     53    });
     54    // If 3 seconds have passed and the image has still not loaded, we consider
     55    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
     56    t.step_timeout(t.step_func_done(() => {
     57      assert_true(happened);
     58    }), 3000);
     59  });
     60  frame.src = "resources/meta-refresh.py?0";
     61 }, "document.open() aborts documents that are queued for navigation through <meta> refresh with timeout 0 (image loading)");
     62 
     63 async_test(t => {
     64  const frame = document.body.appendChild(document.createElement("iframe"));
     65  t.add_cleanup(() => frame.remove());
     66  frame.onload = t.step_func(() => {
     67    frame.onload = null;
     68 
     69    const client = new frame.contentWindow.XMLHttpRequest();
     70    client.open("GET", "/common/blank.html");
     71    client.onabort = t.step_func_done();
     72    client.send();
     73 
     74    frame.contentDocument.open();
     75  });
     76  frame.src = "resources/http-refresh.py?0";
     77 }, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (XMLHttpRequest)");
     78 
     79 async_test(t => {
     80  const frame = document.body.appendChild(document.createElement("iframe"));
     81  t.add_cleanup(() => frame.remove());
     82  frame.onload = t.step_func(() => {
     83    frame.onload = null;
     84 
     85    frame.contentWindow.fetch("/common/blank.html").then(
     86      t.unreached_func("Fetch should have been aborted"),
     87      t.step_func_done());
     88 
     89    frame.contentDocument.open();
     90  });
     91  frame.src = "resources/http-refresh.py?0";
     92 }, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (fetch())");
     93 
     94 // We cannot test for img element's error event for this test, as Firefox does
     95 // not fire the event if the fetch is aborted while Chrome does.
     96 async_test(t => {
     97  const frame = document.body.appendChild(document.createElement("iframe"));
     98  t.add_cleanup(() => frame.remove());
     99  frame.onload = t.step_func(() => {
    100    frame.onload = null;
    101 
    102    let happened = false;
    103    const img = frame.contentDocument.createElement("img");
    104    img.src = new URL("resources/slow-png.py", document.URL);
    105    img.onload = t.unreached_func("Image loading should not have succeeded");
    106    // The image fetch starts in a microtask, so let's be sure to test after
    107    // the fetch has started.
    108    t.step_timeout(() => {
    109      frame.contentDocument.open();
    110      happened = true;
    111    });
    112    // If 3 seconds have passed and the image has still not loaded, we consider
    113    // it aborted. slow-png.py only sleeps for 2 wallclock seconds.
    114    t.step_timeout(t.step_func_done(() => {
    115      assert_true(happened);
    116    }), 3000);
    117  });
    118  frame.src = "resources/http-refresh.py?0";
    119 }, "document.open() aborts documents that are queued for navigation through Refresh header with timeout 0 (image loading)");