summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/helper_basic_pan.html
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/test/mochitest/helper_basic_pan.html')
-rw-r--r--gfx/layers/apz/test/mochitest/helper_basic_pan.html73
1 files changed, 73 insertions, 0 deletions
diff --git a/gfx/layers/apz/test/mochitest/helper_basic_pan.html b/gfx/layers/apz/test/mochitest/helper_basic_pan.html
new file mode 100644
index 0000000000..db96e34a70
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/helper_basic_pan.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width; initial-scale=1.0">
+ <title>Sanity panning test</title>
+ <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
+ <script type="application/javascript" src="apz_test_utils.js"></script>
+ <script src="/tests/SimpleTest/paint_listener.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <script type="application/javascript">
+
+async function test() {
+ let scrEvt = new EventCounter(window, "scroll");
+ let visScrEvt = new EventCounter(window.visualViewport, "scroll");
+ // Our internal visual viewport events aren't restricted to the visual view-
+ // port itself, so we can listen on the window itself, however the event
+ // listener needs to be in the system group.
+ let visScrEvtInternal = new EventCounter(window, "mozvisualscroll",
+ { mozSystemGroup: true });
+
+ // This listener will trigger the test to continue once APZ is done with
+ // processing the scroll.
+ let transformEndPromise = promiseTransformEnd();
+
+ await synthesizeNativeTouchDrag(document.body, 10, 100, 0, -50);
+ dump("Finished native drag, waiting for transform-end observer...\n");
+
+ // Wait for the APZ:TransformEnd to be fired after touch events are processed.
+ await transformEndPromise;
+
+ // Flush state.
+ await promiseApzFlushedRepaints();
+
+ is(window.scrollY, 50, "check that the window scrolled");
+
+ // Check we've got the expected events.
+ // This page is using "width=device-width; initial-scale=1.0" and we haven't
+ // pinch-zoomed any further, so layout and visual viewports have the same
+ // size and will scroll together. Therefore we should be getting layout
+ // viewport "scroll" events as well.
+ scrEvt.unregister();
+ ok(scrEvt.count > 0, "Got some layout viewport scroll events");
+ // This one is a bit tricky: Visual viewport "scroll" events are supposed to
+ // fire only when the relative offset between layout and visual viewport
+ // changes. Even when they're both scrolling together, we may update their
+ // positions independently, though, leading to some jitter in the offset and
+ // triggering the event after all.
+ // At least for the case here, where both viewports are the same size and we
+ // have a freshly loaded page, we should however be able to keep the offset at
+ // a constant zero and therefore not cause any visual viewport scroll events
+ // to fire.
+ visScrEvt.unregister();
+ is(visScrEvt.count, 0, "Got no visual viewport scroll events");
+ visScrEvtInternal.unregister();
+ // Our internal visual viewport scroll event on the other hand only cares
+ // about the absolute offset of the visual viewport and should therefore
+ // definitively fire.
+ ok(visScrEvtInternal.count > 0, "Got some mozvisualscroll events");
+}
+
+waitUntilApzStable()
+.then(test)
+.then(subtestDone, subtestFailed);
+
+ </script>
+</head>
+<body>
+ <div style="height: 5000px; background-color: lightgreen;">
+ This div makes the page scrollable.
+ </div>
+</body>
+</html>