Title: [109395] branches/chromium/963
Revision
109395
Author
[email protected]
Date
2012-03-01 12:36:09 -0800 (Thu, 01 Mar 2012)

Log Message

Merge 107627
BUG=113690
Review URL: https://chromiumcodereview.appspot.com/9566026

Modified Paths

Added Paths

Diff

Copied: branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash-expected.txt (from rev 107627, trunk/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash-expected.txt) (0 => 109395)


--- branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash-expected.txt	                        (rev 0)
+++ branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash-expected.txt	2012-03-01 20:36:09 UTC (rev 109395)
@@ -0,0 +1 @@
+PASS

Copied: branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash.html (from rev 107627, trunk/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash.html) (0 => 109395)


--- branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash.html	                        (rev 0)
+++ branches/chromium/963/LayoutTests/fast/multicol/span/split-flow-anonymous-wrapper-crash.html	2012-03-01 20:36:09 UTC (rev 109395)
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+Test passes if it does crash.
+<style>
+.b1 { display: block; -webkit-column-width: 100px; }
+.d1 { -webkit-column-span: all; }
+</style>
+<script>
+if (window.layoutTestController)
+    layoutTestController.dumpAsText();
+
+function runTest() {
+div1 = document.createElement('div');
+div1.setAttribute('class', 'd1');
+button1 = document.createElement('button');
+button1.setAttribute('class', 'b1');
+document.documentElement.appendChild(button1);
+document.documentElement.offsetTop;
+button1.appendChild(div1);
+document.documentElement.offsetTop;
+document.documentElement.innerHTML = "PASS";
+}
+window._onload_ = runTest;
+</script>
+</html>

Modified: branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp (109394 => 109395)


--- branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp	2012-03-01 20:35:38 UTC (rev 109394)
+++ branches/chromium/963/Source/WebCore/rendering/RenderBlock.cpp	2012-03-01 20:36:09 UTC (rev 109395)
@@ -423,14 +423,18 @@
 
 RenderBlock* RenderBlock::containingColumnsBlock(bool allowAnonymousColumnBlock)
 {
+    RenderBlock* firstChildIgnoringAnonymousWrappers = 0;
     for (RenderObject* curr = this; curr; curr = curr->parent()) {
         if (!curr->isRenderBlock() || curr->isFloatingOrPositioned() || curr->isTableCell() || curr->isRoot() || curr->isRenderView() || curr->hasOverflowClip()
             || curr->isInlineBlockOrInlineTable())
             return 0;
         
         RenderBlock* currBlock = toRenderBlock(curr);
+        if (!currBlock->createsAnonymousWrapper())
+            firstChildIgnoringAnonymousWrappers = currBlock;
+
         if (currBlock->style()->specifiesColumns() && (allowAnonymousColumnBlock || !currBlock->isAnonymousColumnsBlock()))
-            return currBlock;
+            return firstChildIgnoringAnonymousWrappers;
             
         if (currBlock->isAnonymousColumnSpanBlock())
             return 0;
@@ -667,22 +671,17 @@
     RenderBlock* columnsBlockAncestor = 0;
     if (!newChild->isText() && newChild->style()->columnSpan() && !newChild->isBeforeOrAfterContent()
         && !newChild->isFloatingOrPositioned() && !newChild->isInline() && !isAnonymousColumnSpanBlock()) {
-        if (style()->specifiesColumns())
-            columnsBlockAncestor = this;
-        else if (!isInline() && parent() && parent()->isRenderBlock()) {
-            columnsBlockAncestor = toRenderBlock(parent())->containingColumnsBlock(false);
-            
-            if (columnsBlockAncestor) {
-                // Make sure that none of the parent ancestors have a continuation.
-                // If yes, we do not want split the block into continuations.
-                RenderObject* curr = this;
-                while (curr && curr != columnsBlockAncestor) {
-                    if (curr->isRenderBlock() && toRenderBlock(curr)->continuation()) {
-                        columnsBlockAncestor = 0;
-                        break;
-                    }
-                    curr = curr->parent();
+        columnsBlockAncestor = containingColumnsBlock(false);
+        if (columnsBlockAncestor) {
+            // Make sure that none of the parent ancestors have a continuation.
+            // If yes, we do not want split the block into continuations.
+            RenderObject* curr = this;
+            while (curr && curr != columnsBlockAncestor) {
+                if (curr->isRenderBlock() && toRenderBlock(curr)->continuation()) {
+                    columnsBlockAncestor = 0;
+                    break;
                 }
+                curr = curr->parent();
             }
         }
     }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to