| <!DOCTYPE html> |
| <style> |
| body { |
| margin: 0; |
| padding: 0; |
| } |
| |
| #nonFastRegion { |
| height: 222px; |
| width: 222px; |
| border: none; |
| overflow: scroll; |
| -webkit-transform: translateX(0); |
| } |
| |
| #nonFastRegion > div { |
| height: 1000px; |
| width: 1000px; |
| background: linear-gradient(to bottom, red, white); |
| } |
| |
| .spacer { |
| height: 2000px; |
| } |
| </style> |
| |
| <div id='nonFastRegion'><div>This should be covered by a green overlay.</div></div> |
| |
| <p>A single square should be visible covered by a green overlay.</p> |
| <div id="console"></div> |
| <div class="spacer"></div> |
| |
| <script src="../resources/js-test.js"></script> |
| <script src="../resources/run-after-layout-and-paint.js"></script> |
| <script src="resources/non-fast-scrollable-region-testing.js"></script> |
| <script> |
| jsTestIsAsync = true; |
| // print result lazily to avoid layouts during the test |
| setPrintTestResultsLazily(); |
| description('This test ensures that transforming a non-fast scrollable area ' + |
| 'correctly updates list of non-fast scrollable rects ' + |
| '(See http://crbug.com/417345).'); |
| |
| onload = function() { |
| runAfterLayoutAndPaint(runTests); |
| }; |
| |
| function runTests() { |
| nonFastScrollableRects = internals.nonFastScrollableRects(document); |
| shouldBe('nonFastScrollableRects.length', '1'); |
| shouldBeEqualToString('rectToString(nonFastScrollableRects[0])', '[0, 0, 222, 222]'); |
| |
| document.body.style.padding = "10px"; |
| debug("Trigger style update"); |
| shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1"); |
| debug("Verifying layout hasn't been triggered"); |
| shouldBe("internals.needsLayoutCount()", "3"); |
| |
| // Updating transforms hits an optimized layout path which is root cause of |
| // http://crbug.com/417345 |
| debug("Update non-fast element's transform"); |
| document.getElementById('nonFastRegion').style.webkitTransform = 'translateX(100px)'; |
| |
| debug("Trigger style update"); |
| shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1"); |
| debug("Verifying layout still hasn't been triggered"); |
| shouldBe("internals.needsLayoutCount()", "3"); |
| debug("Verifying non-fast regions have been updated"); |
| // Note: querying non-fast regions forces layout, so the expectation |
| // reflects the change to body element padding. |
| nonFastScrollableRects = internals.nonFastScrollableRects(document); |
| shouldBe('nonFastScrollableRects.length', '1'); |
| shouldBeEqualToString('rectToString(nonFastScrollableRects[0])', '[110, 10, 222, 222]'); |
| |
| setTimeout(function() { |
| // Add green overlays to help visualize the test |
| drawNonFastScrollableRegionOverlays(); |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |