Bug 1415225 - Add a couple of mochitests for event-regions overrides. r=botond

These two tests exercise the codepaths where an event regions override
is set on (a) the root layer of a layer tree and (b) on an in-process
subdocument. I verified that case (b) was failing with webrender enabled
without the patchset and passes now.

MozReview-Commit-ID: GMwk5iQstj

--HG--
extra : rebase_source : c80c4a890ac37ed691310e541ac1347deb21090f
This commit is contained in:
Kartikaya Gupta 2017-11-08 20:47:19 -05:00
Родитель be01b429eb
Коммит 8a6d61d886
4 изменённых файлов: 116 добавлений и 0 удалений

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

@ -0,0 +1,60 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<title>Simple wheel scroll cancellation</title>
<script type="application/javascript" src="apz_test_native_event_utils.js"></script>
<script type="application/javascript" src="apz_test_utils.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
<script type="application/javascript">
// Add a non-passive listener on the document, so that we have a document-level
// APZ-aware listener, and the entire document is put in the dispatch-to-content
// region
document.addEventListener('wheel', function(e) {
dump("Wheel listener running...\n");
// spin for 2 seconds to give APZ time to scroll, if the event region override
// is broken and it decides not to wait for the main thread. Note that it's
// possible the APZ controller thread is busy for whatever reason so APZ
// may not scroll. That might cause this test to only fail intermittently
// instead of consistently if the behaviour being tested regresses.
var now = Date.now();
while (Date.now() - now < 2000);
// Cancel the scroll. If this works then we know APZ waited for this listener
// to run.
e.preventDefault();
setTimeout(function() {
flushApzRepaints(checkScroll);
}, 0);
}, false);
function scrollPage() {
synthesizeNativeWheel(document.body, 100, 100, 0, -50);
dump("Finished native wheel, waiting for listener to run...\n");
}
function checkScroll() {
is(window.scrollY, 0, "check that the window didn't scroll");
subtestDone();
}
if (window.top != window) {
dump("Running inside an iframe! stealing functions from window.top...\n");
window.subtestDone = window.top.subtestDone;
window.SimpleTest = window.top.SimpleTest;
window.is = window.top.is;
window.ok = window.top.ok;
}
waitUntilApzStable().then(scrollPage);
</script>
</head>
<body style="height: 5000px; background-image: linear-gradient(green,red);">
This page should not be wheel-scrollable.
</body>
</html>

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

@ -0,0 +1,15 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width; initial-scale=1.0">
<title>Wheel scroll cancellation inside iframe</title>
<script type="application/javascript" src="apz_test_utils.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
</head>
<body>
This just loads helper_override_root in an iframe, so that we test event
regions overriding on in-process subdocuments.
<iframe src="helper_override_root.html"></iframe>
</body>
</html>

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

@ -21,6 +21,8 @@
helper_iframe2.html
helper_key_scroll.html
helper_long_tap.html
helper_override_root.html
helper_override_subdoc.html
helper_scroll_inactive_perspective.html
helper_scroll_inactive_zindex.html
helper_scroll_on_position_fixed.html
@ -72,3 +74,5 @@ skip-if = os == 'win' && os_version == '10.0' # Bug 1404836
skip-if = (os == 'android') # wheel events not supported on mobile
[test_wheel_transactions.html]
skip-if = (os == 'android') # wheel events not supported on mobile
[test_group_overrides.html]
skip-if = (os == 'android') # wheel events not supported on mobile

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

@ -0,0 +1,37 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Various tests for event regions overrides</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="apz_test_utils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript">
var prefs = [
// turn off smooth scrolling so that we don't have to wait for
// APZ animations to finish before sampling the scroll offset
['general.smoothScroll', false],
// Increase the content response timeout because these tests do preventDefault
// and we want to make sure APZ actually waits for them.
['apz.content_response_timeout', 10000],
]
var subtests = [
{'file': 'helper_override_root.html', 'prefs': prefs},
{'file': 'helper_override_subdoc.html', 'prefs': prefs},
];
if (isApzEnabled()) {
SimpleTest.waitForExplicitFinish();
window.onload = function() {
runSubtestsSeriallyInFreshWindows(subtests)
.then(SimpleTest.finish);
};
}
</script>
</head>
<body>
</body>
</html>