tor-browser

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

object-javascript-url.html (1843B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>object - javascript: URL</title>
      4 <link rel="help" href="https://html.spec.whatwg.org/#the-object-element">
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <div id="log"></div>
      8 <script>
      9  // the steps to (re)determine what the object element represents
     10  // fetches url, which results in a network error
     11  // and thus "fallback".
     12  promise_test(async function (t) {
     13    const object = document.createElement('object');
     14    object.data = 'javascript:"foo"';
     15    object.onload = t.unreached_func('No load event expected');
     16    document.body.append(object);
     17    t.add_cleanup(() => { object.remove(); });
     18    await new Promise(resolve => { t.step_timeout(resolve, 100); });
     19  }, "javascript: in data attribute should do nothing");
     20 
     21  function insertObjectNavigable(t) {
     22    const object = document.createElement('object');
     23    object.data = '/resources/blank.html';
     24    document.body.append(object);
     25    t.add_cleanup(() => { object.remove(); });
     26    return object;
     27  }
     28 
     29  promise_test(async function (t) {
     30    const object = insertObjectNavigable(t);
     31    await new Promise(resolve => { object.onload = resolve; });
     32    const loaded = new Promise(resolve => { object.onload = resolve; });
     33    window[0].location.href = 'javascript:"test"';
     34    await loaded;
     35  }, 'location.href = \'javascript:"test"\' should fire a load event');
     36 
     37  promise_test(async function (t) {
     38    const object = insertObjectNavigable(t);
     39    await new Promise(resolve => { object.onload = resolve; });
     40    object.onload = t.unreached_func('No second load event expected');
     41    window[0].location.href = 'javascript:1';
     42    await new Promise(resolve => { t.step_timeout(resolve, 100); });
     43  }, 'location.href = \'javascript:1\' should not fire a load event');
     44 </script>