Index: third_party/WebKit/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
diff --git a/third_party/WebKit/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html b/third_party/WebKit/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0aa4b97febba8409550964d1b26e23a1f904c786 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/scroll-behavior/main-frame-pinch-scrolls-layout-viewport.html |
@@ -0,0 +1,83 @@ |
+<!DOCTYPE html> |
+<style> |
+ body { |
+ width: 1000px; |
+ height: 1000px; |
+ /* Overflow hidden so that the size of the scrollbar is not added to |
+ the innerHeight/Width properties. */ |
+ overflow: hidden; |
+ } |
+</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.setInertVisualViewport(testScrolls[currentTest].scrollLayoutViewport); |
+ window.scrollTo(testCase.x, testCase.y); |
+ window.requestAnimationFrame(finishTest); |
+ } |
+ |
+ window.onload = function () { |
+ if (!window.internals) { |
+ testFailed('This test requires window.internals'); |
+ finishJSTest(); |
+ return; |
+ } |
+ |
+ internals.settings.setInertVisualViewport(false); |
+ // The height/width of the layout viewport is innerHeight/Width of the window |
+ // when no pinch-zoom is applied. |
+ var layoutInnerHeight = window.innerHeight; |
+ var layoutInnerWidth = window.innerWidth; |
+ // The height/width of the visual viewport is innerHeight/Width of the window |
+ // when pinch-zoom is applied. |
+ internals.setPageScaleFactor(2.0); |
+ var visualInnerHeight = window.innerHeight; |
+ var visualInnerWidth = window.innerWidth; |
+ |
+ // The maximum scroll offsets when the visual viewport is scrolled. |
+ var maxScrollHeightScrollVisual = document.scrollingElement.scrollHeight - visualInnerHeight; |
+ var maxScrollWidthScrollVisual = document.scrollingElement.scrollWidth - visualInnerWidth; |
+ // The maximum scroll offsets when the layout viewport is scrolled. |
+ var maxScrollHeightScrollLayout = document.scrollingElement.scrollHeight - layoutInnerHeight; |
+ var maxScrollWidthScrollLayout = document.scrollingElement.scrollWidth - layoutInnerWidth; |
+ |
+ // 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: 2000, y: 2000, expectedX: maxScrollWidthScrollVisual, expectedY:maxScrollHeightScrollVisual, scrollLayoutViewport:false}, |
+ {x: 2000, y: 2000, expectedX: maxScrollWidthScrollLayout, expectedY:maxScrollHeightScrollLayout, scrollLayoutViewport:true}, |
+ ]; |
+ startNextTestCase(); |
+ } |
+</script> |