зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
de4dfdc07a
Коммит
29df1aad8a
|
@ -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)
|
.pointerMove(0, 0)
|
||||||
.send();
|
.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();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче