diff options
Diffstat (limited to 'gfx/layers/apz/test/mochitest/helper_basic_pan.html')
-rw-r--r-- | gfx/layers/apz/test/mochitest/helper_basic_pan.html | 73 |
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..894915793e --- /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(); + + 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> |