tor-browser

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

samesite-iframe.https.html (2187B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>Navigation Preload for same site iframe</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="/common/get-host-info.sub.js"></script>
      7 <script src="../resources/test-helpers.sub.js"></script>
      8 <body></body>
      9 <script>
     10 
     11 const SAME_SITE = get_host_info().HTTPS_REMOTE_ORIGIN;
     12 const RESOURCES_DIR = "/service-workers/service-worker/navigation-preload/resources/";
     13 
     14 /**
     15 * This test is used for testing the NavigationPreload works in a same site iframe.
     16 * The test scenario is
     17 * 1. Create a same site iframe to register service worker and wait for it be activated
     18 * 2. Create a same site iframe which be intercepted by the service worker.
     19 * 3. Once the iframe is loaded, service worker should set the page through the preload response.
     20 *    And checking if the iframe's body content is expected.
     21 * 4. Unregister the service worker.
     22 * 5. remove created iframes.
     23 */
     24 
     25 promise_test(async (t) => {
     26    let resolver;
     27    let checkValue = false;
     28    window.onmessage = (e) => {
     29      if (checkValue) {
     30        assert_equals(e.data, "samesite");
     31        checkValue = false;
     32      }
     33      resolver();
     34    };
     35 
     36    let helperIframe = document.createElement("iframe");
     37    helperIframe.src = SAME_SITE + RESOURCES_DIR + "samesite-sw-helper.html";
     38    document.body.appendChild(helperIframe);
     39 
     40    await new Promise(resolve => {
     41      resolver = resolve;
     42      helperIframe.onload = async () => {
     43        helperIframe.contentWindow.postMessage("Register", '*');
     44     }
     45    });
     46 
     47    let sameSiteIframe = document.createElement("iframe");
     48    sameSiteIframe.src = SAME_SITE + RESOURCES_DIR + "samesite-iframe.html";
     49    document.body.appendChild(sameSiteIframe);
     50    await new Promise(resolve => {
     51      resolver = resolve;
     52      sameSiteIframe.onload = async() => {
     53        checkValue = true;
     54        sameSiteIframe.contentWindow.postMessage("GetBody", '*')
     55      }
     56    });
     57 
     58    await new Promise(resolve => {
     59      resolver = resolve;
     60      helperIframe.contentWindow.postMessage("Unregister", '*')
     61    });
     62 
     63    helperIframe.remove();
     64    sameSiteIframe.remove();
     65  });
     66 
     67 </script>