Reviewed by Hyatt.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Apr 2006 16:15:07 +0000 (16:15 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Apr 2006 16:15:07 +0000 (16:15 +0000)
        http://bugzilla.opendarwin.org/show_bug.cgi?id=7951
        REGRESSION: Safari crashes when printing a google map w/directions

        Tests: none, because I believe it only happens when printing, due to the relayouts

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::recalcSectionsIfNeeded): Add new utility to let the cells
        ensure the sections' grid data is up to date.
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::calcMinMaxWidth):  Call above method.

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

WebCore/ChangeLog
WebCore/rendering/RenderTable.cpp
WebCore/rendering/RenderTable.h
WebCore/rendering/RenderTableCell.cpp

index 1062fea..393ec4e 100644 (file)
@@ -1,3 +1,19 @@
+2006-04-04  Trey Matteson  <trey@usa.net>
+
+        Reviewed by Hyatt.
+
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=7951
+        REGRESSION: Safari crashes when printing a google map w/directions
+
+        Tests: none, because I believe it only happens when printing, due to the relayouts
+
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::recalcSectionsIfNeeded): Add new utility to let the cells
+        ensure the sections' grid data is up to date.
+        * rendering/RenderTable.h:
+        * rendering/RenderTableCell.cpp:
+        (WebCore::RenderTableCell::calcMinMaxWidth):  Call above method.
+
 2006-04-03  Justin Haygood <jhaygood@spsu.edu>
 
         Reviewed by eseidel.  Landed by eseidel.
index a0e47c0..bff5d07 100644 (file)
@@ -546,6 +546,12 @@ RenderTableCol *RenderTable::colElement(int col)
     return 0;
 }
 
+void RenderTable::recalcSectionsIfNeeded()
+{
+    if (needSectionRecalc)
+        recalcSections();
+}
+
 void RenderTable::recalcSections()
 {
     tCaption = 0;
index f1a7976..a18cad1 100644 (file)
@@ -160,6 +160,8 @@ public:
 
     virtual IntRect getOverflowClipRect(int tx, int ty);
 
+    void recalcSectionsIfNeeded();
+
 private:
     void recalcSections();
 
index 87d73cf..a3d4ec2 100644 (file)
@@ -85,6 +85,12 @@ Length RenderTableCell::styleOrColWidth()
 
 void RenderTableCell::calcMinMaxWidth()
 {
+    // recalcMinMaxWidths works depth first.  However, the child cells rely on the grids up in the
+    // sections to do their calcMinMaxWidths work.  Normally the sections are set up early, as table
+    // cells are added, but relayout can cause the cells to be freed, leaving stale ptrs in the sections'
+    // grids.  We must refresh those grids before the child cells try to use them.
+    table()->recalcSectionsIfNeeded();
+
     RenderBlock::calcMinMaxWidth();
     if (element() && style()->autoWrap()) {
         // See if nowrap was set.