2011-06-10 Emil A Eklund <eae@chromium.org>
authoreae@chromium.org <eae@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Jun 2011 19:44:39 +0000 (19:44 +0000)
committereae@chromium.org <eae@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 10 Jun 2011 19:44:39 +0000 (19:44 +0000)
        Reviewed by Eric Seidel.

        Regression r85573: Blank pages appear at the end of some wikipedia documents.
        https://bugs.webkit.org/show_bug.cgi?id=62343

        Fix regression caused by r85573. Cached document size not updated after layout.

        * platform/chromium-linux/printing/page-count-relayout-shrink-expected.txt: Added.
        * platform/mac/printing/page-count-relayout-shrink-expected.txt: Added.
        * printing/page-count-relayout-shrink.html: Added.
2011-06-10  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Regression r85573: Blank pages appear at the end of some wikipedia documents.
        https://bugs.webkit.org/show_bug.cgi?id=62343

        Fix regression caused by r85573. Cached document size not updated after layout.

        Test: printing/page-count-relayout-shrink.html

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):

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

LayoutTests/ChangeLog
LayoutTests/platform/chromium-linux/printing/page-count-relayout-shrink-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/printing/page-count-relayout-shrink-expected.txt [new file with mode: 0644]
LayoutTests/printing/page-count-relayout-shrink.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/page/FrameView.cpp

index 483a88f..f2b38a7 100644 (file)
@@ -1,3 +1,16 @@
+2011-06-10  Emil A Eklund  <eae@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        Regression r85573: Blank pages appear at the end of some wikipedia documents.
+        https://bugs.webkit.org/show_bug.cgi?id=62343
+
+        Fix regression caused by r85573. Cached document size not updated after layout.
+
+        * platform/chromium-linux/printing/page-count-relayout-shrink-expected.txt: Added.
+        * platform/mac/printing/page-count-relayout-shrink-expected.txt: Added.
+        * printing/page-count-relayout-shrink.html: Added.
+
 2011-06-10  Rob Buis  <rbuis@rim.com>
 
         Reviewed by Nikolas Zimmermann.
diff --git a/LayoutTests/platform/chromium-linux/printing/page-count-relayout-shrink-expected.txt b/LayoutTests/platform/chromium-linux/printing/page-count-relayout-shrink-expected.txt
new file mode 100644 (file)
index 0000000..bc158e0
--- /dev/null
@@ -0,0 +1 @@
+Document has 36 pages.
diff --git a/LayoutTests/platform/mac/printing/page-count-relayout-shrink-expected.txt b/LayoutTests/platform/mac/printing/page-count-relayout-shrink-expected.txt
new file mode 100644 (file)
index 0000000..d2b030b
--- /dev/null
@@ -0,0 +1 @@
+Document has 31 pages.
diff --git a/LayoutTests/printing/page-count-relayout-shrink.html b/LayoutTests/printing/page-count-relayout-shrink.html
new file mode 100644 (file)
index 0000000..0327cf9
--- /dev/null
@@ -0,0 +1,42 @@
+<html>
+<head>
+<style type="text/css">
+    div {
+        white-space: pre;
+    }
+</style>
+<script type="text/javascript">
+
+function runTest()
+{
+    if (!window.layoutTestController)
+        return;
+
+    var block = document.getElementById('test');
+    for (var i = 0; i < 100; i++)
+        document.body.appendChild(block.cloneNode(true));
+
+    layoutTestController.dumpAsText();
+    var pages = layoutTestController.numberOfPages();
+    document.body.textContent = 'Document has ' + pages + ' pages.';
+}
+
+</script>
+<head>
+<body onload="runTest()">
+    This test verifies that the page count is correctly updated when the document is scaled to fit.
+    <div id="test" style="clear: both;">
+        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus scelerisque volutpat.
+        Suspendisse potenti. Donec tristique ligula ut nisl fermentum ac venenatis libero tempus.
+        Aenean laoreet tristique ultrices. In hendrerit varius velit, a hendrerit diam gravida eu.
+        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut iaculis imperdiet nulla ac imperdiet.
+        Nunc rhoncus feugiat libero, et porttitor metus molestie at.
+        Aenean faucibus urna ac arcu viverra tristique.
+        Aliquam sodales, urna eget tempor convallis, arcu arcu imperdiet massa, nec gravida purus metus et dui.
+        Quisque dignissim nibh placerat mi viverra dignissim. Sed hendrerit, lectus nec auctor imperdiet, velit dolor aliquam magna, vel euismod mi odio vel velit.
+        Nunc dui sem, dignissim et iaculis a, imperdiet sit amet nibh. Curabitur at quam nibh, at tristique nibh. Suspendisse tincidunt nibh augue.
+        Donec tortor libero, pulvinar dapibus volutpat eu, luctus vel lectus.
+        Aenean tincidunt interdum arcu sed mollis. Morbi tellus felis, tincidunt in venenatis eu, ultricies in felis.
+    </div>
+</body>
+</html>
index 79920b5..e1964de 100644 (file)
@@ -1,3 +1,17 @@
+2011-06-10  Emil A Eklund  <eae@chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        Regression r85573: Blank pages appear at the end of some wikipedia documents.
+        https://bugs.webkit.org/show_bug.cgi?id=62343
+
+        Fix regression caused by r85573. Cached document size not updated after layout.
+
+        Test: printing/page-count-relayout-shrink.html
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::forceLayoutForPagination):
+
 2011-06-10  Rob Buis  <rbuis@rim.com>
 
         Reviewed by Nikolas Zimmermann.
index 3ad60b2..266915a 100644 (file)
@@ -2604,9 +2604,8 @@ void FrameView::forceLayoutForPagination(const FloatSize& pageSize, float maximu
         // page width when shrunk, we will lay out at maximum shrink and clip extra content.
         // FIXME: We are assuming a shrink-to-fit printing implementation.  A cropping
         // implementation should not do this!
-        const IntRect& documentRect = root->documentRect();
         bool horizontalWritingMode = root->style()->isHorizontalWritingMode();
-        int docLogicalWidth = horizontalWritingMode ? documentRect.width() : documentRect.height();
+        int docLogicalWidth = horizontalWritingMode ? root->documentRect().width() : root->documentRect().height();
         if (docLogicalWidth > pageLogicalWidth) {
             flooredPageLogicalWidth = std::min<int>(docLogicalWidth, pageLogicalWidth * maximumShrinkFactor);
             if (pageLogicalHeight)
@@ -2614,6 +2613,7 @@ void FrameView::forceLayoutForPagination(const FloatSize& pageSize, float maximu
             root->setLogicalWidth(flooredPageLogicalWidth);
             root->setNeedsLayoutAndPrefWidthsRecalc();
             forceLayout();
+            const IntRect& documentRect = root->documentRect();
             int docLogicalHeight = horizontalWritingMode ? documentRect.height() : documentRect.width();
             int docLogicalTop = horizontalWritingMode ? documentRect.y() : documentRect.x();
             int docLogicalRight = horizontalWritingMode ? documentRect.maxX() : documentRect.maxY();