Fix flaky pointermove on chorded buttons when locked test
Pointer lock is acquired and released asynchronously. Remove
reliance on timeout from the test by waiting until lock is
properly acquired/released during the test steps.
Bug: 1025944
Change-Id: Ibd5b1c19efb9c00794f1b900e12a5f5a4edab16e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2360494
Reviewed-by: Mustaq Ahmed <mustaq@chromium.org>
Commit-Queue: Liviu Tinta <liviutinta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800553}
diff --git a/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html b/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
index eaa5325..92fcc93 100644
--- a/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
+++ b/pointerevents/pointerlock/pointerevent_pointermove_on_chorded_mouse_button_when_locked.html
@@ -35,7 +35,7 @@
var firstButton = 0;
var pointer_locked = false;
- function run() {
+ async function run() {
var target0 = document.getElementById("target0");
// When a pointer changes button state and the circumstances produce no other pointer event, the pointermove event must be dispatched.
@@ -44,7 +44,9 @@
on_event(target0, "pointerdown", function (event) {
if (pointer_locked) {
detected_pointertypes[event.pointerType] = true;
- test_pointermove.step(function() {assert_true(step === 0, "There must not be more than one pointer down event.");});
+ test_pointermove.step(function() {
+ assert_true(step === 0, "There must not be more than one pointer down event.");
+ });
if (step == 0) {
step = 1;
firstButton = event.buttons;
@@ -56,11 +58,17 @@
detected_pointertypes[event.pointerType] = true;
if (step == 1 && event.button != -1) { // second button pressed
- test_pointermove.step(function() {assert_true(event.buttons !== firstButton, "The pointermove event must be triggered by pressing a second button.");});
- test_pointermove.step(function() {assert_true((event.buttons & firstButton) != 0, "The first button must still be reported pressed.");});
+ test_pointermove.step(function() {
+ assert_true(event.buttons !== firstButton, "The pointermove event must be triggered by pressing a second button.");
+ });
+ test_pointermove.step(function() {
+ assert_true((event.buttons & firstButton) != 0, "The first button must still be reported pressed.");
+ });
step = 2;
} else if (step == 2 && event.button != -1) { // second button released
- test_pointermove.step(function() {assert_true(event.buttons === firstButton, "The pointermove event must be triggered by releasing the second button.");});
+ test_pointermove.step(function() {
+ assert_true(event.buttons === firstButton, "The pointermove event must be triggered by releasing the second button.");
+ });
step = 3;
}
}
@@ -68,14 +76,13 @@
on_event(target0, "pointerup", function (event) {
if (pointer_locked) {
detected_pointertypes[event.pointerType] = true;
- step_timeout(function() {
- test_pointermove.step(function() {assert_true(step === 3, "The pointerup event must be triggered after pressing and releasing the second button.");});
- test_pointermove.step(function() {assert_true(event.buttons === 0, "The pointerup event must be triggered by releasing the last pressed button.");});
- document.exitPointerLock();
- actions_promise.then( () => {
- test_pointermove.done();
- });
- }, 500);
+ test_pointermove.step(function() {
+ assert_true(step === 3, "The pointerup event must be triggered after pressing and releasing the second button.");
+ });
+ test_pointermove.step(function() {
+ assert_true(event.buttons === 0, "The pointerup event must be triggered by releasing the last pressed button.");
+ });
+ document.exitPointerLock();
} else {
target0.requestPointerLock();
}
@@ -83,8 +90,12 @@
on_event(document, 'pointerlockchange', function(event) {
if (document.pointerLockElement == target0)
pointer_locked = true;
- else
+ else{
pointer_locked = false;
+ actions_promise.then( () => {
+ test_pointermove.done();
+ });
+ }
});
on_event(target0, "mouseup", function (event) {
event.preventDefault();
@@ -95,9 +106,16 @@
// Inject mouse input
var actions = new test_driver.Actions();
- actions_promise = actions.pointerMove(0, 0, {origin: target0})
+ actions_promise = actions
+ .pointerMove(0, 0, {origin: target0})
.pointerDown({button: actions.ButtonType.LEFT})
.pointerUp({button: actions.ButtonType.LEFT})
+ .send();
+ await actions_promise;
+ await resolveWhen(()=>pointer_locked);
+ actions = new test_driver.Actions();
+ actions_promise = actions
+ .pointerMove(0, 0, {origin: target0})
.pointerDown({button: actions.ButtonType.LEFT})
.pointerDown({button: actions.ButtonType.MIDDLE})
.pointerUp({button: actions.ButtonType.MIDDLE})