accessible/tests/mochitest/hittest/test_shadowroot_subframe.html
author Emilio Cobos Álvarez <emilio@crisal.io>
Thu, 29 Aug 2019 21:25:12 +0000
changeset 490740 49ff97acd5ce9f094430bf4538e7f32792201182
parent 397989 b647cd8f54368a02c67c14025d8e0a21ae01d18c
permissions -rw-r--r--
Bug 1577258 - Explicitly flush layout in an a11y test. r=eeejay We have an optimization to avoid an expensive reflow from SetFullZoom, see mSuppressResizeReflow[1]. That was done because we used to do a full synchronous reflow right after. We no longer do that, but due to that member we also don't invalidate! My second patch in this bug changes the behavior of that flag so that we don't synchronously reflow, but we do invalidate. So in turn this test before the change wasn't really testing the zoomed code-path since it was using the clean layout from before the zoom operation. a11y getBounds and co. don't flush layout (they probably should), but since with my patch we dirty the frame tree, and dirty frames return bogus offsets, the test starts failing. Flush layout explicitly to ensure we're testing the zoomed code path. [1]: https://searchfox.org/mozilla-central/rev/325c1a707819602feff736f129cb36055ba6d94f/layout/base/nsPresContext.cpp#952 Differential Revision: https://phabricator.services.mozilla.com/D43952

<!DOCTYPE HTML>
<html>
<head>
  <title>ShadowRoot hit tests</title>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <script type="application/javascript" src="../common.js"></script>
  <script type="application/javascript" src="../layout.js"></script>

  <script type="application/javascript">
    let SimpleTest = window.parent.SimpleTest;
    let ok = window.parent.ok;
    let is = window.parent.is;

    function doTest() {
      var componentAcc = getAccessible("component1");
      testChildAtPoint(componentAcc, 1, 1, componentAcc.firstChild,
                       componentAcc.firstChild);

      componentAcc = getAccessible("component2");
      testChildAtPoint(componentAcc, 1, 1, componentAcc.firstChild,
                       componentAcc.firstChild);
      SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTest);
  </script>

</head>
<body>
  <div role="group" class="components" id="component1" style="display: inline-block;">
  <!--
    <div role="button" id="component-child"
         style="width: 100px; height: 100px; background-color: pink;">
    </div>
  -->
  </div>
  <div role="group" class="components"  id="component2" style="display: inline-block;">
  <!--
    <button>Hello world</button>
  -->
  </div>
  <script>
    // This routine adds the comment children of each 'component' to its
    // shadow root.
    var components = document.querySelectorAll(".components");
    for (var i = 0; i < components.length; i++) {
      var component = components[i];
      var shadow = component.attachShadow({mode: "open"});
      for (var child = component.firstChild; child; child = child.nextSibling) {
        if (child.nodeType === 8)
          // eslint-disable-next-line no-unsanitized/property
          shadow.innerHTML = child.data;
      }
    }
  </script>
</body>
</html>