Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '22.04' && display == 'wayland'
- Manifest: gfx/layers/apz/test/mochitest/mochitest.toml
<!DOCTYPE HTML>
<html>
<!--
-->
<head>
  <meta charset="utf-8">
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <script type="application/javascript" src="apz_test_utils.js"></script>
  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
  <script type="application/javascript">
    async function test() {
      // Trigger the buggy scenario
      subframe.classList.add("a");
      // The transform change is animated, so let's step through 1s of animation
      var utils = SpecialPowers.getDOMWindowUtils(window);
      for (var i = 0; i < 60; i++) {
        utils.advanceTimeAndRefresh(16);
      }
      utils.restoreNormalRefresh();
      // Wait for the layer tree with any updated dispatch-to-content region to
      // get pushed over to the APZ
      await promiseAllPaintsDone();
      await promiseOnlyApzControllerFlushed();
      // Trigger layerization of the subframe by scrolling the wheel over it
      await promiseMoveMouseAndScrollWheelOver(subframe, 10, 10);
      // Give APZ the chance to compute a displayport, and content
      // to render based on it.
      await promiseApzFlushedRepaints();
      // Examine the content-side APZ test data
      var contentTestData = utils.getContentAPZTestData();
      // the APZ test data. The bug this test is for causes the displayport
      // calculation for this scroll frame to go wrong, causing it not to
      // become layerized.
      contentTestData = convertTestData(contentTestData);
      var foundIt = false;
      for (var seqNo in contentTestData.paints) {
        var paint = contentTestData.paints[seqNo];
        for (var scrollId in paint) {
          var scrollFrame = paint[scrollId];
          if ("contentDescription" in scrollFrame &&
            foundIt = true;
          }
        }
      }
    }
    if (isApzEnabled()) {
      SimpleTest.waitForExplicitFinish();
      pushPrefs([["apz.test.logging_enabled", true]])
        .then(waitUntilApzStable)
        .then(test)
        .then(SimpleTest.finish, SimpleTest.finishWithFailure);
    }
  </script>
  <style>
    #bug1277814-div
    {
      position: absolute;
      left: 0;
      top: 0;
      padding: .5em;
      overflow: auto;
      color: white;
      background: green;
      max-width: 30em;
      max-height: 6em;
      visibility: hidden;
      transform: scaleY(0);
      transition: transform .15s ease-out, visibility 0s ease .15s;
    }
    #bug1277814-div.a
    {
      visibility: visible;
      transform: scaleY(1);
      transition: transform .15s ease-out;
    }
  </style>
</head>
<body>
  <!-- Use a unique id because we'll be checking for it in the content
       description logged in the APZ test data -->
    CoolCmd<br>CoolCmd<br>CoolCmd<br>CoolCmd<br>
    CoolCmd<br>CoolCmd<br>CoolCmd<br>CoolCmd<br>
    CoolCmd<br>CoolCmd<br>CoolCmd<br>CoolCmd<br>
    CoolCmd<br>CoolCmd<br>CoolCmd<br>CoolCmd<br>
    CoolCmd<br>CoolCmd<br>CoolCmd<br>CoolCmd<br>
  <button>click me</button>
</body>
</html>