[New multicolumn] Spin in RenderMultiColumnSet::repaintFlowThreadContent()
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 May 2014 02:33:08 +0000 (02:33 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 May 2014 02:33:08 +0000 (02:33 +0000)
https://bugs.webkit.org/show_bug.cgi?id=132884

Reviewed by Beth Dakin.

On iOS, wikipedia pages can hang under RenderMultiColumnSet::repaintFlowThreadContent().
It appears that computedColumnHeight is set to 0 in prepareForLayout, but layout never happens
on the RenderMultiColumnSet in some cases, leaving the column height set to zero.
This caused columnIndexAtOffset() to return bad values, which resulted in very long loops
in repaintFlowThreadContent().

This fix is a stop-gap.

* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::columnIndexAtOffset):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@168882 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderMultiColumnSet.cpp

index 35f13ac..c3b4c31 100644 (file)
@@ -1,3 +1,21 @@
+2014-05-14  Simon Fraser  <simon.fraser@apple.com>
+
+        [New multicolumn] Spin in RenderMultiColumnSet::repaintFlowThreadContent()
+        https://bugs.webkit.org/show_bug.cgi?id=132884
+
+        Reviewed by Beth Dakin.
+
+        On iOS, wikipedia pages can hang under RenderMultiColumnSet::repaintFlowThreadContent().
+        It appears that computedColumnHeight is set to 0 in prepareForLayout, but layout never happens
+        on the RenderMultiColumnSet in some cases, leaving the column height set to zero.
+        This caused columnIndexAtOffset() to return bad values, which resulted in very long loops
+        in repaintFlowThreadContent().
+        
+        This fix is a stop-gap.
+
+        * rendering/RenderMultiColumnSet.cpp:
+        (WebCore::RenderMultiColumnSet::columnIndexAtOffset):
+
 2014-05-14  Benjamin Poulain  <bpoulain@apple.com>
 
         Remove FrameView::viewportConstrainedExtentRect, it is unused
index 802c640..41fe975 100644 (file)
@@ -488,6 +488,10 @@ unsigned RenderMultiColumnSet::columnIndexAtOffset(LayoutUnit offset, ColumnInde
             return columnCount() - 1;
     }
 
+    // Sometimes computedColumnHeight() is 0 here: see https://bugs.webkit.org/show_bug.cgi?id=132884
+    if (!computedColumnHeight())
+        return 0;
+
     // Just divide by the column height to determine the correct column.
     return static_cast<float>(offset - flowThreadLogicalTop) / computedColumnHeight();
 }