Chromium Code Reviews| Index: LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
| diff --git a/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html b/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9e431e5332ecf193b5c833e5f29908e68fefc525 |
| --- /dev/null |
| +++ b/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
| @@ -0,0 +1,74 @@ |
| +<!DOCTYPE html> |
| +<style> |
| + body { |
| + width: 600px; |
| + height: 1000px; |
| + } |
| +</style> |
| +<script src="../../resources/js-test.js"></script> |
| + |
| +<script type="text/javascript"> |
| + var testScrolls = []; |
| + var currentTest = -1; |
| + |
| + setPrintTestResultsLazily(); |
| + jsTestIsAsync = true; |
| + |
| + description("Test that when the scrollLayoutViewport setting is on, the scroll " + |
| + "from window.scrollTo is applied to the layout viewport. Note that this test is " + |
| + "pertaining to crbug.com/489206, where we want all APIs to reflect the layout viewport."); |
| + |
| + function finishTest() { |
| + var testCase = testScrolls[currentTest]; |
| + if(window.scrollX == testCase.expectedX && window.scrollY == testCase.expectedY) { |
| + testPassed("Scroll destination reached."); |
| + startNextTestCase(); |
| + } else { |
| + testFailed("Scroll destination not reached."); |
| + startNextTestCase(); |
| + } |
| + } |
| + |
| + function startNextTestCase() { |
| + currentTest++; |
| + if (currentTest >= testScrolls.length) { |
| + finishJSTest(); |
| + return; |
| + } |
| + |
| + var testCase = testScrolls[currentTest]; |
| + internals.settings.setScrollLayoutViewport(testScrolls[currentTest].scrollLayoutViewport); |
| + window.scrollTo(testCase.x, testCase.y); |
| + window.requestAnimationFrame(finishTest); |
| + } |
| + |
| + window.onload = function () { |
| + if (!window.internals) { |
| + testFailed('This test requires window.internals'); |
|
bokan
2015/09/21 16:49:12
should you return after this?
ymalik (do not use)
2015/09/21 20:35:50
Absolutely!
|
| + } |
| + |
| + internals.settings.setScrollLayoutViewport(false); |
| + // The height of the layout viewport is innerHeight of the window when no |
| + // pinch-zoom is applied. |
| + var layoutInnerHeight = window.innerHeight; |
| + // The height of the visual viewport is innerHeight of the window when |
| + // pinch-zoom is applied. |
| + internals.setPageScaleFactor(2.0); |
| + var visualInnerHeight = window.innerHeight; |
|
bokan
2015/09/21 16:49:12
Please also add a case for verifying the innerWidt
ymalik (do not use)
2015/09/21 20:35:49
Acknowledged.
That's fair. I was trying to follow
bokan
2015/09/21 20:59:56
Good, consistency is usually the trump card.
|
| + |
| + // The maximum scrollTop when the visual viewport is scrolled. |
| + var maxScrollHeightScrollVisual = document.scrollingElement.scrollHeight - visualInnerHeight; |
| + // The maximum scrollTop when the layout viewport is scrolled. |
| + var maxScrollHeightScrollLayout = document.scrollingElement.scrollHeight - layoutInnerHeight; |
| + |
| + // First scrollTo is called with the scrollLayoutViewport setting off, in which |
| + // case, window.scrollY should return the position of the visual viewport. Then |
| + // the setting is turned on, and this time, window.scrollY should return the |
| + // position of the layoutViewport. |
| + testScrolls = [ |
| + {x: 0, y: 2000, expectedX: 0, expectedY:maxScrollHeightScrollVisual, scrollLayoutViewport:false}, |
|
bokan
2015/09/21 16:49:12
Please also test the horizontal axis
ymalik (do not use)
2015/09/21 20:35:49
Done.
|
| + {x: 0, y: 2000, expectedX: 0, expectedY:maxScrollHeightScrollLayout, scrollLayoutViewport:true}, |
| + ]; |
| + startNextTestCase(); |
| + } |
| +</script> |