Title: [120661] trunk
Revision
120661
Author
[email protected]
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  <[email protected]>
+
+        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  <[email protected]>
 
         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  <[email protected]>
+
+        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  <[email protected]>
 
         [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
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to