summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html')
-rw-r--r--gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html51
1 files changed, 51 insertions, 0 deletions
diff --git a/gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html b/gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html
new file mode 100644
index 0000000000..650c21cac7
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/test_abort_smooth_scroll_by_instant_scroll.html
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test to make sure an on-going smooth scroll is aborted by a new
+ instant absolute scroll operation</title>
+ <meta charset="utf-8">
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/paint_listener.js"></script>
+ <script src="apz_test_utils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<div style="height: 100000px;"></div>
+<script type="application/javascript">
+async function test() {
+ // Trigger a smooth scroll.
+ document.scrollingElement.scrollTo({ top: 90000, behavior: "smooth" });
+ // Need to wait for a scroll event here since with the very small
+ // layout.css.scroll-behavior.spring-constant value it's possible that the
+ // scroll position hasn't yet been changed after a promiseApzFlushedRepaints
+ // call.
+ await waitForScrollEvent(window);
+ await promiseApzFlushedRepaints();
+
+ ok(document.scrollingElement.scrollTop > 0,
+ "Should have scrolled. scroll position: " + document.scrollingElement.scrollTop);
+
+ // Trigger an instant scroll.
+ document.scrollingElement.scrollTo({ top: 0, behavior: "instant" });
+ is(document.scrollingElement.scrollTop, 0,
+ "The previous smooth scroll operation should have been superseded by " +
+ "the instant scroll");
+
+ // Double check after a repaint request.
+ await promiseApzFlushedRepaints();
+ is(document.scrollingElement.scrollTop, 0,
+ "The scroll postion should have stayed after a repaint request");
+}
+
+SimpleTest.waitForExplicitFinish();
+
+// Use a very small spring constant value for smooth scrolling so that the
+// smooth scrollling keeps running at least for a few seconds.
+pushPrefs([["layout.css.scroll-behavior.spring-constant", 1]])
+.then(waitUntilApzStable)
+.then(test)
+.then(SimpleTest.finish, SimpleTest.finishWithFailure);
+
+</script>
+</body>
+</html>