| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Dragging the scrollbar thumb while triggering layout should trigger scroll snapping</title> |
| <style type="text/css"> |
| /* Use customized scrollbar to avoid platform differences. */ |
| ::-webkit-scrollbar { |
| width: 20px; |
| height: 20px; |
| } |
| ::-webkit-scrollbar-button { |
| height: 20px; |
| width: 20px; |
| background-color: blue; |
| } |
| |
| ::-webkit-scrollbar-track-piece { |
| background-color: gray; |
| } |
| |
| ::-webkit-scrollbar-thumb { |
| height: 20px; |
| width: 20px; |
| background-color: black; |
| } |
| |
| body { |
| margin: 0px; |
| } |
| |
| .container { |
| height: 200px; |
| width: 200px; |
| overflow: auto; |
| scroll-snap-type: both mandatory; |
| } |
| |
| .horizontal-drawer { |
| height: 100%; |
| width: 500px; |
| } |
| |
| .block { |
| height: 100%; |
| width: 250px; |
| scroll-snap-align: start; |
| } |
| </style> |
| <script src="../../resources/js-test.js"></script> |
| <script src="../../resources/ui-helper.js"></script> |
| <script> |
| window.jsTestIsAsync = true; |
| |
| async function onLoad() |
| { |
| let sawZero = false; |
| let horizontalContainer = document.getElementById("horizontal-container"); |
| horizontalContainer.addEventListener('scroll', () => { |
| document.getElementById('horizontal-block').innerText = horizontalContainer.scrollLeft; |
| sawZero ||= horizontalContainer.scrollLeft == 0; |
| }) |
| |
| let verticalContainer = document.getElementById("vertical-container"); |
| verticalContainer.addEventListener('scroll', () => { |
| document.getElementById('vertical-block').innerText = verticalContainer.scrollTop; |
| sawZero ||= verticalContainer.scrollTop == 0; |
| }) |
| |
| if (window.eventSender == undefined) { |
| document.getElementById('console').innerText = "Dragging the scrollbar thumb should trigger scroll snapping."; |
| return; |
| } |
| try { |
| eventSender.mouseMoveTo(20, 190); |
| eventSender.mouseDown(); |
| |
| // Pause and move to trigger relayouts. |
| eventSender.mouseMoveTo(40, 190); |
| await UIHelper.delayFor(1); |
| eventSender.mouseMoveTo(50, 190); |
| await UIHelper.delayFor(1); |
| |
| eventSender.mouseMoveTo(80, 190); |
| eventSender.mouseUp(); |
| |
| await UIHelper.waitForTargetScrollAnimationToSettle(horizontalContainer); |
| expectTrue(horizontalContainer.scrollLeft == 250, "dragging the horizontal scrollbar thumb snapped"); |
| expectTrue(sawZero === false, "relayouts should not have snapped back"); |
| |
| sawZero = false; |
| eventSender.mouseMoveTo(190, 220); |
| eventSender.mouseDown(); |
| |
| // Pause and move to trigger relayouts. |
| eventSender.mouseMoveTo(190, 250); |
| await UIHelper.delayFor(1); |
| eventSender.mouseMoveTo(190, 255); |
| await UIHelper.delayFor(1); |
| |
| eventSender.mouseMoveTo(190, 270); |
| eventSender.mouseUp(); |
| await UIHelper.waitForTargetScrollAnimationToSettle(verticalContainer); |
| expectTrue(verticalContainer.scrollTop == 180, "dragging the vertical scrollbar thumb snapped"); |
| expectTrue(sawZero === false, "relayouts should not have snapped back"); |
| } catch (e) { |
| console.log(e); |
| } finally { |
| finishJSTest(); |
| } |
| } |
| </script> |
| </head> |
| <body onload="onLoad();"> |
| <div id="horizontal-container" class="container"> |
| <div class="horizontal-drawer"> |
| <div class="block" id="horizontal-block" style="float: left; background: #80475E"></div> |
| <div class="block" style="float: left; background: #CC5A71"></div> |
| </div> |
| </div> |
| <div id="vertical-container" class="container"> |
| <div class="block" id="vertical-block" style="background: #80475E"></div> |
| <div class="block" style="background: #CC5A71"></div> |
| </div> |
| <p id="console"></p> |
| </body> |
| </html> |