tor-browser

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

commit d8693f22a8603dd04384fc03117e97e08b09a8c0
parent 6512e4bc6cd74a0d933f2df54ec45f7b83b669a7
Author: Mustaq Ahmed <mustaq@google.com>
Date:   Thu,  6 Nov 2025 21:33:42 +0000

Bug 1997597 [wpt PR 55788] - Deflake mouseenter-mouseleave-on-drag.html: end each test with a click, a=testonly

Automatic update from web-platform-tests
Deflake mouseenter-mouseleave-on-drag.html: end each test with a click

The test has been flaky for a while. The root cause seems to be the
condition that the mouse pointer must move over the body element to
end each promise_test. We recently encountered that an unrelated
experiment with event timing change occasionally exposes a system
mousemove event right after the test page is loaded, fulfilling the
the test end condition before any test action is considered!

We fix the problem here by using a click to end each test.

Fixed: 444170116
Change-Id: I87b842b028a842bf6da7b6de07d32831fadb7745
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7101582
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Auto-Submit: Mustaq Ahmed <mustaq@chromium.org>
Commit-Queue: Kevin Ellis <kevers@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1538594}

--

wpt-commits: 6b81b18bc25fa212e0a1c7281128facc16ddbf4f
wpt-pr: 55788

Diffstat:
Mtesting/web-platform/tests/uievents/mouse/mouseenter-mouseleave-on-drag.html | 59+++++++++++++++++++++++++++++++++--------------------------
1 file changed, 33 insertions(+), 26 deletions(-)

diff --git a/testing/web-platform/tests/uievents/mouse/mouseenter-mouseleave-on-drag.html b/testing/web-platform/tests/uievents/mouse/mouseenter-mouseleave-on-drag.html @@ -11,20 +11,22 @@ <style> #outer { background: grey; - position: absolute; - left: 100px; - top: 100px; width: 100px; height: 100px; } #inner { background: red; - position: absolute; + position: relative; left: 30px; top: 30px; width: 40px; height: 40px; } +#done { + background: green; + width: 40px; + height: 40px; +} </style> <body> @@ -33,6 +35,7 @@ <div id="outer"> <div id="inner"></div> </div> + <div id="done"></div> </body> <script> let eventLog = []; @@ -84,39 +87,39 @@ function addEventListeners(test) { }); } -// At the end of each action sequence we move the mouse over the root element. -// Once this event is detected, all other upstream events must be logged and -// we can proceed with the checks. -async function mousemoveOverRootElement() { +// A click on `done` marks the end of actions in each promise_test. +async function getClick(target, test) { return new Promise(resolve => { - const listener = (e) => { - if (e.eventPhase == Event.AT_TARGET) { - document.documentElement.removeEventListener('mousemove', listener); - resolve(); - } - }; - document.documentElement.addEventListener('mousemove', listener); + const listener = e => resolve(e); + target.addEventListener('click', listener, { once: true }); + if (test) { + test.add_cleanup(() => + target.removeEventListener('click', listener, { once: true })); + } }); } window.onload = async () => { const outer = document.getElementById('outer'); const inner = document.getElementById('inner'); - const leftOuter = 100; - const rightOuter = 200; - const leftInner = 130; - const rightInner = 170; - const centerY = 150; + const done = document.getElementById('done'); + const leftOuter = 0; + const rightOuter = 100; + const leftInner = 30; + const rightInner = 70; + const centerY = 50; promise_test(async t => { addEventListeners(t); - const completionPromise = mousemoveOverRootElement(); + const completionPromise = getClick(done, t); const actions =new test_driver.Actions(); actions.pointerMove(leftOuter + 10, centerY) .pointerDown({button: actions.ButtonType.LEFT}) .pointerMove(rightOuter - 10, centerY) .pointerUp({button: actions.ButtonType.LEFT}) - .pointerMove(0, 0) + .pointerMove(0, 0, {origin: done}) + .pointerDown() + .pointerUp() .send(); await actions; await completionPromise; @@ -132,13 +135,15 @@ window.onload = async () => { promise_test(async t => { addEventListeners(t); - const completionPromise = mousemoveOverRootElement(); + const completionPromise = getClick(done, t); const actions =new test_driver.Actions(); actions.pointerMove(leftOuter + 10, centerY) .pointerDown({button: actions.ButtonType.LEFT}) .pointerMove(leftInner + 10, centerY) .pointerUp({button: actions.ButtonType.LEFT}) - .pointerMove(0, 0) + .pointerMove(0, 0, {origin: done}) + .pointerDown() + .pointerUp() .send(); await actions; await completionPromise; @@ -159,13 +164,15 @@ window.onload = async () => { promise_test(async t => { addEventListeners(t); - const completionPromise = mousemoveOverRootElement(); + const completionPromise = getClick(done, t); const actions =new test_driver.Actions(); actions.pointerMove(leftInner + 10, centerY) .pointerDown({button: actions.ButtonType.LEFT}) .pointerMove(rightInner + 10, centerY) .pointerUp({button: actions.ButtonType.LEFT}) - .pointerMove(0, 0) + .pointerMove(0, 0, {origin: done}) + .pointerDown() + .pointerUp() .send(); await actions; await completionPromise;