-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor pointerevents_iframe-touch-action-none
Problems in the test: * onload only ensures the parent frame is loaded and not the child frame. Fix by explicitly triggering load of the child frame and waiting on completion. * assumes message from child frame will be posted and processed by the time the button is pressed, but this can happen too quickly. Fix by waiting on a message promise from the child frame. * concatenation of events from the child frame is needlessly convoluted and likely the result of copy-paste from another test. 1 flake over 100 runs without fix. 0 flakes over 600 runs with the fix. Bug: 40770210 Change-Id: Icf6640ee87b0d85f93bfa0753794545f1c302462 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6035259 Reviewed-by: Mustaq Ahmed <[email protected]> Commit-Queue: Kevin Ellis <[email protected]> Cr-Commit-Position: refs/heads/main@{#1386777}
- Loading branch information
1 parent
3664516
commit 97bfee7
Showing
1 changed file
with
45 additions
and
44 deletions.
There are no files selected for viewing
89 changes: 45 additions & 44 deletions
89
pointerevents/pointerevent_iframe-touch-action-none_touch.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,66 +1,67 @@ | ||
<html> | ||
<head> | ||
<title>iframe touch-action:none attribute</title> | ||
<meta name="viewport" content="width=device-width"> | ||
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="pointerevent_support.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-actions.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
<title>iframe touch-action:none does not prevent panning or zooming inside | ||
the iframe</title> | ||
<meta name="viewport" content="width=device-width"> | ||
<link rel="stylesheet" type="text/css" href="pointerevent_styles.css"> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="pointerevent_support.js"></script> | ||
<script src="/resources/testdriver.js"></script> | ||
<script src="/resources/testdriver-actions.js"></script> | ||
<script src="/resources/testdriver-vendor.js"></script> | ||
</head> | ||
<body onload="run()"> | ||
<style> | ||
iframe { | ||
touch-action: none; | ||
} | ||
</style> | ||
<body> | ||
<h1>iframe touch-action:none attribute</h1> | ||
<h2 id="pointerTypeDescription"></h2> | ||
<h4>Test Description: Drag your finger in the green rectangle below then tap the "Done" button.</h4> | ||
<br> | ||
<iframe id="target" | ||
style="touch-action:none;" | ||
src="resources/iframe-touch-action-none-subframe.html"> | ||
</iframe> | ||
<input type="button" id="btnDone" value="Done"> | ||
<iframe id="target"></iframe> | ||
</body> | ||
<script> | ||
var event_log = []; | ||
'use strict'; | ||
|
||
function resetTestState() { | ||
event_log = []; | ||
function loadFrame() { | ||
return new Promise(resolve => { | ||
const frame = document.getElementById('target'); | ||
frame.onload = resolve; | ||
frame.src = 'resources/iframe-touch-action-none-subframe.html'; | ||
}); | ||
} | ||
|
||
function run() { | ||
var test_pointerEvent = setup_pointerevent_test("iframe received pointercancel", | ||
["touch"]); | ||
var actions_promise; | ||
var target = document.getElementById("target"); | ||
|
||
on_event(document.getElementById("btnDone"), "click", () => { | ||
test_pointerEvent.step(() => { | ||
assert_equals(event_log.join(", "), "pointercancel", | ||
"exactly one pointercancel received"); | ||
}); | ||
actions_promise.then(() => test_pointerEvent.done()); | ||
function messageReceived() { | ||
return new Promise(resolve => { | ||
window.addEventListener('message', (event) => { | ||
if (event.source != target.contentWindow) { | ||
return; | ||
} | ||
if (event.data && event.data.type == "subframe-event") { | ||
resolve(event.data.eventType); | ||
} | ||
}); | ||
}); | ||
} | ||
|
||
on_event(window, "message", function(event) { | ||
if (event.source != target.contentWindow) { | ||
return; | ||
} | ||
if (event.data && event.data.type == "subframe-event") { | ||
event_log.push(event.data.eventType); | ||
} | ||
}); | ||
promise_test(async t => { | ||
const target = document.getElementById("target"); | ||
await loadFrame(); | ||
|
||
const messagePromise = messageReceived(); | ||
|
||
actions_promise = new test_driver.Actions() | ||
await new test_driver.Actions() | ||
.addPointer("pointer1", "touch") | ||
.pointerMove(0, 0, {origin: target}) | ||
.pointerDown() | ||
.pointerMove(25, 25, {origin: target}) | ||
.pointerUp() | ||
.pointerMove(0, 0, {origin: btnDone}) | ||
.pointerDown() | ||
.pointerUp() | ||
.send(); | ||
} | ||
|
||
const eventType = await messagePromise; | ||
assert_equals(eventType, 'pointercancel'); | ||
}, 'touch iframe received pointercancel'); | ||
</script> | ||
</html> |