Bug 1577258 - Explicitly flush layout in an a11y test. r=eeejay
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 29 Aug 2019 21:25:12 +0000
changeset 551217 49ff97acd5ce9f094430bf4538e7f32792201182
parent 551216 85d8c19fcc3c712b4c3515568a08688d968f7d7f
child 551218 5202fd3daa100d65960e7f28e70da17672460413
push id11865
push userbtara@mozilla.com
push dateMon, 02 Sep 2019 08:54:37 +0000
treeherdermozilla-beta@37f59c4671b3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerseeejay
bugs1577258
milestone70.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
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
accessible/tests/mochitest/hittest/test_zoom_text.html
--- a/accessible/tests/mochitest/hittest/test_zoom_text.html
+++ b/accessible/tests/mochitest/hittest/test_zoom_text.html
@@ -20,16 +20,18 @@
       var textNode = hyperText.firstChild;
       let [x, y, width, height] = getBounds(textNode);
       testOffsetAtPoint(hyperText, x + width / 2, y + height / 2,
                         COORDTYPE_SCREEN_RELATIVE,
                         hyperText.textContent.length / 2);
 
       zoomDocument(document, 2.0);
 
+      document.body.offsetTop; // getBounds doesn't flush layout on its own, looks like.
+
       [x, y, width, height] = getBounds(textNode);
       testOffsetAtPoint(hyperText, x + width / 2, y + height / 2,
                         COORDTYPE_SCREEN_RELATIVE,
                         hyperText.textContent.length / 2);
 
       zoomDocument(document, 1.0);
 
       SimpleTest.finish();