window.scrollBy() scrolls incorrectly when zoomed in/out
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Mar 2012 14:37:56 +0000 (14:37 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Mar 2012 14:37:56 +0000 (14:37 +0000)
https://bugs.webkit.org/show_bug.cgi?id=45228

Patch by Eugene Girard <girard@chromium.org> on 2012-03-28
Reviewed by Simon Fraser.

scrollBy now uses layout (not CSS) units. (As scrollTo does.)

Source/WebCore:

Test: fast/dom/zoom-scroll-page-test.html

* page/DOMWindow.cpp:
(WebCore::DOMWindow::scrollBy):

LayoutTests:

* fast/dom/zoom-scroll-page-test-expected.txt: Added.
* fast/dom/zoom-scroll-page-test.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@112395 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/zoom-scroll-page-test-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/zoom-scroll-page-test.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/page/DOMWindow.cpp

index 38869e0..1729bef 100644 (file)
@@ -1,3 +1,15 @@
+2012-03-28  Eugene Girard  <girard@chromium.org>
+
+        window.scrollBy() scrolls incorrectly when zoomed in/out
+        https://bugs.webkit.org/show_bug.cgi?id=45228
+
+        Reviewed by Simon Fraser.
+
+        scrollBy now uses layout (not CSS) units. (As scrollTo does.)
+
+        * fast/dom/zoom-scroll-page-test-expected.txt: Added.
+        * fast/dom/zoom-scroll-page-test.html: Added.
+
 2012-03-28  Stephen Chenney  <schenney@chromium.org>
 
         Null dereference in SVGTextElement::animatedLocalTransform()
diff --git a/LayoutTests/fast/dom/zoom-scroll-page-test-expected.txt b/LayoutTests/fast/dom/zoom-scroll-page-test-expected.txt
new file mode 100644 (file)
index 0000000..62dd9c5
--- /dev/null
@@ -0,0 +1,67 @@
+This tests that window.scrollBy respects the page's zoom and scale factor when scrolling.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Testing at zoom -1 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -3 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -3 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -3 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -3 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -2 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -2 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -2 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -2 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -1 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -1 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -1 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom -1 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 0 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 0 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 0 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 0 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 1 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 1 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 1 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 1 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 3 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 3 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 3 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 3 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 5 and scale 0.75
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 5 and scale 1
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 5 and scale 1.2
+PASS window.pageYOffset is within 3 of 231
+Testing at zoom 5 and scale 1.6
+PASS window.pageYOffset is within 3 of 231
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/zoom-scroll-page-test.html b/LayoutTests/fast/dom/zoom-scroll-page-test.html
new file mode 100644 (file)
index 0000000..e00aff3
--- /dev/null
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <style>
+        body    { position: relative; height: 2000px; }
+    </style>
+    <script src="../js/resources/js-test-pre.js"></script>
+    <script>
+        description('This tests that window.scrollBy respects the page\'s zoom and scale factor when scrolling.');
+
+        function zoomBy(zoomFactor)
+        {
+            while (zoomFactor > 0) {
+                window.eventSender.zoomPageIn();
+                zoomFactor--;
+            }
+            while (zoomFactor < 0) {
+                window.eventSender.zoomPageOut();
+                zoomFactor++;
+            }
+        }
+        function testScroll(zoomFactor, scaleFactor) {
+            debug('Testing at zoom ' + zoomFactor + ' and scale ' + scaleFactor);
+            if (window.layoutTestController && window.eventSender) {
+                var y = 221;
+                eventSender.scalePageBy(scaleFactor, 0, 0);
+                zoomBy(zoomFactor);
+                window.scrollTo(10, 10);
+                window.scrollBy(0, y);
+                shouldBeCloseTo('window.pageYOffset', y+10, 3, false);
+                zoomBy(-zoomFactor);
+            }
+            else
+                testFailed('This test only operates in DumpRenderTree.');
+        }
+
+        function runTests() {
+            testScroll(-1,1.2);
+            var zoomLevels = [-3, -2, -1, 0, 1, 3, 5];
+            var scaleLevels = [0.75, 1, 1.2, 1.6];
+            for (zoom in zoomLevels)
+                for (scale in scaleLevels)
+                    testScroll(zoomLevels[zoom], scaleLevels[scale]);
+
+            wasPostTestScriptParsed = true;
+            finishJSTest();
+        }
+    </script>
+</head>
+
+<body onload="runTests()">
+    <div id="target"></div>
+</body>
+</html>
+
index 81f1530..84af4ee 100644 (file)
@@ -1,3 +1,17 @@
+2012-03-28  Eugene Girard  <girard@chromium.org>
+
+        window.scrollBy() scrolls incorrectly when zoomed in/out
+        https://bugs.webkit.org/show_bug.cgi?id=45228
+
+        Reviewed by Simon Fraser.
+
+        scrollBy now uses layout (not CSS) units. (As scrollTo does.)
+
+        Test: fast/dom/zoom-scroll-page-test.html
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::scrollBy):
+
 2012-03-28  Stephen Chenney  <schenney@chromium.org>
 
         Null dereference in SVGTextElement::animatedLocalTransform()
index 70eb5ec..9d4c3b4 100644 (file)
@@ -1349,7 +1349,8 @@ void DOMWindow::scrollBy(int x, int y) const
     if (!view)
         return;
 
-    view->scrollBy(IntSize(x, y));
+    IntSize scaledOffset(view->mapFromCSSToLayoutUnits(x), view->mapFromCSSToLayoutUnits(y));
+    view->scrollBy(scaledOffset);
 }
 
 void DOMWindow::scrollTo(int x, int y) const