tor-browser

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

frame-ancestors-from-serviceworker.https.html (1844B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <script src="/resources/testharness.js"></script>
      5  <script src="/resources/testharnessreport.js"></script>
      6  <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
      7 </head>
      8 <body>
      9  <script>
     10    var t = async_test("A 'frame-ancestors' CSP directive set from a serviceworker response with a value 'none' should block rendering.");
     11 
     12    // Register service worker.
     13    var worker = 'support/service-worker.js';
     14    var scope = 'support/service-worker/';
     15    service_worker_unregister_and_register(t, worker, scope)
     16      .then(registration => wait_for_state(t, registration.installing, 'activated'))
     17      .then(() => {
     18        // Load iframe.
     19        var iframe = document.createElement("iframe");
     20        let timer;
     21        function pollForLoadCompletion() {
     22          timer = t.step_timeout(() => iframeMayBeLoaded({isPoll: true}), 10);
     23        }
     24        function iframeMayBeLoaded({isPoll}) {
     25          var failed = false;
     26          clearTimeout(timer);
     27          try {
     28            let href = iframe.contentWindow.location.href;
     29            if (isPoll && (href === "about:blank" || iframe.contentDocument.readyState !== "complete")) {
     30              pollForLoadCompletion();
     31              return;
     32            }
     33            failed = true;
     34          } catch (ex) {}
     35          t.step_func_done(() => assert_false(failed, "The IFrame should have been blocked. It wasn't."))();
     36        };
     37        iframe.addEventListener("load", () => iframeMayBeLoaded({isPoll: false}));
     38        iframe.addEventListener("error", () => iframeMayBeLoaded({isPoll: false}));
     39        iframe.src = "/content-security-policy/frame-ancestors/support/service-worker/frame-ancestors-none.html";
     40        document.body.appendChild(iframe);
     41        pollForLoadCompletion();
     42      });
     43  </script>
     44 </body>
     45 </html>