Title: [120661] trunk
Revision
120661
Author
e...@google.com
Date
2012-06-18 20:04:50 -0700 (Mon, 18 Jun 2012)

Log Message

RenderLayerBacking sometimes doesn't attach scrollbars to graphics layer tree
https://bugs.webkit.org/show_bug.cgi?id=89402

Reviewed by James Robinson.

Source/WebCore:

RenderLayerBacking only attaches scrollbar layers to the graphics
layer tree if there's a clip layer. This is wrong, because these
scrollbars become orphans and other code expects them to handle
repainting the scrollbars (which now become invisible). Fix by always
attaching scrollbar layers.

Test: compositing/overflow/image-load-overflow-scrollbars.html

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateInternalHierarchy):

LayoutTests:

Add a test where an image load creates overflow.

* compositing/overflow/image-load-overflow-scrollbars-expected.png: Added.
* compositing/overflow/image-load-overflow-scrollbars-expected.txt: Added.
* compositing/overflow/image-load-overflow-scrollbars.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (120660 => 120661)


--- trunk/LayoutTests/ChangeLog	2012-06-19 02:54:19 UTC (rev 120660)
+++ trunk/LayoutTests/ChangeLog	2012-06-19 03:04:50 UTC (rev 120661)
@@ -1,3 +1,16 @@
+2012-06-18  Adrienne Walker  <e...@google.com>
+
+        RenderLayerBacking sometimes doesn't attach scrollbars to graphics layer tree
+        https://bugs.webkit.org/show_bug.cgi?id=89402
+
+        Reviewed by James Robinson.
+
+        Add a test where an image load creates overflow.
+
+        * compositing/overflow/image-load-overflow-scrollbars-expected.png: Added.
+        * compositing/overflow/image-load-overflow-scrollbars-expected.txt: Added.
+        * compositing/overflow/image-load-overflow-scrollbars.html: Added.
+
 2012-06-18  Ami Fischman  <fisch...@chromium.org>
 
         Make serve-video.php serve 206 responses

Added: trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.png (0 => 120661)


--- trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.png	                        (rev 0)
+++ trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.png	2012-06-19 03:04:50 UTC (rev 120661)
@@ -0,0 +1,6 @@
+\x89PNG
+
+
+IHDR X')tEXtchecksum4651dca6186c4ba7186140fdc72f97d3j\x8A\x8B\xC7
+\xD9IDATx\x9C\xEDر
+\x83@EAۢ\xAF\xA3t\xA8\xEC܂\x83g\xA0\x99x\x83>\xED{\xCE\xF9\xA0\xF3Y=\xE0i@L`\xC4@L`\xC4@L`Ķ\xD5\xB8\xBD\xF3<?c\xFCo	\\x84@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@l[=\x80\xDB;\x8E\xE3\xF7\xE31\xC6߆\xC0U\xF8`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@l[=\x80\xDB\xDB\xF7}\xF5\xB8,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88	,\x80\x98\xC0\x88\xBD眫7<\x8A@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@L`\xC4@\xEC\xE2l޽\x98\xE8IEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.txt (0 => 120661)


--- trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars-expected.txt	2012-06-19 03:04:50 UTC (rev 120661)
@@ -0,0 +1 @@
+

Added: trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars.html (0 => 120661)


--- trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/overflow/image-load-overflow-scrollbars.html	2012-06-19 03:04:50 UTC (rev 120661)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style type='text/css'>
+  #overflow {
+    overflow:auto;
+    width:200px;
+    height:200px;
+    -webkit-transform:translateZ(0);
+  }
+</style>
+<script type='text/_javascript_'>
+  function doTest() {
+    var canvas = document.createElement('canvas');
+    canvas.width = 1;
+    canvas.height = 400;
+    var content = document.getElementById("content");
+    content._onload_ = function() {
+      var overflow = document.getElementById("overflow");
+        overflow.scrollTop = 50;
+        if (window.layoutTestController)
+          layoutTestController.notifyDone();
+    }
+    content.src = ""
+  }
+  window.addEventListener('load', doTest, false);
+
+  if (window.layoutTestController) {
+    layoutTestController.waitUntilDone();
+    layoutTestController.dumpAsText(true);
+  }
+</script>
+</head>
+<body>
+  <!-- This test passes if a partially scrolled scrollbar appears -->
+  <div id="overflow">
+    <img id="content">
+  </div>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (120660 => 120661)


--- trunk/Source/WebCore/ChangeLog	2012-06-19 02:54:19 UTC (rev 120660)
+++ trunk/Source/WebCore/ChangeLog	2012-06-19 03:04:50 UTC (rev 120661)
@@ -1,3 +1,21 @@
+2012-06-18  Adrienne Walker  <e...@google.com>
+
+        RenderLayerBacking sometimes doesn't attach scrollbars to graphics layer tree
+        https://bugs.webkit.org/show_bug.cgi?id=89402
+
+        Reviewed by James Robinson.
+
+        RenderLayerBacking only attaches scrollbar layers to the graphics
+        layer tree if there's a clip layer. This is wrong, because these
+        scrollbars become orphans and other code expects them to handle
+        repainting the scrollbars (which now become invisible). Fix by always
+        attaching scrollbar layers.
+
+        Test: compositing/overflow/image-load-overflow-scrollbars.html
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateInternalHierarchy):
+
 2012-06-18  Amy Ousterhout  <aoust...@chromium.org>
 
         [Chromium] DeviceOrientation Cleanup

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (120660 => 120661)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2012-06-19 02:54:19 UTC (rev 120660)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2012-06-19 03:04:50 UTC (rev 120661)
@@ -610,23 +610,23 @@
     if (m_clippingLayer) {
         m_clippingLayer->removeFromParent();
         m_graphicsLayer->addChild(m_clippingLayer.get());
+    }
 
-        // The clip for child layers does not include space for overflow controls, so they exist as
-        // siblings of the clipping layer if we have one. Normal children of this layer are set as
-        // children of the clipping layer.
-        if (m_layerForHorizontalScrollbar) {
-            m_layerForHorizontalScrollbar->removeFromParent();
-            m_graphicsLayer->addChild(m_layerForHorizontalScrollbar.get());
-        }
-        if (m_layerForVerticalScrollbar) {
-            m_layerForVerticalScrollbar->removeFromParent();
-            m_graphicsLayer->addChild(m_layerForVerticalScrollbar.get());
-        }
-        if (m_layerForScrollCorner) {
-            m_layerForScrollCorner->removeFromParent();
-            m_graphicsLayer->addChild(m_layerForScrollCorner.get());
-        }
+    // The clip for child layers does not include space for overflow controls, so they exist as
+    // siblings of the clipping layer if we have one. Normal children of this layer are set as
+    // children of the clipping layer.
+    if (m_layerForHorizontalScrollbar) {
+        m_layerForHorizontalScrollbar->removeFromParent();
+        m_graphicsLayer->addChild(m_layerForHorizontalScrollbar.get());
     }
+    if (m_layerForVerticalScrollbar) {
+        m_layerForVerticalScrollbar->removeFromParent();
+        m_graphicsLayer->addChild(m_layerForVerticalScrollbar.get());
+    }
+    if (m_layerForScrollCorner) {
+        m_layerForScrollCorner->removeFromParent();
+        m_graphicsLayer->addChild(m_layerForScrollCorner.get());
+    }
 }
 
 void RenderLayerBacking::updateDrawsContent()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to