Title: [179776] trunk
Revision
179776
Author
[email protected]
Date
2015-02-06 20:35:58 -0800 (Fri, 06 Feb 2015)

Log Message

ASSERT repaintContainer->hasLayer() in WebCore::RenderObject::repaintUsingContainer
https://bugs.webkit.org/show_bug.cgi?id=140750

Reviewed by Simon Fraser.

There's a short period of time when RenderObject::layer() still returns a valid pointer
even though we already cleared the hasLayer() flag.
Do not use the layer as repaint container in such cases.

Source/WebCore:

Test: compositing/repaint-container-assertion-when-toggling-compositing.html

* rendering/RenderObject.cpp:
(WebCore::RenderObject::enclosingLayer):

LayoutTests:

* compositing/repaint-container-assertion-when-toggling-compositing-expected.txt: Added.
* compositing/repaint-container-assertion-when-toggling-compositing.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (179775 => 179776)


--- trunk/LayoutTests/ChangeLog	2015-02-07 04:35:30 UTC (rev 179775)
+++ trunk/LayoutTests/ChangeLog	2015-02-07 04:35:58 UTC (rev 179776)
@@ -1,3 +1,17 @@
+2015-02-06  Zalan Bujtas  <[email protected]>
+
+        ASSERT repaintContainer->hasLayer() in WebCore::RenderObject::repaintUsingContainer
+        https://bugs.webkit.org/show_bug.cgi?id=140750
+
+        Reviewed by Simon Fraser.
+
+        There's a short period of time when RenderObject::layer() still returns a valid pointer
+        even though we already cleared the hasLayer() flag.
+        Do not use the layer as repaint container in such cases.
+
+        * compositing/repaint-container-assertion-when-toggling-compositing-expected.txt: Added.
+        * compositing/repaint-container-assertion-when-toggling-compositing.html: Added.
+
 2015-02-06  Said Abou-Hallawa  <[email protected]>
 
         Invalid cast in WebCore::SVGAnimateElement::calculateAnimatedValue.

Added: trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing-expected.txt (0 => 179776)


--- trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing-expected.txt	2015-02-07 04:35:58 UTC (rev 179776)
@@ -0,0 +1 @@
+PASS if no crash or assert in debug mode.

Added: trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing.html (0 => 179776)


--- trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/repaint-container-assertion-when-toggling-compositing.html	2015-02-07 04:35:58 UTC (rev 179776)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that we don't assert while finding the repaint container for the content that just lost compositing.</title>
+<script>
+  if (window.testRunner)
+    testRunner.dumpAsText();
+</script>
+</head>
+<body>
+<div style="-webkit-columns: 4;">PASS if no crash or assert in debug mode.</div>
+<script>
+  var head = document.getElementsByTagName("head")[0];
+  var div = document.getElementsByTagName("div")[0];
+  var style = document.createElement("style");
+  style.innerHTML="div {-webkit-animation-duration: 1s; -webkit-animation-timing-function: ease-in;}";
+  head.appendChild(style);
+  head.parentNode.removeChild(head);
+  document.execCommand("SelectAll");
+  div.setAttribute("style","color: red;");
+</script>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (179775 => 179776)


--- trunk/Source/WebCore/ChangeLog	2015-02-07 04:35:30 UTC (rev 179775)
+++ trunk/Source/WebCore/ChangeLog	2015-02-07 04:35:58 UTC (rev 179776)
@@ -1,3 +1,19 @@
+2015-02-06  Zalan Bujtas  <[email protected]>
+
+        ASSERT repaintContainer->hasLayer() in WebCore::RenderObject::repaintUsingContainer
+        https://bugs.webkit.org/show_bug.cgi?id=140750
+
+        Reviewed by Simon Fraser.
+
+        There's a short period of time when RenderObject::layer() still returns a valid pointer
+        even though we already cleared the hasLayer() flag.
+        Do not use the layer as repaint container in such cases.
+
+        Test: compositing/repaint-container-assertion-when-toggling-compositing.html
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::enclosingLayer):
+
 2015-02-06  Chris Dumez  <[email protected]>
 
         Have SQLiteStatement::database() return a reference

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (179775 => 179776)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2015-02-07 04:35:30 UTC (rev 179775)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2015-02-07 04:35:58 UTC (rev 179776)
@@ -474,7 +474,7 @@
 RenderLayer* RenderObject::enclosingLayer() const
 {
     for (auto& renderer : lineageOfType<RenderLayerModelObject>(*this)) {
-        if (renderer.layer())
+        if (renderer.hasLayer())
             return renderer.layer();
     }
     return nullptr;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to