tor-browser

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

helper_fission_event_region_override.html (3107B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <meta name="viewport" content="width=device-width,initial-scale=1">
      6  <title>Ensure the event region override flags work properly</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <script src="/tests/SimpleTest/paint_listener.js"></script>
      9  <script src="helper_fission_utils.js"></script>
     10  <script src="apz_test_utils.js"></script>
     11  <script src="apz_test_native_event_utils.js"></script>
     12  <script>
     13 
     14    function getEventPromise(eventName) {
     15      let eventPromise = new Promise(resolve => {
     16        const listener = event => {
     17          if (event.data === eventName) {
     18            dump(`Event Promise, received event: ${event.data}\n`);
     19            window.removeEventListener("message", listener);
     20            resolve();
     21          }
     22        }
     23        window.addEventListener("message", listener);
     24      });
     25      return eventPromise;
     26    }
     27 
     28    async function setupIframeListeners(iframe) {
     29      let listenersReady = getEventPromise("listenersReady");
     30      SpecialPowers.spawn(iframe, [], () => {
     31        const { promise, resolve } = Promise.withResolvers();
     32        content.window.addEventListener("wheel", () => {
     33          Assert.ok(false, "Iframe: We should not receive a wheel event");
     34          resolve();
     35        }, { once: true });
     36 
     37        content.window.addEventListener("scroll", () => {
     38          Assert.ok(false, "Iframe: We should not receive a scoll event");
     39          resolve();
     40        }, { once: true });
     41 
     42        content.window.parent.postMessage("listenersReady", "*");
     43        return promise;
     44      });
     45      await listenersReady;
     46    }
     47 
     48    async function test() {
     49      let iframe = document.getElementById("testframe");
     50      await setupCrossOriginIFrame(iframe, "helper_fission_plain.html");
     51      await setupIframeListeners(iframe);
     52      await synthesizeNativeWheel(iframe, 10, 10, 0, -50);
     53 
     54      // Advance a bunch of frames. The only goal here is to ensure enough time
     55      // passes so that if the OOPIF does scroll, we find out about it via the
     56      // OOPIF:Scrolled messaging.
     57      // If we don't wait long enough we might end up finishing the test before
     58      // that scroll message gets received here, and so we might wrongly pass the
     59      // test.
     60      await SpecialPowers.promiseTimeout(0);
     61      var utils = SpecialPowers.getDOMWindowUtils(window);
     62      for (var i = 0; i < 5; i++) {
     63        utils.advanceTimeAndRefresh(16);
     64      }
     65      utils.restoreNormalRefresh();
     66      await promiseOnlyApzControllerFlushed();
     67    }
     68 
     69    window.onload = async () => {
     70      await SpecialPowers.spawnChrome([], async () => {
     71        this.browsingContext.topChromeWindow.addEventListener(
     72          "wheel",
     73          e => e.preventDefault(),
     74          { once: true, passive: false }
     75        );
     76        return new Promise(resolve => resolve());
     77      });
     78      await SpecialPowers.executeAfterFlushingMessageQueue();
     79      waitUntilApzStable()
     80        .then(test)
     81        .then(subtestDone, subtestFailed);
     82    };
     83 
     84  </script>
     85 </head>
     86 <body>
     87  <iframe id="testframe"></iframe>
     88 </body>
     89 </html>