summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjchaffraix@webkit.org <jchaffraix@webkit.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538>2011-12-29 14:06:18 +0000
committerjchaffraix@webkit.org <jchaffraix@webkit.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538>2011-12-29 14:06:18 +0000
commitfc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4 (patch)
tree3469771e94edf31c3aac28acfad7c29f54f21b7d
parent330ebce625475619467a0f6207fcb5c3c3bbbe38 (diff)
downloadchromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.zip
chromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.tar.gz
chromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.tar.bz2
REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
https://bugs.webkit.org/show_bug.cgi?id=67100 Reviewed by Dan Bernstein. Source/WebCore: Tests: fast/layers/scroll-with-transform-composited-layer-expected.html fast/layers/scroll-with-transform-composited-layer.html fast/layers/scroll-with-transform-layer-expected.html fast/layers/scroll-with-transform-layer.html The regression came from a previous optimization that was wrongly kept after r93614. * rendering/RenderLayer.cpp: (WebCore::RenderLayer::updateLayerPositionsAfterScroll): Remove the early return for transformed layer. This change worked as we used to call updateLayerPositions from scrollTo which would call updateLayerPosition on all our descendants. After r93614, this is no longer the case and we explicitely need to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll. LayoutTests: Added 2 ref tests for scrolling inside a transformed layers (either composited or not). * fast/layers/scroll-with-transform-composited-layer-expected.html: Added. * fast/layers/scroll-with-transform-composited-layer.html: Added. * fast/layers/scroll-with-transform-layer-expected.html: Added. * fast/layers/scroll-with-transform-layer.html: Added. git-svn-id: svn://svn.chromium.org/blink/trunk@103798 bbb929c8-8fbe-4397-9dbb-9b2b20218538
-rw-r--r--third_party/WebKit/LayoutTests/ChangeLog15
-rw-r--r--third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html50
-rw-r--r--third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html67
-rw-r--r--third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html44
-rw-r--r--third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html67
-rw-r--r--third_party/WebKit/Source/WebCore/ChangeLog21
-rw-r--r--third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp5
7 files changed, 264 insertions, 5 deletions
diff --git a/third_party/WebKit/LayoutTests/ChangeLog b/third_party/WebKit/LayoutTests/ChangeLog
index db08f8b..fb66241 100644
--- a/third_party/WebKit/LayoutTests/ChangeLog
+++ b/third_party/WebKit/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2011-12-29 Julien Chaffraix <jchaffraix@webkit.org>
+
+ REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
+ https://bugs.webkit.org/show_bug.cgi?id=67100
+
+ Reviewed by Dan Bernstein.
+
+ Added 2 ref tests for scrolling inside a transformed layers (either composited
+ or not).
+
+ * fast/layers/scroll-with-transform-composited-layer-expected.html: Added.
+ * fast/layers/scroll-with-transform-composited-layer.html: Added.
+ * fast/layers/scroll-with-transform-layer-expected.html: Added.
+ * fast/layers/scroll-with-transform-layer.html: Added.
+
2011-12-28 Pavel Podivilov <podivilov@chromium.org>
Web Inspector: add "enable source maps" checkbox setting.
diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html
new file mode 100644
index 0000000..3ad5cb6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+ p { height: 300px; width: 100px; margin: 0px; }
+ p.green { background-color: green; }
+ div { height: 100px; width: 100px; }
+ div.relative { position: relative }
+ div.composited
+ {
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+</style>
+</head>
+<body>
+ <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span>
+ <span>All the boxes should only contain green content.</span>
+ <div class="scrollMe composited" style="overflow: hidden;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe composited" style="overflow: scroll;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe composited" style="overflow: hidden;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe composited" style="overflow: scroll;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <script>
+ var scrollMes = document.getElementsByClassName("scrollMe");
+ for (var i = 0; i < scrollMes.length; ++i)
+ scrollMes[i].scrollTop = 100;
+ </script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html
new file mode 100644
index 0000000..e2bf5a7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+ p { height: 100px; width: 100px; margin: 0px; }
+ p.red { background-color: red; }
+ p.green { background-color: green; }
+ div { height: 100px; width: 100px; }
+ div.relative { position: relative }
+ div.composited
+ {
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ transform: translateZ(0);
+ }
+ div.translated
+ {
+ -webkit-transform: translate(0);
+ -moz-transform: translate(0);
+ transform: translate(0);
+ }
+</style>
+</head>
+<body>
+ <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span>
+ <span>All the boxes should only contain green content.</span>
+ <!-- Use a translation. -->
+ <div class="scrollMe composited" style="overflow: hidden;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe composited" style="overflow: scroll;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <!-- Nest composited and non-composited. -->
+ <div class="scrollMe composited" style="overflow: hidden;">
+ <div class="relative translated">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe translated" style="overflow: scroll;">
+ <div class="relative composited">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <script>
+ var scrollMes = document.getElementsByClassName("scrollMe");
+ for (var i = 0; i < scrollMes.length; ++i)
+ scrollMes[i].scrollTop = 100;
+ </script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html
new file mode 100644
index 0000000..aaa978a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+ p { height: 300px; width: 100px; margin: 0px; }
+ p.green { background-color: green; }
+ div { height: 100px; width: 100px; }
+ div.relative { position: relative }
+</style>
+</head>
+<body>
+ <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span>
+ <span>All the boxes should only contain green content.</span>
+ <div class="scrollMe" style="overflow: hidden;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe" style="overflow: scroll;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe" style="overflow: hidden;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe" style="overflow: scroll;">
+ <div class="relative">
+ <p class="green"></p>
+ </div>
+ </div>
+ <br>
+ <script>
+ var scrollMes = document.getElementsByClassName("scrollMe");
+ for (var i = 0; i < scrollMes.length; ++i)
+ scrollMes[i].scrollTop = 100;
+ </script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html
new file mode 100644
index 0000000..41975d4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+ p { height: 100px; width: 100px; margin: 0px; }
+ p.red { background-color: red; }
+ p.green { background-color: green; }
+ div { height: 100px; width: 100px; }
+ div.relative { position: relative }
+ div.rotated
+ {
+ -webkit-transform: rotate(360deg);
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+ div.translated
+ {
+ -webkit-transform: translate(0);
+ -moz-transform: translate(0);
+ transform: translate(0);
+ }
+</style>
+</head>
+<body>
+ <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span>
+ <span>All the boxes should only contain green content.</span>
+ <!-- Use a translation. -->
+ <div class="scrollMe translated" style="overflow: hidden;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe translated" style="overflow: scroll;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <!-- Use a rotation. -->
+ <div class="scrollMe rotated" style="overflow: hidden;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <div class="scrollMe rotated" style="overflow: scroll;">
+ <div class="relative">
+ <p class="red"></p>
+ <p class="green"></p>
+ <p class="red"></p>
+ </div>
+ </div>
+ <br>
+ <script>
+ var scrollMes = document.getElementsByClassName("scrollMe");
+ for (var i = 0; i < scrollMes.length; ++i)
+ scrollMes[i].scrollTop = 100;
+ </script>
+</body>
+</html>
diff --git a/third_party/WebKit/Source/WebCore/ChangeLog b/third_party/WebKit/Source/WebCore/ChangeLog
index 7327da7..74e1b4b 100644
--- a/third_party/WebKit/Source/WebCore/ChangeLog
+++ b/third_party/WebKit/Source/WebCore/ChangeLog
@@ -1,3 +1,24 @@
+2011-12-29 Julien Chaffraix <jchaffraix@webkit.org>
+
+ REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
+ https://bugs.webkit.org/show_bug.cgi?id=67100
+
+ Reviewed by Dan Bernstein.
+
+ Tests: fast/layers/scroll-with-transform-composited-layer-expected.html
+ fast/layers/scroll-with-transform-composited-layer.html
+ fast/layers/scroll-with-transform-layer-expected.html
+ fast/layers/scroll-with-transform-layer.html
+
+ The regression came from a previous optimization that was wrongly kept after r93614.
+
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
+ Remove the early return for transformed layer. This change worked as we used
+ to call updateLayerPositions from scrollTo which would call updateLayerPosition on
+ all our descendants. After r93614, this is no longer the case and we explicitely need
+ to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll.
+
2011-12-29 Alexander Pavlov <apavlov@chromium.org>
Web Inspector: Tree views can be collapsed/hidden using the keyboard arrows
diff --git a/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp b/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp
index 5727771..c579499 100644
--- a/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp
+++ b/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp
@@ -465,11 +465,6 @@ void RenderLayer::updateLayerPositionsAfterScroll(UpdateLayerPositionsAfterScrol
// FIXME: Is it worth passing the offsetFromRoot around like in updateLayerPositions?
computeRepaintRects();
flags |= HasSeenFixedPositionedAncestor;
- } else if (renderer()->hasTransform() && !renderer()->isRenderView()) {
- // Transforms act as fixed position containers, so nothing inside a
- // transformed element can be fixed relative to the viewport if the
- // transformed element is not fixed itself or child of a fixed element.
- return;
} else if ((flags & HasSeenAncestorWithOverflowClip) && !m_canSkipRepaintRectsUpdateOnScroll) {
// If we have seen an overflow clip, we should update our repaint rects as clippedOverflowRectForRepaint
// intersects it with our ancestor overflow clip that may have moved.