tor-browser

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

test_popup_blocker_pointer_event.html (5649B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4  <meta charset="utf-8">
      5  <title>Test for triggering popup by pointer events</title>
      6  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      7  <script src="/tests/SimpleTest/EventUtils.js"></script>
      8  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
      9 </head>
     10 <body>
     11  <div id="target" style="width: 50px; height: 50px; background: green"></div>
     12  <script>
     13 
     14    function sendMouseEvent(element, eventName, button, listenEventName, handler) {
     15      let needToCheckHandler = false;
     16      let handlerIsCalled = false;
     17      if (listenEventName && handler) {
     18        needToCheckHandler = true;
     19        element.addEventListener(listenEventName, (e) => {
     20          handler(e);
     21          handlerIsCalled = true;
     22        }, {once: true});
     23      }
     24      synthesizeMouseAtCenter(element, {type: eventName, button});
     25      if (needToCheckHandler) {
     26        ok(handlerIsCalled, "Handler should be called");
     27      }
     28    }
     29 
     30    function checkAllowOpenPopup(e) {
     31      let w = window.open("about:blank");
     32      ok(w, `Should allow popup in the ${e.type} listener with button=${e.button}`);
     33      if (w) {
     34        w.close();
     35      }
     36    }
     37 
     38    function checkBlockOpenPopup(e) {
     39      let w = window.open("about:blank");
     40      ok(!w, `Should block popup in the ${e.type} listener with button=${e.button}`);
     41      if (w) {
     42        w.close();
     43      }
     44    }
     45 
     46    add_setup(async function() {
     47      const DENY_ACTION = SpecialPowers.Ci.nsIPermissionManager.DENY_ACTION;
     48      let xorigin = SimpleTest.getTestFileURL("").replace(location.hostname, 'mochi.xorigin-test');
     49      await SpecialPowers.pushPermissions([
     50        {'type': 'popup', 'allow': DENY_ACTION,
     51         'context': document},
     52        {'type': 'popup', 'allow': DENY_ACTION,
     53         'context': xorigin}
     54      ]);
     55      await new Promise(resolve => SimpleTest.waitForFocus(resolve));
     56    });
     57 
     58    const LEFT_BUTTON = 0;
     59    const MIDDLE_BUTTON = 1;
     60    const RIGHT_BUTTON = 2;
     61    let target = document.getElementById("target");
     62 
     63    async function testPointerEventDefault() {
     64      // By default, only allow opening popup in the pointerup listener.
     65      // Left button
     66      sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup);
     67      sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup);
     68      sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup);
     69 
     70      // Middle button
     71      sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup);
     72      sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup);
     73      sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup);
     74 
     75      // Right button
     76      sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup);
     77      sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
     78      sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
     79    };
     80 
     81    async function testPointerEventAddPointerDownToPref() {
     82      // Adding pointerdown to preference
     83      await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events",
     84                                                "pointerdown pointerup"]]});
     85      // Left button
     86      sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup);
     87      sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup);
     88      sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup);
     89 
     90      // Middle button
     91      sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup);
     92      sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup);
     93      sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup);
     94 
     95      // Right button
     96      sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup);
     97      sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
     98      sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
     99      await SpecialPowers.popPrefEnv();
    100    }
    101 
    102    async function testPointerEventAddPointerMoveToPref() {
    103      // Adding pointermove to preference should have no effect.
    104      await SpecialPowers.pushPrefEnv({"set": [["dom.popup_allowed_events",
    105                                                "pointerdown pointerup pointermove"]]});
    106      // Left button
    107      sendMouseEvent(target, "mousedown", LEFT_BUTTON, "pointerdown", checkAllowOpenPopup);
    108      sendMouseEvent(target, "mousemove", LEFT_BUTTON, "pointermove", checkBlockOpenPopup);
    109      sendMouseEvent(target, "mouseup", LEFT_BUTTON, "pointerup", checkBlockOpenPopup);
    110 
    111      // Middle button
    112      sendMouseEvent(target, "mousedown", MIDDLE_BUTTON, "pointerdown", checkAllowOpenPopup);
    113      sendMouseEvent(target, "mousemove", MIDDLE_BUTTON, "pointermove", checkBlockOpenPopup);
    114      sendMouseEvent(target, "mouseup", MIDDLE_BUTTON, "pointerup", checkBlockOpenPopup);
    115 
    116      // Right button
    117      sendMouseEvent(target, "mousedown", RIGHT_BUTTON, "pointerdown", checkAllowOpenPopup);
    118      sendMouseEvent(target, "mousemove", RIGHT_BUTTON, "pointermove", checkBlockOpenPopup);
    119      sendMouseEvent(target, "mouseup", RIGHT_BUTTON, "pointerup", checkBlockOpenPopup);
    120      await SpecialPowers.popPrefEnv();
    121    }
    122 
    123    add_task(testPointerEventDefault);
    124    add_task(testPointerEventAddPointerDownToPref);
    125    add_task(testPointerEventAddPointerMoveToPref);
    126  </script>
    127 </body>
    128 </html>