chromium/third_party/blink/web_tests/rootscroller/fixed-chaining-with-implicit-pointer-events-none.html

<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/gesture-util.js"></script>
<style>
  body, html {
    width: 100%;
    height: 100%;
    margin: 0;
  }

  #rootscroller::-webkit-scrollbar {
    width: 0px;
    height: 0px;
  }

  #rootscroller {
    width: 100%;
    height: 100%;
    overflow: auto;
    position: absolute;
    left: 0;
    top: 0;
    background-color: red;
  }

  .spacer {
    width: 100%;
    height: 100%;
  }

  #fixed {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 80%;
    background-color: grey;
    pointer-events: none;
  }
</style>

<div id="rootscroller">
  <div class="spacer" style="background-color: PaleGreen"></div>
  <div class="spacer" style="background-color: Maroon"></div>
</div>

<div id="fixed">
  <p>
    To test, try scrolling over the grey region. The root scroller should be
    scrolled (you should see red appear). Since the grey fixed region has
    |pointer-events:none|, the scroll events should hit the root scroller.
  </p>
</div>

<script>
  if (window.internals) {
    internals.settings.setScrollAnimatorEnabled(false);
    internals.runtimeFlags.implicitRootScrollerEnabled = true;
  }

  async function runTest() {
    await waitForCompositorCommit();
    assert_equals(window.internals.effectiveRootScroller(document),
                  rootscroller,
                  "#rootscroller must be the effective root scroller");

    const delta = 3000;
    const location = { x: 5, y: 5 };
    await smoothScroll(delta,
                       location.x,
                       location.y,
                       GestureSourceType.TOUCH_INPUT,
                       'down',
                       SPEED_INSTANT);

    assert_greater_than(rootscroller.scrollTop,
                        0,
                        "RootScroller must have been scrolled");
  }

  window.onload = async () => {
    if (!window.internals)
      return;

    var rootscroller = document.querySelector('#rootscroller');

    promise_test( async t => {
      internals.setPageScaleFactor(1);
      await runTest();
    }, "Scrolling from fixed element while unzoomed.");
  }
</script>