tor-browser

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

controlled-iframe-postMessage.https.html (2622B)


      1 <html>
      2 <head>
      3 <meta name="timeout" content="long">
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="resources/test-helpers.sub.js"></script>
      7 </head>
      8 <body>
      9 <script>
     10 promise_test(async (test) => {
     11    const registration = await navigator.serviceWorker.register("postMessage-client-worker.js", { scope : 'resources' });
     12    activeWorker = registration.active;
     13    if (activeWorker)
     14        return;
     15 
     16    activeWorker = registration.installing;
     17    await new Promise(resolve => {
     18        activeWorker.addEventListener('statechange', () => {
     19            if (activeWorker.state === "activated")
     20                resolve();
     21        });
     22    });
     23 }, "Register service worker");
     24 
     25 function with_iframe(test, url) {
     26    return new Promise(function(resolve, reject) {
     27        test.step_timeout(() => reject("with_iframe timed out"), 2000);
     28        var frame = document.createElement('iframe');
     29        frame.className = 'test-iframe';
     30        frame.src = url;
     31        frame.onload = function() { resolve(frame); };
     32        document.body.appendChild(frame);
     33    });
     34 }
     35 
     36 promise_test(async (test) => {
     37    const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html');
     38    let counter = 0;
     39    while (counter++ < 100 && frame.contentWindow.messageData == undefined)
     40       await new Promise(resolve => test.step_timeout(resolve, 50));
     41    assert_equals(frame.contentWindow.messageData, 0);
     42    frame.remove();
     43 }, "Verify frame gets early messages if setting synchronously message event listener");
     44 
     45 promise_test(async (test) => {
     46    const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html?repeatMessages');
     47    let counter = 0;
     48    while (counter++ < 100 && frame.contentWindow.messageData == undefined)
     49       await new Promise(resolve => test.step_timeout(resolve, 50));
     50    assert_not_equals(frame.contentWindow.messageData, 0);
     51    frame.remove();
     52 }, "Verify frame does not get all messages if not setting event listener early");
     53 
     54 promise_test(async (test) => {
     55    const frame = await with_iframe(test, 'resources/controlled-frame-postMessage.html?repeatMessages&listener');
     56    let counter = 0;
     57    while (counter++ < 100 && frame.contentWindow.messageData.length < 5)
     58       await new Promise(resolve => test.step_timeout(resolve, 50));
     59 
     60    assert_less_than(counter, 100);
     61    data = frame.contentWindow.messageData;
     62    for (let cptr = 1; cptr < data.length; cptr++)
     63        assert_true(data[cptr - 1] < data[cptr]);
     64    frame.remove();
     65 }, "Verify frame does get messages in order");
     66 </script>
     67 </body>
     68 </html>