2009-05-08 Beth Dakin <bdakin@apple.com>
authorbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2009 21:35:48 +0000 (21:35 +0000)
committerbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2009 21:35:48 +0000 (21:35 +0000)
        Reviewed by Dan Bernstein.

        <rdar://problem/6857446> REGRESSION (r37591): Cannot print or
        preview from maps.yandex.ru

        We need to fall into the stretchesToViewHeight() quirk when we are
        printing and we are the root and the root has percentage height OR
        when we are the body and the root has percentage height. Otherwise
        we have a height of 0 and can run into painting troubles.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):

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

WebCore/ChangeLog
WebCore/rendering/RenderBox.cpp

index 72aace5c4ab5f08ceba6ff440f63ef7801790d70..555118f02ffdc216789bef1366440d49cef3a4f5 100644 (file)
@@ -1,3 +1,18 @@
+2009-05-08  Beth Dakin  <bdakin@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        <rdar://problem/6857446> REGRESSION (r37591): Cannot print or 
+        preview from maps.yandex.ru
+
+        We need to fall into the stretchesToViewHeight() quirk when we are 
+        printing and we are the root and the root has percentage height OR 
+        when we are the body and the root has percentage height. Otherwise 
+        we have a height of 0 and can run into painting troubles.
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::calcHeight):
+
 2009-05-08  Douglas Davidson  <ddavidso@apple.com>
 
         Reviewed by Darin Adler.
index 9b68b622be9693eac411076165aa3c5ec529554e..00a5a799a4085ce6c01f6247eab913303c4d7431 100644 (file)
@@ -1406,6 +1406,7 @@ void RenderBox::calcHeight()
     if (isTableCell() || (isInline() && !isReplaced()))
         return;
 
+    Length h;
     if (isPositioned())
         calcAbsoluteVertical();
     else {
@@ -1415,7 +1416,6 @@ void RenderBox::calcHeight()
         if (isTable())
             return;
 
-        Length h;
         bool inHorizontalBox = parent()->isFlexibleBox() && parent()->style()->boxOrient() == HORIZONTAL;
         bool stretching = parent()->style()->boxAlign() == BSTRETCH;
         bool treatAsReplaced = shouldCalculateSizeAsReplaced() && (!inHorizontalBox || !stretching);
@@ -1464,8 +1464,12 @@ void RenderBox::calcHeight()
 
     // WinIE quirk: The <html> block always fills the entire canvas in quirks mode.  The <body> always fills the
     // <html> block in quirks mode.  Only apply this quirk if the block is normal flow and no height
-    // is specified.
-    if (stretchesToViewHeight()) {
+    // is specified. When we're printing, we also need this quirk if the body or root has a percentage 
+    // height since we don't set a height in RenderView when we're printing. So without this quirk, the 
+    // height has nothing to be a percentage of, and it ends up being 0. That is bad.
+    bool printingNeedsBaseHeight = document()->printing() && h.isPercent()
+        && (isRoot() || isBody() && document()->documentElement()->renderer()->style()->height().isPercent());
+    if (stretchesToViewHeight() || printingNeedsBaseHeight) {
         int margins = collapsedMarginTop() + collapsedMarginBottom();
         int visHeight = document()->printing() ? view()->frameView()->visibleHeight() : view()->viewHeight();
         if (isRoot())