Bug 1632222 [wpt PR 23174] - Migrate pointerevents/mouse-on-object.html to wpt, a=testonly

Automatic update from web-platform-tests
Migrate pointerevents/mouse-on-object.html to wpt

The expected behavior on this test seems to be a
hack as it implicitly captures mouse to the object
and still sends the mouseup/pointerup to the object
when down happened on the object even though up is
happening outside of the object. This seems to
resolving compat issues on embedded flash objects.

Change-Id: Ibd888a989dbcf5e6ff08b35569903967edc957e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2160142
Commit-Queue: Navid Zolghadr <nzolghadr@chromium.org>
Reviewed-by: Lan Wei <lanwei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762476}

--

wpt-commits: 55367a4c706fa32301980773cb2c09cbcd291635
wpt-pr: 23174
This commit is contained in:
Navid Zolghadr 2020-04-28 11:45:07 +00:00 коммит произвёл moz-wptsync-bot
Родитель de4dfdc07a
Коммит 29df1aad8a
2 изменённых файлов: 77 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,64 @@
<!DOCTYPE HTML>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script type="text/javascript" src="../pointerevent_support.js"></script>
<style>
#obj {
width: 50px;
height: 50px;
padding: 50px;
}
</style>
<h1>Verifies that mouse activities on an object fire pointerevents. It expected to get pointerup when the pointerdown happened on the object for compatibility with flash objects.</h1>
<object id="obj"></object>
<button id="done"></button>
<div id="log"></div>
<script>
var target = document.getElementById("obj");
var done = document.getElementById("done");
var rect = target.getBoundingClientRect();
var done_clicked = false;
var receivedEvents = [];
["mousedown", "mouseup", "mousemove", "pointerdown", "pointerup", "pointermove"].forEach(function(eventName) {
target.addEventListener(eventName, function(event) {
receivedEvents.push(event.type);
});
});
document.getElementById('done').addEventListener('click', (e) => done_clicked = true);
promise_test(async() => {
done_clicked = false;
receivedEvents = [];
await new test_driver.Actions().pointerMove(rect.left+5, rect.top+5).pointerDown(0).pointerUp(0).send().then(() => {
return clickInTarget("mouse", done);
});
await resolveWhen(()=>{return done_clicked;});
assert_array_equals(receivedEvents, ["pointermove", "mousemove", "pointerdown", "mousedown", "pointerup", "mouseup"],
"Click on object should result in the correct sequence of events");
}, "Normal click event sequence within object");
promise_test(async() => {
done_clicked = false;
receivedEvents = [];
await new test_driver.Actions().pointerMove(rect.left+5, rect.top+5).pointerDown(0).pointerMove(rect.left-5, rect.top-5).pointerUp(0).send().then(() => {
return clickInTarget("mouse", done);
});
await resolveWhen(()=>{return done_clicked;});
assert_array_equals(receivedEvents, ["pointermove", "mousemove", "pointerdown", "mousedown", "pointermove", "mousemove", "pointerup", "mouseup"],
"Drag from object should result in the correct sequence of events");
}, "Click and drag outside of object event sequence");
</script>

Просмотреть файл

@ -379,3 +379,16 @@ function moveToDocument(pointerType) {
.pointerMove(0, 0)
.send();
}
// Returns a promise that only gets resolved when the condition is met.
function resolveWhen(condition) {
return new Promise((resolve, reject) => {
function tick() {
if (condition())
resolve();
else
requestAnimationFrame(tick.bind(this));
}
tick();
});
}