tor-browser

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

change-src-attr-prepare-a-script.html (1614B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <link rel=help href=https://github.com/whatwg/html/pull/10188#discussion_r1719338657>
      4 <title>Adding/changing src attribute does "prepare the script"</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 
      8 <body>
      9 <script>
     10 // The "old" HTML Standard specification text around `src` attribute mutation
     11 // for non-parser-inserted scripts *ONLY* "prepared"/run the script iff the src
     12 // attribute "previously had no such attribute". This changed in
     13 // https://github.com/whatwg/html/pull/10188 to align with a majority of
     14 // browsers. This test ensures that `src` mutations on these kinds of scripts
     15 // *where a previous valid `src` attribute existed* do indeed "prepare" the
     16 // script.
     17 promise_test(async () => {
     18  window.didExecute = false;
     19 
     20  const script = document.createElement('script');
     21  // Invalid type, so the script won't execute upon insertion.
     22  script.type = 'invalid';
     23  script.src = 'resources/flag-setter.js';
     24  document.body.append(script);
     25  assert_false(window.didExecute);
     26 
     27  // Make script valid, but don't immediately execute it.
     28  script.type = '';
     29 
     30  const scriptPromise = new Promise(resolve => {
     31    script.onload = resolve;
     32  });
     33 
     34  // Mutating the `src` attribute, which has an existing valid value, triggers
     35  // the "prepare a script" algorithm via the post-connection steps.
     36  script.src = 'resources/flag-setter.js?different';
     37 
     38  await scriptPromise;
     39  assert_true(window.didExecute);
     40 }, "Mutating `src` attribute from an already-valid value does 'prepare' the script");
     41 </script>
     42 </body>