summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html')
-rw-r--r--gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html84
1 files changed, 84 insertions, 0 deletions
diff --git a/gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html b/gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html
new file mode 100644
index 0000000000..0c1eb5dd33
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/helper_doubletap_zoom_touch_action_manipulation_in_iframe.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=2100,initial-scale=0.4"/>
+ <title>Tests that double tap to zoom doesn't work on touch-action: manipulation element in an iframe</title>
+ <script src="apz_test_native_event_utils.js"></script>
+ <script src="apz_test_utils.js"></script>
+ <script src="/tests/SimpleTest/paint_listener.js"></script>
+ <style>
+ iframe {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ border: none;
+ }
+ </style>
+
+ <script>
+
+async function test() {
+ let useTouchpad = (location.search == "?touchpad");
+ let iframeURL =
+ SimpleTest.getTestFileURL("helper_doubletap_zoom_touch_action_manipulation_subframe.html")
+ .replace(window.location.origin, "https://example.com/");
+
+ let iframe = document.querySelector("iframe");
+ const iframeLoadPromise = promiseOneEvent(iframe, "load", null);
+ iframe.src = iframeURL;
+ await iframeLoadPromise;
+
+ await SpecialPowers.spawn(iframe, [], async () => {
+ await content.wrappedJSObject.waitUntilApzStable();
+ });
+
+ var resolution = await getResolution();
+ ok(resolution > 0,
+ "The initial_resolution is " + resolution + ", which is some sane value");
+
+ // Activate the root scroller in the iframe, otherwise the next touch event
+ // will be handled by the root content APZC incorrectly on non-Fission
+ // environments.
+ await SpecialPowers.spawn(iframe, [], async () => {
+ await SpecialPowers.DOMWindowUtils.setDisplayPortForElement(
+ 0, 0, 500, 500, content.document.documentElement, 1);
+ await content.wrappedJSObject.promiseApzFlushedRepaints();
+ });
+
+ await SpecialPowers.spawn(iframe, [useTouchpad], async (aUseTouchpad) => {
+ await content.wrappedJSObject.synthesizeDoubleTap(
+ content.document.querySelector("div"), 20, 20, aUseTouchpad);
+ });
+
+ for (let i = 0; i < 10; i++) {
+ await promiseFrame();
+ }
+
+ // Flush state just in case.
+ await promiseApzFlushedRepaints();
+
+ var prev_resolution = resolution;
+ resolution = await getResolution();
+ if (!useTouchpad) {
+ is(resolution, prev_resolution, "No zoom should happen on touchscreen");
+ } else {
+ isnot(resolution, prev_resolution, "Zoom should happen on touchpad");
+ }
+
+ // Send another tap event outside of the area where
+ // `touch-action: manipulation` is specified so that it will create a new
+ // touch block to avoid bug 1848062 on Mac.
+ await synthesizeNativeTap(iframe, 600, 600);
+}
+
+waitUntilApzStable()
+.then(test)
+.then(subtestDone, subtestFailed);
+
+ </script>
+</head>
+<body>
+<iframe width="500" height="500"></iframe>
+</body>
+</html>