tor-browser

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

mouse-pointer-boundary-events-for-shadowdom.html (3325B)


      1 <!DOCTYPE HTML>
      2 <meta name="viewport" content="width=device-width">
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/resources/testdriver.js"></script>
      6 <script src="/resources/testdriver-actions.js"></script>
      7 <script src="/resources/testdriver-vendor.js"></script>
      8 <script type="text/javascript" src="pointerevent_support.js"></script>
      9 
     10 <h1>PointerEvent: Verifies that mouse boundary events don't point to shadow-dom</h1>
     11 
     12 <input id="target" style="margin: 20px">
     13 
     14 <script>
     15  function name(node) {
     16    return node? node.tagName : "(null)";
     17  }
     18 
     19  function get_event_details(e) {
     20      return e.type + " target=" + name(e.target) + " relatedTarget=" + name(e.relatedTarget);
     21  }
     22 
     23  function events_match_expected(actualEvents, expectedEventDetails) {
     24      if (actualEvents.length != expectedEventDetails.length)
     25        return false;
     26 
     27      let actualEventDetails = actualEvents.map(e => get_event_details(e));
     28      return (expectedEventDetails.every(expected => actualEventDetails.includes(expected)) &&
     29              arePointerEventsBeforeCompatMouseEvents(actualEvents) &&
     30              actualEventDetails[0] == expectedEventDetails[0]);
     31  }
     32 
     33  promise_test(async () => {
     34    let rect = document.getElementById("target").getBoundingClientRect();
     35    let targetEvents = ["mouseout", "pointerout", "mouseover", "pointerover"];
     36    let receivedEvents = [];
     37    var moveReceived = false;
     38 
     39    targetEvents.forEach(function(eventName) {
     40      window.addEventListener(eventName, function(e) {
     41        receivedEvents.push(e);
     42      });
     43    });
     44 
     45    window.addEventListener('pointermove', () => { moveReceived = true; });
     46 
     47    await new test_driver.Actions()
     48               .addPointer("default-mouse")
     49               .pointerMove(Math.ceil(rect.left - 10), Math.ceil(rect.top - 10))
     50               .send()
     51    await resolveWhen(() => { return moveReceived == true });
     52 
     53    moveReceived = false;
     54    receivedEvents.length = 0;
     55    await new test_driver.Actions()
     56               .addPointer("default-mouse")
     57               .pointerMove(Math.ceil(rect.left + 10), Math.ceil(rect.top + 10))
     58               .send()
     59    await resolveWhen(() => { return moveReceived == true });
     60 
     61    let intoInputExpected = [
     62      "pointerout target=BODY relatedTarget=INPUT",
     63      "pointerover target=INPUT relatedTarget=BODY",
     64      "mouseout target=BODY relatedTarget=INPUT",
     65      "mouseover target=INPUT relatedTarget=BODY",
     66    ];
     67    assert_true(events_match_expected(receivedEvents, intoInputExpected), "Moved into <input>");
     68 
     69 
     70    moveReceived = false;
     71    receivedEvents.length = 0;
     72    await new test_driver.Actions()
     73               .addPointer("default-mouse")
     74               .pointerMove(Math.ceil(rect.left - 10), Math.ceil(rect.top - 10))
     75               .send()
     76    await resolveWhen(() => { return moveReceived == true });
     77 
     78    let outOfInputExpected = [
     79      "pointerout target=INPUT relatedTarget=BODY",
     80      "pointerover target=BODY relatedTarget=INPUT",
     81      "mouseout target=INPUT relatedTarget=BODY",
     82      "mouseover target=BODY relatedTarget=INPUT",
     83    ];
     84    assert_true(events_match_expected(receivedEvents, outOfInputExpected), "Moved out of <input>");
     85  }, "PointerEvent: Verifies that mouse boundary events don't point to shadow-dom");
     86 </script>