Title: [100677] trunk
- Revision
- 100677
- Author
- [email protected]
- Date
- 2011-11-17 14:34:27 -0800 (Thu, 17 Nov 2011)
Log Message
Crash from positioned generated content under run-in
https://bugs.webkit.org/show_bug.cgi?id=70456
Patch by Ken Buchanan <[email protected]> on 2011-11-17
Reviewed by David Hyatt.
Source/WebCore:
Modified handling of run-in children to clear generated children
before removing the parent from the render tree. This caused problems
with absolute positioned children being not properly removed from the
positioned object list of the RenderView.
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::handleRunInChild):
LayoutTests:
Layout test for crash condition.
* fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.html: Added
* fast/css-generated-content/positioned-generated-content-under-run-in-crash.html: Added
Modified Paths
Added Paths
Property Changed
Diff
Modified: trunk/LayoutTests/ChangeLog (100676 => 100677)
--- trunk/LayoutTests/ChangeLog 2011-11-17 22:32:49 UTC (rev 100676)
+++ trunk/LayoutTests/ChangeLog 2011-11-17 22:34:27 UTC (rev 100677)
@@ -1,3 +1,15 @@
+2011-11-17 Ken Buchanan <[email protected]>
+
+ Crash from positioned generated content under run-in
+ https://bugs.webkit.org/show_bug.cgi?id=70456
+
+ Reviewed by David Hyatt.
+
+ Layout test for crash condition.
+
+ * fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.html: Added
+ * fast/css-generated-content/positioned-generated-content-under-run-in-crash.html: Added
+
2011-11-17 Sheriff Bot <[email protected]>
Unreviewed, rolling out r100652.
Added: trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.txt (0 => 100677)
--- trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.txt 2011-11-17 22:34:27 UTC (rev 100677)
@@ -0,0 +1,2 @@
+PASS, if no exceptions or crash observed
+
Property changes on: trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash-expected.txt
___________________________________________________________________
Added: svn:executable
Added: trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash.html (0 => 100677)
--- trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash.html (rev 0)
+++ trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash.html 2011-11-17 22:34:27 UTC (rev 100677)
@@ -0,0 +1,22 @@
+<style>
+.testclass::before { position: absolute; content: ""; }
+.testclass { display: run-in; }
+</style>
+PASS, if no exceptions or crash observed
+<script>
+function runTest()
+{
+ test1 = document.createElement('div');
+ test1.setAttribute('class', 'testclass');
+ document.documentElement.appendChild(test1);
+ test2 = document.createElement('b');
+ test2.setAttribute('class', 'testclass');
+ document.documentElement.appendChild(test2);
+ test3 = document.createElement('div');
+ document.documentElement.appendChild(test3);
+ if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+}
+window._onload_ = runTest;
+</script>
+
Property changes on: trunk/LayoutTests/fast/css-generated-content/positioned-generated-content-under-run-in-crash.html
___________________________________________________________________
Added: svn:executable
Modified: trunk/Source/WebCore/ChangeLog (100676 => 100677)
--- trunk/Source/WebCore/ChangeLog 2011-11-17 22:32:49 UTC (rev 100676)
+++ trunk/Source/WebCore/ChangeLog 2011-11-17 22:34:27 UTC (rev 100677)
@@ -1,3 +1,18 @@
+2011-11-17 Ken Buchanan <[email protected]>
+
+ Crash from positioned generated content under run-in
+ https://bugs.webkit.org/show_bug.cgi?id=70456
+
+ Reviewed by David Hyatt.
+
+ Modified handling of run-in children to clear generated children
+ before removing the parent from the render tree. This caused problems
+ with absolute positioned children being not properly removed from the
+ positioned object list of the RenderView.
+
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::handleRunInChild):
+
2011-11-17 Peter Kasting <[email protected]>
Unreviewed, rolling out r100572.
Property changes on: trunk/Source/WebCore/ChangeLog
___________________________________________________________________
Added: svn:executable
Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (100676 => 100677)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2011-11-17 22:32:49 UTC (rev 100676)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2011-11-17 22:34:27 UTC (rev 100677)
@@ -1582,6 +1582,16 @@
RenderBlock* currBlock = toRenderBlock(curr);
+ // First we destroy any :before/:after content. It will be regenerated by the new inline.
+ // Exception is if the run-in itself is generated.
+ if (child->style()->styleType() != BEFORE && child->style()->styleType() != AFTER) {
+ RenderObject* generatedContent;
+ if (child->getCachedPseudoStyle(BEFORE) && (generatedContent = child->beforePseudoElementRenderer()))
+ generatedContent->destroy();
+ if (child->getCachedPseudoStyle(AFTER) && (generatedContent = child->afterPseudoElementRenderer()))
+ generatedContent->destroy();
+ }
+
// Remove the old child.
children()->removeChildNode(this, blockRunIn);
@@ -1590,16 +1600,11 @@
RenderInline* inlineRunIn = new (renderArena()) RenderInline(runInNode ? runInNode : document());
inlineRunIn->setStyle(blockRunIn->style());
- bool runInIsGenerated = child->style()->styleType() == BEFORE || child->style()->styleType() == AFTER;
-
- // Move the nodes from the old child to the new child, but skip any :before/:after content. It has already
- // been regenerated by the new inline.
+ // Move the nodes from the old child to the new child
for (RenderObject* runInChild = blockRunIn->firstChild(); runInChild;) {
RenderObject* nextSibling = runInChild->nextSibling();
- if (runInIsGenerated || (runInChild->style()->styleType() != BEFORE && runInChild->style()->styleType() != AFTER)) {
- blockRunIn->children()->removeChildNode(blockRunIn, runInChild, false);
- inlineRunIn->addChild(runInChild); // Use addChild instead of appendChildNode since it handles correct placement of the children relative to :after-generated content.
- }
+ blockRunIn->children()->removeChildNode(blockRunIn, runInChild, false);
+ inlineRunIn->addChild(runInChild); // Use addChild instead of appendChildNode since it handles correct placement of the children relative to :after-generated content.
runInChild = nextSibling;
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes