| <!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true AsyncOverflowScrollingEnabled=true ] --> |
| <html> |
| <head> |
| <!--Trigger some scaling --> |
| <meta name="viewport" content="width=500"> |
| |
| <style> |
| body { |
| height: 2000px; |
| margin: 0; |
| } |
| |
| #scroller { |
| margin: 10px; |
| width: 300px; |
| height: 300px; |
| border: 1px solid black; |
| box-sizing: border-box; |
| overflow: scroll; |
| -webkit-overflow-scrolling: touch; |
| } |
| .content { |
| height: 1000px; |
| } |
| </style> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script src="../../resources/ui-helper.js"></script> |
| <script> |
| jsTestIsAsync = true; |
| |
| async function tryScrollAt(x, y, xScrollOffset, yScrollOffset) |
| { |
| await new Promise(resolve => { |
| testRunner.runUIScript(` |
| uiController.immediateScrollElementAtContentPointToOffset(${x}, ${y}, ${xScrollOffset}, ${yScrollOffset}, true);`, resolve); |
| }); |
| } |
| |
| let scrollTopAfterOutsideTopLeft; |
| let scrollTopAfterInsideTopLeft; |
| let scrollTopAfterOutsideBottomRight; |
| let scrollTopAfterInsideBottomRight; |
| |
| async function doTest() |
| { |
| if (!testRunner.runUIScript) |
| return |
| |
| // Test near the corners to exercise the point conversion logic. |
| // Don't call shouldBe() until the end because it inserts content, offsetting the scroller. |
| await tryScrollAt(9, 9, 0, 100); |
| scrollTopAfterOutsideTopLeft = scroller.scrollTop; |
| |
| await tryScrollAt(12, 12, 0, 200); |
| scrollTopAfterInsideTopLeft = scroller.scrollTop; |
| |
| await tryScrollAt(311, 311, 0, 300); |
| scrollTopAfterOutsideBottomRight = scroller.scrollTop; |
| |
| await tryScrollAt(308, 308, 0, 400); |
| scrollTopAfterInsideBottomRight = scroller.scrollTop; |
| |
| shouldBe('scrollTopAfterOutsideTopLeft', '0'); |
| shouldBe('scrollTopAfterInsideTopLeft', '200'); |
| shouldBe('scrollTopAfterOutsideBottomRight', '200'); |
| shouldBe('scrollTopAfterInsideBottomRight', '400'); |
| |
| finishJSTest(); |
| } |
| |
| window.addEventListener('load', doTest, false); |
| </script> |
| </head> |
| <body> |
| <div id="scroller"> |
| <div class="content"> |
| </div> |
| </div> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |