gfx/layers/apz/test/mochitest/helper_basic_onetouchpinch.html
author Cosmin Sabou <csabou@mozilla.com>
Sun, 05 Feb 2023 19:37:33 +0000
changeset 651812 d8601249f1eb8c52c742b0c19c9ca0fa8f2e31fe
parent 616557 918ef225713fa9fc188f42355a6cd4a2bfb3b64c
permissions -rw-r--r--
Bug 1806090 - temporarily disable browser_quickactions.js on linux for frequent failures. r=intermittent-reviewers,MasterWayZ Differential Revision: https://phabricator.services.mozilla.com/D168909

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Sanity check for one-touch pinch zooming</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 visResEvt = new EventCounter(window.visualViewport, "resize");
  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 visResEvtInternal = new EventCounter(window, "mozvisualresize",
                                           { mozSystemGroup: true });
  let visScrEvtInternal = new EventCounter(window, "mozvisualscroll",
                                           { mozSystemGroup: true });
  let visResEvtContent = new EventCounter(window, "mozvisualresize");
  let visScrEvtContent = new EventCounter(window, "mozvisualscroll");

  var initial_resolution = await getResolution();
  ok(initial_resolution > 0,
      "The initial_resolution is " + initial_resolution + ", which is some sane value");

  // This listener will trigger the test to continue once APZ is done with
  // processing the scroll.
  let transformEndPromise = promiseTransformEnd();

  var zoom_in = [
      [ { x: 150, y: 300 } ],
      [ null ],
      [ { x: 150, y: 300 } ],
      [ { x: 150, y: 305 } ],
      [ { x: 150, y: 310 } ],
      [ { x: 150, y: 315 } ],
      [ { x: 150, y: 320 } ],
      [ { x: 150, y: 325 } ],
  ];

  var touchIds = [0];
  await synthesizeNativeTouchSequences(document.body, zoom_in, null, touchIds);

  // Wait for the APZ:TransformEnd to be fired after touch events are processed.
  await transformEndPromise;

  // Flush state and get the resolution we're at now
  await promiseApzFlushedRepaints();
  let final_resolution = await getResolution();
  ok(final_resolution > initial_resolution, "The final resolution (" + final_resolution + ") is greater after zooming in");

  // Check we've got the expected events.
  // Zooming the page should fire visual viewport resize events:
  visResEvt.unregister();
  ok(visResEvt.count > 0, "Got some visual viewport resize events");
  visResEvtInternal.unregister();
  ok(visResEvtInternal.count > 0, "Got some mozvisualresize events");

  // We're zooming somewhere in the middle of the page, so the visual
  // viewport's coordinates change, too.
  // This is true both relative to the page (mozvisualscroll), as well as
  // relative to the layout viewport (visual viewport "scroll" event).
  visScrEvt.unregister();
  ok(visScrEvt.count > 0, "Got some visual viewport scroll events");
  visScrEvtInternal.unregister();
  ok(visScrEvtInternal.count > 0, "Got some mozvisualscroll events");

  // Our internal events shouldn't leak to normal content.
  visResEvtContent.unregister();
  is(visResEvtContent.count, 0, "Got no mozvisualresize events in content");
  visScrEvtContent.unregister();
  is(visScrEvtContent.count, 0, "Got no mozvisualscroll events in content");
}

waitUntilApzStable()
.then(test)
.then(subtestDone, subtestFailed);

  </script>
</head>
<body>
  Here is some text to stare at as the test runs. It serves no functional
  purpose, but gives you an idea of the zoom level. It's harder to tell what
  the zoom level is when the page is just solid white.
</body>
</html>