tor-browser

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

cancel-mousedown-in-subframe.html (2461B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="/resources/testdriver.js"></script>
      5 <script src="/resources/testdriver-vendor.js"></script>
      6 <script src="/resources/testdriver-actions.js"></script>
      7 <script src="resources/utils.js"></script>
      8 <body>
      9  <div>
     10    Dragging the mouse from child frame to parent frame causes both <code>mousedown</code> and
     11    <code>mouseup</code> events being dispatched to child frame, regardless of whether the
     12    <code>mousedown</code> event is canceled or not.
     13  </div>
     14  <iframe id="child_frame" width="300px" height="40px"
     15          src="resources/mouse-event-reporter-subframe.html">
     16  </iframe>
     17 </body>
     18 <script>
     19  "use strict"
     20  let topframe_loaded = getEvent("load", window);
     21  let subframe_loaded = getMessageData("load", frames[0]);
     22 
     23  let top_frame_mousedown;
     24  let top_frame_mouseup;
     25 
     26  promise_setup(async () => {
     27      await topframe_loaded;
     28      await subframe_loaded;
     29 
     30      window.addEventListener("mousedown", e => top_frame_mousedown = true);
     31      window.addEventListener("mouseup",   e => top_frame_mouseup   = true);
     32  });
     33 
     34  [false, true].forEach(cancel_mousedown => {
     35      let mousedown_msg = cancel_mousedown ? "canceled" : "not-canceled";
     36 
     37      promise_test(async () => {
     38          top_frame_mousedown = false;
     39          top_frame_mouseup = false;
     40 
     41          sendMessage(frames[0], "cancel-mousedown", cancel_mousedown);
     42 
     43          const mousedown_promise = getMessageData("mousedown", frames[0]);
     44          const mouseup_promise   = getMessageData("mouseup", frames[0]);
     45 
     46          const child_frame = document.getElementById("child_frame");
     47          const actions_promise = new test_driver.Actions()
     48                .pointerMove(5, 5, {origin: child_frame})
     49                .pointerDown()
     50                .pointerMove(5, 5, {origin: document.body})
     51                .pointerUp()
     52                .send();
     53 
     54          await actions_promise;
     55 
     56          let mousedown_message = await mousedown_promise;
     57          let mouseup_message   = await mouseup_promise;
     58 
     59          assert_equals(mousedown_message.param, mousedown_msg, "Child frame canceled mousedown?");
     60          assert_false(top_frame_mousedown, "Top frame received mousedown?");
     61          assert_false(top_frame_mouseup,   "Top frame received mouseup?");
     62      }, "Child frame receives mousedown/mouseup when mousedown is " + mousedown_msg);
     63  });
     64 </script>