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