tor-browser

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

document-base-url-changes-about-srcdoc.https.window.js (1833B)


      1 // Load about:srcdoc in a iframe. Check the document.baseURI is still
      2 // correct after the parent changes its base URL..
      3 const runTest = (description, sandbox_flags) => {
      4  promise_test(async test => {
      5    // Create child.
      6    const iframe = document.createElement("iframe");
      7    if (sandbox_flags !== null)
      8      iframe.sandbox = sandbox_flags;
      9    iframe.srcdoc = `
     10      <script>
     11        addEventListener('message', (event) => {
     12          if (event.data == 'report baseURI')
     13            event.source.postMessage(document.baseURI, event.origin);
     14        });
     15        parent.postMessage('loaded', '*');
     16      </scr`+`ipt>
     17    `;
     18 
     19    const child_loaded = new Promise(r => onmessage = e => r(e.data));
     20    document.body.appendChild(iframe);
     21    assert_equals(await child_loaded, "loaded");
     22 
     23    // Verify child's baseURI matches parent.
     24    const original_parent_baseURI = document.baseURI;
     25    const child_base_uri = new Promise(r => onmessage = e => r(e.data));
     26    frames[0].postMessage("report baseURI", "*");
     27    assert_equals(await child_base_uri, original_parent_baseURI);
     28 
     29    // Parent changes its baseURI, requests child to report.
     30    const base_element = document.createElement("base");
     31    base_element.href = "https://foo.com";
     32    document.head.appendChild(base_element);
     33    assert_not_equals(document.baseURI, original_parent_baseURI,
     34        "parent baseURI failed to change.");
     35 
     36    // Verify child's baseURI didn't change.
     37    const child_base_uri2 = new Promise(r => onmessage = e => r(e.data));
     38    frames[0].postMessage("report baseURI", "*");
     39    assert_equals(await child_base_uri2, original_parent_baseURI);
     40 
     41    // Cleanup.
     42    base_element.remove();
     43  }, description);
     44 }
     45 
     46 runTest("non-sandboxed srcdoc - parent changes baseURI",null);
     47 runTest("sandboxed srcdoc - parent changes baseURI", "allow-scripts");