https://bugs.webkit.org/show_bug.cgi?id=94401
authorbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Aug 2012 20:20:14 +0000 (20:20 +0000)
committerbdakin@apple.com <bdakin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Aug 2012 20:20:14 +0000 (20:20 +0000)
Add support for making a web site become paginated using overflow:
paged-x | paged-y
-and corresponding-
<rdar://problem/11831783>

Reviewed by Dave Hyatt.

.:

* Source/autotools/symbols.filter:

Source/WebCore:

This patch adds two new possible values for overflow-y. They are -
webkit-paged-x and -webkit-paged-y. When you set these as overflow-y
values on the html or body element, they make the RenderView
paginated, much like the API on Page.

-webkit-paged-x and -webkit-paged-y are only valid values for
overflow-y, NOT overflow-x. overflow-x defaults to a value of auto
(for now) unless it has been set to something else.
* css/CSSParser.cpp:
(WebCore::isValidKeywordPropertyAndValue):
(WebCore::CSSParser::parseValue):

Two new CSS value keywords.
* css/CSSValueKeywords.in:

EOverflow has two new values for pagination.
* rendering/style/RenderStyleConstants.h:
* css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator EOverflow):

A bunch of existing code from StyleResolver::styleForDocument() is
moved into a helper function so that it can be called from two
places.
* css/StyleResolver.cpp:
(WebCore::StyleResolver::collectMatchingRulesForList):

Even though this pagination is very similar to Page::pagination(), it
is different in one critical way. Page::pagination() will apply to
all FrameViews, even those in the page cache. For this reason,
FrameView needs to keep its own Pagination value that just applies to
this FrameView.
* page/FrameView.cpp:
* page/FrameView.h:
(WebCore):
(FrameView):

Map RenderStyle values to a Pagination::Mode.
(WebCore::paginationModeForRenderStyle):
(WebCore):

Account for paged-x and paged-y here.
(WebCore::FrameView::applyOverflowToViewport):

As is explained in the header, FrameView::pagination() will return
m_pagination if it has been set. Otherwise, it will return
Page::pagination() since currently there are no callers that need to
distinguish between the two.
(WebCore::FrameView::pagination):
(WebCore::FrameView::setPagination):

Generally this means that everywhere in WebCore should ask FrameView
for the pagination(), not Page. These call sites all look to
FrameView now.
(WebCore::FrameView::paintContents):
* rendering/RenderView.cpp:
(WebCore::RenderView::requiresColumns):
(WebCore::RenderView::calcColumnWidth):
(WebCore::RenderView::paginationUnit):
(WebCore::RenderView::viewLogicalHeight):

Since we need to define Pagination in Page.h AND FrameView.h, it is
now in its own header, Pagination.h. And therefore it is no longer
WebCore::Page::Pagination, but rather it is just WebCore::Pagination.
* page/Page.h:
(Page):
* rendering/Pagination.h: Added.
(WebCore):
(WebCore::Pagination::Pagination):
(Pagination):
(WebCore::Pagination::operator==):
(WebCore::Pagination::operator!=):
* WebCore.exp.in:
* WebCore.xcodeproj/project.pbxproj:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.exp.in:
* WebCore.gypi:

Certain ColumnInfo values are set based on the RenderStyle. So if
those RenderStyle values change, the ColumnInfo needs to be updated.
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::updateColumnInfoFromStyle):
(WebCore):
* rendering/RenderBlock.h:
(RenderBlock):

Factor in paged-x and paged-y when determining if a RenderBlock
requires columns.
(WebCore::RenderBlock::requiresColumns):

RenderStyle::specifiesColumns() is an odd and probably broken
function. At the very least, it should be re-named, if not removed
entirely. It does not accurately assess if columns have been
specified. I had to add this code here because specifiesColumns()
returns false for paged-x and true for paged-y. We were hitting a
number of crashes with paged-y because of this, so I chose for the
time being to limit this check to non-root layers.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::shouldBeNormalFlowOnly):

It's just Pagination now, not Page::Pagination.
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::reset):
(WebCore::InternalSettings::setPagination):

Source/WebKit/mac:

WebCore::Page::Pagination is now just WebCore::Pagination.
* WebView/WebView.mm:
(-[WebView _setPaginationMode:]):
(-[WebView _paginationMode]):
(-[WebView _setPaginationBehavesLikeColumns:]):
(-[WebView _setPageLength:]):
(-[WebView _setGapBetweenPages:]):

Source/WebKit2:

WebCore::Page::Pagination is now just WebCore::Pagination.
* Shared/WebPageCreationParameters.h:
(WebPageCreationParameters):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPaginationMode):
(WKPageGetPaginationMode):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::setPaginationMode):
* UIProcess/WebPageProxy.h:
(WebPageProxy):
(WebKit::WebPageProxy::paginationMode):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setPaginationMode):
(WebKit::WebPage::setPaginationBehavesLikeColumns):
(WebKit::WebPage::setPageLength):
(WebKit::WebPage::setGapBetweenPages):
* WebProcess/WebPage/WebPage.h:
(WebPage):

LayoutTests:

Test the parsing of the two new values.
* fast/css/overflow-property-expected.txt:
* fast/css/overflow-property.html:

New tests.
* fast/overflow/paged-x-div.html: Added.
* fast/overflow/paged-x-on-root.html: Added.
* fast/overflow/paged-y-div.html: Added.
* fast/overflow/paged-y-on-root.html: Added.
* platform/mac/fast/overflow/paged-x-div-expected.png: Added.
* platform/mac/fast/overflow/paged-x-div-expected.txt: Added.
* platform/mac/fast/overflow/paged-x-on-root-expected.png: Added.
* platform/mac/fast/overflow/paged-x-on-root-expected.txt: Added.
* platform/mac/fast/overflow/paged-y-div-expected.png: Added.
* platform/mac/fast/overflow/paged-y-div-expected.txt: Added.
* platform/mac/fast/overflow/paged-y-on-root-expected.png: Added.
* platform/mac/fast/overflow/paged-y-on-root-expected.txt: Added.

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

48 files changed:
ChangeLog
LayoutTests/ChangeLog
LayoutTests/fast/css/overflow-property-expected.txt
LayoutTests/fast/css/overflow-property.html
LayoutTests/fast/overflow/paged-x-div.html [new file with mode: 0644]
LayoutTests/fast/overflow/paged-x-on-root.html [new file with mode: 0644]
LayoutTests/fast/overflow/paged-y-div.html [new file with mode: 0644]
LayoutTests/fast/overflow/paged-y-on-root.html [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/GNUmakefile.list.am
Source/WebCore/Target.pri
Source/WebCore/WebCore.exp.in
Source/WebCore/WebCore.gypi
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/css/CSSParser.cpp
Source/WebCore/css/CSSPrimitiveValueMappings.h
Source/WebCore/css/CSSValueKeywords.in
Source/WebCore/css/StyleResolver.cpp
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/FrameView.h
Source/WebCore/page/Page.h
Source/WebCore/rendering/Pagination.h [new file with mode: 0644]
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlock.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderView.cpp
Source/WebCore/rendering/style/RenderStyleConstants.h
Source/WebCore/testing/InternalSettings.cpp
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebPageCreationParameters.h
Source/WebKit2/UIProcess/API/C/WKPage.cpp
Source/WebKit2/UIProcess/WebPageProxy.cpp
Source/WebKit2/UIProcess/WebPageProxy.h
Source/WebKit2/WebProcess/WebPage/WebPage.cpp
Source/WebKit2/WebProcess/WebPage/WebPage.h
Source/WebKit2/win/WebKit2.def
Source/WebKit2/win/WebKit2CFLite.def
Source/autotools/symbols.filter

index 38d3bb2e413ff7a2ad79ac43cf8c7c2cca62e784..ce7844339c5831854bdc0be861b4a3d5549b648f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2012-08-22  Beth Dakin  <bdakin@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=94401
+        Add support for making a web site become paginated using overflow: 
+        paged-x | paged-y
+        -and corresponding-
+        <rdar://problem/11831783> 
+
+        Reviewed by Dave Hyatt.
+
+        * Source/autotools/symbols.filter:
+
 2012-08-22  Gustavo Noronha Silva  <gns@gnome.org>
 
         [GTK] Split WebCore/platform into a separate library
index 73addce7c0bed0394117a8c918e68b2584ac87ac..43c073e31bab0e7e18a690d5b862b2cbcd0f4472 100644 (file)
@@ -1,3 +1,31 @@
+2012-08-22  Beth Dakin  <bdakin@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=94401
+        Add support for making a web site become paginated using overflow: 
+        paged-x | paged-y
+        -and corresponding-
+        <rdar://problem/11831783> 
+
+        Reviewed by Dave Hyatt.
+
+        Test the parsing of the two new values.
+        * fast/css/overflow-property-expected.txt:
+        * fast/css/overflow-property.html:
+
+        New tests.
+        * fast/overflow/paged-x-div.html: Added.
+        * fast/overflow/paged-x-on-root.html: Added.
+        * fast/overflow/paged-y-div.html: Added.
+        * fast/overflow/paged-y-on-root.html: Added.
+        * platform/mac/fast/overflow/paged-x-div-expected.png: Added.
+        * platform/mac/fast/overflow/paged-x-div-expected.txt: Added.
+        * platform/mac/fast/overflow/paged-x-on-root-expected.png: Added.
+        * platform/mac/fast/overflow/paged-x-on-root-expected.txt: Added.
+        * platform/mac/fast/overflow/paged-y-div-expected.png: Added.
+        * platform/mac/fast/overflow/paged-y-div-expected.txt: Added.
+        * platform/mac/fast/overflow/paged-y-on-root-expected.png: Added.
+        * platform/mac/fast/overflow/paged-y-on-root-expected.txt: Added.
+
 2012-08-22  Mark Lam  <mark.lam@apple.com>
 
         Skipping css3/flexbox/flexitem.html.
index 4e814561918e288f43f5008d3e1fcf6175dc6b45..77099d8a4551299763f27d1f65ca934d6638febb 100644 (file)
@@ -26,6 +26,12 @@ PASS test6.style.overflowY is ""
 PASS test7.style.overflow is ""
 PASS test7.style.overflowX is ""
 PASS test7.style.overflowY is ""
+PASS test8.style.overflowX is ""
+PASS test8.style.overflowY is "-webkit-paged-x"
+PASS test9.style.overflowX is "auto"
+PASS test9.style.overflowY is "-webkit-paged-y"
+PASS test10.style.overflowX is "visible"
+PASS test10.style.overflowY is "-webkit-paged-y"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2d8da08b2ccec1caa59d14453071d00e53b7f19c..13da95587ee53ffd9b280ed8a7e4ec37df8b5661 100644 (file)
@@ -17,6 +17,9 @@
 <div id="test5" style="overflow-y: auto"></div>
 <div id="test6" style="overflow: invalid"></div>
 <div id="test7"></div>
+<div id="test8" style="overflow-y: -webkit-paged-x;"></div>
+<div id="test9" style="overflow: -webkit-paged-y;"></div>
+<div id="test10" style="overflow-x: visible; overflow-y: -webkit-paged-y;"></div>
 
 </div>
 
@@ -29,6 +32,9 @@
     var test5 = document.getElementById("test5");
     var test6 = document.getElementById("test6");
     var test7 = document.getElementById("test6");
+    var test8 = document.getElementById("test8");
+    var test9 = document.getElementById("test9");
+    var test10 = document.getElementById("test10");
 
     shouldBeEqualToString("test0.style.overflow", "auto");
     shouldBeEqualToString("test0.style.overflowX", "auto");
     shouldBeEqualToString("test7.style.overflow", "");
     shouldBeEqualToString("test7.style.overflowX", "");
     shouldBeEqualToString("test7.style.overflowY", "");
+    shouldBeEqualToString("test8.style.overflowX", "");
+    shouldBeEqualToString("test8.style.overflowY", "-webkit-paged-x");
+    shouldBeEqualToString("test9.style.overflowX", "auto");
+    shouldBeEqualToString("test9.style.overflowY", "-webkit-paged-y");
+    shouldBeEqualToString("test10.style.overflowX", "visible");
+    shouldBeEqualToString("test10.style.overflowY", "-webkit-paged-y");
 
     // clean up after ourselves
     var tests_container = document.getElementById("tests_container");
diff --git a/LayoutTests/fast/overflow/paged-x-div.html b/LayoutTests/fast/overflow/paged-x-div.html
new file mode 100644 (file)
index 0000000..3a3dd0b
--- /dev/null
@@ -0,0 +1,9 @@
+<html>
+<body>
+
+<div style="width:400px; height:400px; border: 2px solid black; overflow-y: -webkit-paged-x;">
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis.
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/overflow/paged-x-on-root.html b/LayoutTests/fast/overflow/paged-x-on-root.html
new file mode 100644 (file)
index 0000000..e515c94
--- /dev/null
@@ -0,0 +1,7 @@
+<html>
+<body style="overflow-y: -webkit-paged-x;">
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis.
+
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/overflow/paged-y-div.html b/LayoutTests/fast/overflow/paged-y-div.html
new file mode 100644 (file)
index 0000000..85f5044
--- /dev/null
@@ -0,0 +1,9 @@
+<html>
+<body>
+
+<div style="width:400px; height:400px; border: 2px solid black; overflow-y: -webkit-paged-y;">
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis.
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/overflow/paged-y-on-root.html b/LayoutTests/fast/overflow/paged-y-on-root.html
new file mode 100644 (file)
index 0000000..55e5c0e
--- /dev/null
@@ -0,0 +1,7 @@
+<html>
+<body style="overflow-y: -webkit-paged-y">
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis.
+
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.png b/LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.png
new file mode 100644 (file)
index 0000000..dca1aca
Binary files /dev/null and b/LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.txt b/LayoutTests/platform/mac/fast/overflow/paged-x-div-expected.txt
new file mode 100644 (file)
index 0000000..4ad2ce2
--- /dev/null
@@ -0,0 +1,128 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 404x404 clip at (10,10) size 400x385 scrollWidth 2480
+  RenderBlock {DIV} at (0,0) size 404x404 [border: (2px solid #000000)]
+    RenderText {#text} at (2,2) size 399x2195
+      text run at (2,2) width 347: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+      text run at (2,20) width 388: "Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+      text run at (2,38) width 398: "viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+      text run at (2,56) width 366: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+      text run at (2,74) width 360: "pretium lorem a quam imperdiet in placerat purus sagittis."
+      text run at (2,92) width 370: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+      text run at (2,110) width 378: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+      text run at (2,128) width 372: "justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+      text run at (2,146) width 352: "libero dolor et massa. Phasellus eros quam, faucibus sed"
+      text run at (2,164) width 378: "consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+      text run at (2,182) width 355: "fermentum vulputate, quam metus ullamcorper quam, eu"
+      text run at (2,200) width 362: "porttitor diam metus eget augue. Donec non lorem et arcu"
+      text run at (2,218) width 391: "adipiscing suscipit. Donec porta euismod magna a fermentum."
+      text run at (2,236) width 382: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget"
+      text run at (2,254) width 397: "nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum"
+      text run at (2,272) width 371: "dolor sit amet, consectetur adipiscing elit. Maecenas lacinia"
+      text run at (2,290) width 382: "massa in lectus pretium vulputate. Curabitur viverra augue in"
+      text run at (2,308) width 389: "leo faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,326) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,344) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,362) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,387) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,405) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,423) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,441) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,459) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,477) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,495) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,513) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,531) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,549) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,567) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,585) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,603) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,621) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,639) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,657) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,675) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,693) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,711) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,729) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,747) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,772) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,790) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,808) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,826) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,844) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,862) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,880) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,898) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,916) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,934) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,952) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,970) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,988) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1006) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1024) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1042) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1060) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1078) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1096) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1114) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1132) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1157) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1175) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1193) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1211) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1229) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1247) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1265) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1283) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1301) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1319) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1337) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1355) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1373) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1391) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1409) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1427) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1445) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1463) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1481) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1499) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1517) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1542) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1560) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1578) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1596) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1614) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1632) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1650) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1668) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1686) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1704) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1722) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1740) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1758) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1776) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1794) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1812) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1830) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1848) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1866) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1884) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1902) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1927) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1945) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1963) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1981) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1999) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,2017) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,2035) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,2053) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,2071) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,2089) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,2107) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,2125) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,2143) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,2161) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,2179) width 274: "vestibulum rutrum. Aenean eu libero turpis."
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.png b/LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.png
new file mode 100644 (file)
index 0000000..dc01e83
Binary files /dev/null and b/LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.txt b/LayoutTests/platform/mac/fast/overflow/paged-x-on-root-expected.txt
new file mode 100644 (file)
index 0000000..722b6e4
--- /dev/null
@@ -0,0 +1,65 @@
+layer at (0,0) size 1600x585
+  RenderView at (0,0) size 800x585
+layer at (0,0) size 800x1079 backgroundClip at (0,0) size 1600x585 clip at (0,0) size 1600x585 outlineClip at (0,0) size 1600x585
+  RenderBlock {HTML} at (0,0) size 800x1079
+    RenderBody {BODY} at (8,8) size 784x1063
+      RenderText {#text} at (0,0) size 777x1063
+        text run at (0,0) width 739: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+        text run at (0,18) width 768: "viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+        text run at (0,36) width 734: "pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+        text run at (0,54) width 754: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+        text run at (0,72) width 734: "libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+        text run at (0,90) width 721: "fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,108) width 777: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget"
+        text run at (0,126) width 772: "nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia"
+        text run at (0,144) width 775: "massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget"
+        text run at (0,162) width 768: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+        text run at (0,180) width 765: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies,"
+        text run at (0,198) width 763: "risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut"
+        text run at (0,216) width 760: "erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue."
+        text run at (0,234) width 759: "Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus"
+        text run at (0,252) width 743: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+        text run at (0,270) width 723: "adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue."
+        text run at (0,288) width 749: "Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+        text run at (0,306) width 752: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+        text run at (0,324) width 746: "eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros"
+        text run at (0,342) width 721: "quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus"
+        text run at (0,360) width 765: "ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod"
+        text run at (0,378) width 745: "magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu"
+        text run at (0,396) width 758: "libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate."
+        text run at (0,414) width 771: "Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi."
+        text run at (0,432) width 709: "Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet"
+        text run at (0,450) width 771: "pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula,"
+        text run at (0,468) width 775: "eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem"
+        text run at (0,486) width 749: "non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,504) width 777: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget"
+        text run at (0,522) width 772: "nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia"
+        text run at (0,540) width 775: "massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget"
+        text run at (0,558) width 768: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+        text run at (0,577) width 765: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies,"
+        text run at (0,595) width 763: "risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut"
+        text run at (0,613) width 760: "erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue."
+        text run at (0,631) width 759: "Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus"
+        text run at (0,649) width 743: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+        text run at (0,667) width 723: "adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue."
+        text run at (0,685) width 749: "Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+        text run at (0,703) width 752: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+        text run at (0,721) width 746: "eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros"
+        text run at (0,739) width 721: "quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus"
+        text run at (0,757) width 765: "ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod"
+        text run at (0,775) width 745: "magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu"
+        text run at (0,793) width 758: "libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate."
+        text run at (0,811) width 771: "Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi."
+        text run at (0,829) width 709: "Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet"
+        text run at (0,847) width 771: "pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula,"
+        text run at (0,865) width 775: "eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem"
+        text run at (0,883) width 749: "non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,901) width 777: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget"
+        text run at (0,919) width 772: "nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia"
+        text run at (0,937) width 775: "massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget"
+        text run at (0,955) width 768: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+        text run at (0,973) width 765: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies,"
+        text run at (0,991) width 763: "risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut"
+        text run at (0,1009) width 760: "erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue."
+        text run at (0,1027) width 759: "Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus"
+        text run at (0,1045) width 487: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis."
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.png b/LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.png
new file mode 100644 (file)
index 0000000..931cacc
Binary files /dev/null and b/LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.txt b/LayoutTests/platform/mac/fast/overflow/paged-y-div-expected.txt
new file mode 100644 (file)
index 0000000..e077670
--- /dev/null
@@ -0,0 +1,128 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 404x404 clip at (10,10) size 400x400 scrollHeight 2480
+  RenderBlock {DIV} at (0,0) size 404x404 [border: (2px solid #000000)]
+    RenderText {#text} at (2,2) size 399x2180
+      text run at (2,2) width 347: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+      text run at (2,20) width 388: "Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+      text run at (2,38) width 398: "viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+      text run at (2,56) width 366: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+      text run at (2,74) width 360: "pretium lorem a quam imperdiet in placerat purus sagittis."
+      text run at (2,92) width 370: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+      text run at (2,110) width 378: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+      text run at (2,128) width 372: "justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+      text run at (2,146) width 352: "libero dolor et massa. Phasellus eros quam, faucibus sed"
+      text run at (2,164) width 378: "consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+      text run at (2,182) width 355: "fermentum vulputate, quam metus ullamcorper quam, eu"
+      text run at (2,200) width 362: "porttitor diam metus eget augue. Donec non lorem et arcu"
+      text run at (2,218) width 391: "adipiscing suscipit. Donec porta euismod magna a fermentum."
+      text run at (2,236) width 382: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget"
+      text run at (2,254) width 397: "nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum"
+      text run at (2,272) width 371: "dolor sit amet, consectetur adipiscing elit. Maecenas lacinia"
+      text run at (2,290) width 382: "massa in lectus pretium vulputate. Curabitur viverra augue in"
+      text run at (2,308) width 389: "leo faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,326) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,344) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,362) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,380) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,402) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,420) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,438) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,456) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,474) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,492) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,510) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,528) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,546) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,564) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,582) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,600) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,618) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,636) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,654) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,672) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,690) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,708) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,726) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,744) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,762) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,780) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,802) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,820) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,838) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,856) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,874) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,892) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,910) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,928) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,946) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,964) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,982) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1000) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1018) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1036) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1054) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1072) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1090) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1108) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1126) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1144) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1162) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1180) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1202) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1220) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1238) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1256) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1274) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1292) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1310) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1328) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1346) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1364) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1382) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1400) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1418) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1436) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1454) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1472) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1490) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1508) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1526) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1544) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1562) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1580) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1602) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1620) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1638) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1656) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1674) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1692) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1710) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,1728) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,1746) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,1764) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,1782) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,1800) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,1818) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,1836) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,1854) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,1872) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,1890) width 399: "vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor"
+      text run at (2,1908) width 392: "sit amet, consectetur adipiscing elit. Maecenas lacinia massa in"
+      text run at (2,1926) width 347: "lectus pretium vulputate. Curabitur viverra augue in leo"
+      text run at (2,1944) width 366: "faucibus congue. Vestibulum ligula neque, commodo eget"
+      text run at (2,1962) width 372: "blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a"
+      text run at (2,1980) width 392: "quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh."
+      text run at (2,2002) width 360: "Cras faucibus imperdiet pellentesque. Curabitur vel tortor"
+      text run at (2,2020) width 344: "quam, ut pharetra eros. Mauris euismod, justo in mattis"
+      text run at (2,2038) width 373: "ultricies, risus velit pretium ligula, eu sodales libero dolor et"
+      text run at (2,2056) width 354: "massa. Phasellus eros quam, faucibus sed consectetur et,"
+      text run at (2,2074) width 356: "elementum ut erat. Morbi fringilla, lorem non fermentum"
+      text run at (2,2092) width 372: "vulputate, quam metus ullamcorper quam, eu porttitor diam"
+      text run at (2,2110) width 396: "metus eget augue. Donec non lorem et arcu adipiscing suscipit."
+      text run at (2,2128) width 349: "Donec porta euismod magna a fermentum. Suspendisse"
+      text run at (2,2146) width 336: "vestibulum rhoncus bibendum. Nam in nisi eget nulla"
+      text run at (2,2164) width 274: "vestibulum rutrum. Aenean eu libero turpis."
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.png b/LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.png
new file mode 100644 (file)
index 0000000..a5b1bbe
Binary files /dev/null and b/LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.txt b/LayoutTests/platform/mac/fast/overflow/paged-y-on-root-expected.txt
new file mode 100644 (file)
index 0000000..f78ab8d
--- /dev/null
@@ -0,0 +1,66 @@
+layer at (0,0) size 785x1200
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x1112
+  RenderBlock {HTML} at (0,0) size 785x1112
+    RenderBody {BODY} at (8,8) size 769x1096
+      RenderText {#text} at (0,0) size 768x1096
+        text run at (0,0) width 739: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+        text run at (0,18) width 768: "viverra augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+        text run at (0,36) width 734: "pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+        text run at (0,54) width 754: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+        text run at (0,72) width 734: "libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+        text run at (0,90) width 721: "fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,108) width 747: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi"
+        text run at (0,126) width 757: "eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas"
+        text run at (0,144) width 723: "lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+        text run at (0,162) width 730: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis."
+        text run at (0,180) width 752: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+        text run at (0,198) width 728: "justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed"
+        text run at (0,216) width 737: "consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu"
+        text run at (0,234) width 757: "porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum."
+        text run at (0,252) width 741: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem"
+        text run at (0,270) width 741: "ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra"
+        text run at (0,288) width 720: "augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+        text run at (0,306) width 734: "pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+        text run at (0,324) width 754: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+        text run at (0,342) width 734: "libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+        text run at (0,360) width 721: "fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,378) width 747: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi"
+        text run at (0,396) width 757: "eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas"
+        text run at (0,414) width 723: "lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+        text run at (0,432) width 730: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis."
+        text run at (0,450) width 752: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+        text run at (0,468) width 728: "justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed"
+        text run at (0,486) width 737: "consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu"
+        text run at (0,504) width 757: "porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum."
+        text run at (0,522) width 741: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem"
+        text run at (0,540) width 741: "ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra"
+        text run at (0,558) width 720: "augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+        text run at (0,592) width 734: "pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+        text run at (0,610) width 754: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+        text run at (0,628) width 734: "libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+        text run at (0,646) width 721: "fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,664) width 747: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi"
+        text run at (0,682) width 757: "eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas"
+        text run at (0,700) width 723: "lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+        text run at (0,718) width 730: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis."
+        text run at (0,736) width 752: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+        text run at (0,754) width 728: "justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed"
+        text run at (0,772) width 737: "consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu"
+        text run at (0,790) width 757: "porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum."
+        text run at (0,808) width 741: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem"
+        text run at (0,826) width 741: "ipsum dolor sit amet, consectetur adipiscing elit. Maecenas lacinia massa in lectus pretium vulputate. Curabitur viverra"
+        text run at (0,844) width 720: "augue in leo faucibus congue. Vestibulum ligula neque, commodo eget blandit sit amet, facilisis vitae mi. Vivamus"
+        text run at (0,862) width 734: "pretium lorem a quam imperdiet in placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque."
+        text run at (0,880) width 754: "Curabitur vel tortor quam, ut pharetra eros. Mauris euismod, justo in mattis ultricies, risus velit pretium ligula, eu sodales"
+        text run at (0,898) width 734: "libero dolor et massa. Phasellus eros quam, faucibus sed consectetur et, elementum ut erat. Morbi fringilla, lorem non"
+        text run at (0,916) width 721: "fermentum vulputate, quam metus ullamcorper quam, eu porttitor diam metus eget augue. Donec non lorem et arcu"
+        text run at (0,934) width 747: "adipiscing suscipit. Donec porta euismod magna a fermentum. Suspendisse vestibulum rhoncus bibendum. Nam in nisi"
+        text run at (0,952) width 757: "eget nulla vestibulum rutrum. Aenean eu libero turpis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas"
+        text run at (0,970) width 723: "lacinia massa in lectus pretium vulputate. Curabitur viverra augue in leo faucibus congue. Vestibulum ligula neque,"
+        text run at (0,988) width 730: "commodo eget blandit sit amet, facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in placerat purus sagittis."
+        text run at (0,1006) width 752: "Aliquam ut dui nibh. Cras faucibus imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra eros. Mauris euismod,"
+        text run at (0,1024) width 728: "justo in mattis ultricies, risus velit pretium ligula, eu sodales libero dolor et massa. Phasellus eros quam, faucibus sed"
+        text run at (0,1042) width 737: "consectetur et, elementum ut erat. Morbi fringilla, lorem non fermentum vulputate, quam metus ullamcorper quam, eu"
+        text run at (0,1060) width 757: "porttitor diam metus eget augue. Donec non lorem et arcu adipiscing suscipit. Donec porta euismod magna a fermentum."
+        text run at (0,1078) width 695: "Suspendisse vestibulum rhoncus bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean eu libero turpis."
index 1e53ebe4b97d43fc8cb42d2f7711fad474910303..22531850ae12a5148aaeac71f9e3a930ec834d70 100644 (file)
@@ -1,3 +1,119 @@
+2012-08-22  Beth Dakin  <bdakin@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=94401
+        Add support for making a web site become paginated using overflow: 
+        paged-x | paged-y
+        -and corresponding-
+        <rdar://problem/11831783> 
+
+        Reviewed by Dave Hyatt.
+
+        This patch adds two new possible values for overflow-y. They are -
+        webkit-paged-x and -webkit-paged-y. When you set these as overflow-y 
+        values on the html or body element, they make the RenderView 
+        paginated, much like the API on Page.
+
+        -webkit-paged-x and -webkit-paged-y are only valid values for 
+        overflow-y, NOT overflow-x. overflow-x defaults to a value of auto 
+        (for now) unless it has been set to something else.
+        * css/CSSParser.cpp:
+        (WebCore::isValidKeywordPropertyAndValue):
+        (WebCore::CSSParser::parseValue):
+
+        Two new CSS value keywords.
+        * css/CSSValueKeywords.in:
+
+        EOverflow has two new values for pagination. 
+        * rendering/style/RenderStyleConstants.h:
+        * css/CSSPrimitiveValueMappings.h:
+        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+        (WebCore::CSSPrimitiveValue::operator EOverflow):
+
+        A bunch of existing code from StyleResolver::styleForDocument() is 
+        moved into a helper function so that it can be called from two 
+        places. 
+        * css/StyleResolver.cpp:
+        (WebCore::StyleResolver::collectMatchingRulesForList):
+
+        Even though this pagination is very similar to Page::pagination(), it 
+        is different in one critical way. Page::pagination() will apply to 
+        all FrameViews, even those in the page cache. For this reason, 
+        FrameView needs to keep its own Pagination value that just applies to 
+        this FrameView.
+        * page/FrameView.cpp:
+        * page/FrameView.h:
+        (WebCore):
+        (FrameView):
+
+        Map RenderStyle values to a Pagination::Mode.
+        (WebCore::paginationModeForRenderStyle):
+        (WebCore):
+
+        Account for paged-x and paged-y here.
+        (WebCore::FrameView::applyOverflowToViewport):
+
+        As is explained in the header, FrameView::pagination() will return 
+        m_pagination if it has been set. Otherwise, it will return 
+        Page::pagination() since currently there are no callers that need to 
+        distinguish between the two.
+        (WebCore::FrameView::pagination):
+        (WebCore::FrameView::setPagination):
+
+        Generally this means that everywhere in WebCore should ask FrameView 
+        for the pagination(), not Page. These call sites all look to 
+        FrameView now.
+        (WebCore::FrameView::paintContents):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::requiresColumns):
+        (WebCore::RenderView::calcColumnWidth):
+        (WebCore::RenderView::paginationUnit):
+        (WebCore::RenderView::viewLogicalHeight):
+
+        Since we need to define Pagination in Page.h AND FrameView.h, it is 
+        now in its own header, Pagination.h. And therefore it is no longer 
+        WebCore::Page::Pagination, but rather it is just WebCore::Pagination.
+        * page/Page.h:
+        (Page):
+        * rendering/Pagination.h: Added.
+        (WebCore):
+        (WebCore::Pagination::Pagination):
+        (Pagination):
+        (WebCore::Pagination::operator==):
+        (WebCore::Pagination::operator!=):
+        * WebCore.exp.in:
+        * WebCore.xcodeproj/project.pbxproj:
+        * GNUmakefile.list.am:
+        * Target.pri:
+        * WebCore.exp.in:
+        * WebCore.gypi:
+
+        Certain ColumnInfo values are set based on the RenderStyle. So if 
+        those RenderStyle values change, the ColumnInfo needs to be updated.
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::updateColumnInfoFromStyle):
+        (WebCore):
+        * rendering/RenderBlock.h:
+        (RenderBlock):
+
+        Factor in paged-x and paged-y when determining if a RenderBlock 
+        requires columns.
+        (WebCore::RenderBlock::requiresColumns):
+
+        RenderStyle::specifiesColumns() is an odd and probably broken 
+        function. At the very least, it should be re-named, if not removed 
+        entirely. It does not accurately assess if columns have been 
+        specified. I had to add this code here because specifiesColumns() 
+        returns false for paged-x and true for paged-y. We were hitting a 
+        number of crashes with paged-y because of this, so I chose for the 
+        time being to limit this check to non-root layers.
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
+
+        It's just Pagination now, not Page::Pagination.
+        * testing/InternalSettings.cpp:
+        (WebCore::InternalSettings::reset):
+        (WebCore::InternalSettings::setPagination):
+
 2012-08-22  Dean Jackson  <dino@apple.com>
 
         [WebGL] Mac/ATI/AMD systems need to translate built-in GLSL functions
index a8cb1f8dad5d86e5569008f9f649e82c918d6575..95d15eef1a5e561507cd41b4abb89855a5e0589c 100644 (file)
@@ -4108,6 +4108,7 @@ webcore_sources += \
        Source/WebCore/rendering/LayoutRepainter.h \
        Source/WebCore/rendering/LayoutRepainter.cpp \
        Source/WebCore/rendering/OverlapTestRequestClient.h \
+       Source/WebCore/rendering/Pagination.h \
        Source/WebCore/rendering/PaintInfo.h \
        Source/WebCore/rendering/PaintPhase.h \
        Source/WebCore/rendering/PointerEventsHitRules.cpp \
index b6d1d3da38af29fd2c8c9873b07d9c6c26f56c5c..cbbdf2860711e72c9c6fc731003e981ac04d2998 100644 (file)
@@ -2285,6 +2285,7 @@ HEADERS += \
     rendering/mathml/RenderMathMLSquareRoot.h \
     rendering/mathml/RenderMathMLSubSup.h \
     rendering/mathml/RenderMathMLUnderOver.h \
+    rendering/Pagination.h \
     rendering/PaintInfo.h \
     rendering/PaintPhase.h \
     rendering/PointerEventsHitRules.h \
index 16d04a380b14ef48b160bbdbcd3285c9dc05f5ad..ba62f4c93766050f069b3ce60afadac91f554afb 100644 (file)
@@ -662,7 +662,7 @@ __ZN7WebCore4Page11PageClientsC1Ev
 __ZN7WebCore4Page11PageClientsD1Ev
 __ZN7WebCore4Page12setGroupNameERKN3WTF6StringE
 __ZN7WebCore4Page13rangeOfStringERKN3WTF6StringEPNS_5RangeEj
-__ZN7WebCore4Page13setPaginationERKNS0_10PaginationE
+__ZN7WebCore4Page13setPaginationERKNS_10PaginationE
 __ZN7WebCore4Page14setMediaVolumeEf
 __ZN7WebCore4Page15addSchedulePairEN3WTF10PassRefPtrINS_12SchedulePairEEE
 __ZN7WebCore4Page15didMoveOnscreenEv
index 81e18737f50b2620f9da462546e7c87473ef143c..5dcaa0024d2660b78a475e2170a6f096bb716859 100644 (file)
             'rendering/LayoutTypes.h',
             'rendering/LayoutRepainter.h',
             'rendering/OverlapTestRequestClient.h',
+            'rendering/Pagination.h',
             'rendering/PaintInfo.h',
             'rendering/PaintPhase.h',
             'rendering/RenderBR.h',
index e16e6b86af21b10670211012f8c6d8099a265727..c6eddd1c5340eba094238da54ad8ea715c5768a9 100644 (file)
                9363B62C0F8E8FE000803810 /* HistoryPropertyList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9363B62A0F8E8FE000803810 /* HistoryPropertyList.cpp */; };
                9363B62D0F8E8FE000803810 /* HistoryPropertyList.h in Headers */ = {isa = PBXBuildFile; fileRef = 9363B62B0F8E8FE000803810 /* HistoryPropertyList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                9370918D1416D86B00477333 /* textAreaResizeCorner@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9370918C1416D86B00477333 /* textAreaResizeCorner@2x.png */; };
+               9377ABA015DEFEEF0031FD04 /* Pagination.h in Headers */ = {isa = PBXBuildFile; fileRef = 9377AB9F15DEFEEF0031FD04 /* Pagination.h */; settings = {ATTRIBUTES = (Private, ); }; };
                93799EF80BF2743600D0F230 /* RenderWordBreak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93799EF60BF2743600D0F230 /* RenderWordBreak.cpp */; };
                93799EF90BF2743600D0F230 /* RenderWordBreak.h in Headers */ = {isa = PBXBuildFile; fileRef = 93799EF70BF2743600D0F230 /* RenderWordBreak.h */; };
                9380F47309A11AB4001FDB34 /* Widget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9380F47109A11AB4001FDB34 /* Widget.cpp */; };
                9363B62B0F8E8FE000803810 /* HistoryPropertyList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HistoryPropertyList.h; sourceTree = "<group>"; };
                936DD03A09CEAC270056AE8C /* Range.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Range.idl; sourceTree = "<group>"; };
                9370918C1416D86B00477333 /* textAreaResizeCorner@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "textAreaResizeCorner@2x.png"; sourceTree = "<group>"; };
+               9377AB9F15DEFEEF0031FD04 /* Pagination.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pagination.h; sourceTree = "<group>"; };
                93799EF60BF2743600D0F230 /* RenderWordBreak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderWordBreak.cpp; sourceTree = "<group>"; };
                93799EF70BF2743600D0F230 /* RenderWordBreak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderWordBreak.h; sourceTree = "<group>"; };
                9380F47109A11AB4001FDB34 /* Widget.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Widget.cpp; sourceTree = "<group>"; };
                                2D9066050BE141D400956998 /* LayoutState.h */,
                                BACF290013B2A0D500781F90 /* LayoutTypes.h */,
                                3774ABA30FA21EB400AD7DE9 /* OverlapTestRequestClient.h */,
+                               9377AB9F15DEFEEF0031FD04 /* Pagination.h */,
                                0885067D11DA045B00182B98 /* PaintInfo.h */,
                                0885067E11DA045B00182B98 /* PaintPhase.h */,
                                B2B1F7140D00CAA8004AEA64 /* PointerEventsHitRules.cpp */,
                                E1BE512E0CF6C512002EA959 /* XSLTUnicodeSort.h in Headers */,
                                977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */,
                                FD537353137B651800008DCE /* ZeroPole.h in Headers */,
+                               9377ABA015DEFEEF0031FD04 /* Pagination.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
index ec0f1c204a28f814c17881189b25c1552f6e4751..18c4c0352aefbaa211849b60612c7eddc036c922 100644 (file)
@@ -596,11 +596,14 @@ static inline bool isValidKeywordPropertyAndValue(CSSPropertyID propertyId, int
         if (valueID == CSSValueAuto || valueID == CSSValueNone || (valueID >= CSSValueInset && valueID <= CSSValueDouble))
             return true;
         break;
-    case CSSPropertyOverflowX:
-    case CSSPropertyOverflowY: // visible | hidden | scroll | auto | marquee | overlay | inherit
+    case CSSPropertyOverflowX: // visible | hidden | scroll | auto | marquee | overlay | inherit
         if (valueID == CSSValueVisible || valueID == CSSValueHidden || valueID == CSSValueScroll || valueID == CSSValueAuto || valueID == CSSValueOverlay || valueID == CSSValueWebkitMarquee)
             return true;
         break;
+    case CSSPropertyOverflowY: // visible | hidden | scroll | auto | marquee | overlay | inherit | -webkit-paged-x | -webkit-paged-y
+        if (valueID == CSSValueVisible || valueID == CSSValueHidden || valueID == CSSValueScroll || valueID == CSSValueAuto || valueID == CSSValueOverlay || valueID == CSSValueWebkitMarquee || valueID == CSSValueWebkitPagedX || valueID == CSSValueWebkitPagedY)
+            return true;
+        break;
     case CSSPropertyPageBreakAfter: // auto | always | avoid | left | right | inherit
     case CSSPropertyPageBreakBefore:
     case CSSPropertyWebkitColumnBreakAfter:
@@ -1758,10 +1761,20 @@ bool CSSParser::parseValue(CSSPropertyID propId, bool important)
      */
     case CSSPropertyOverflow: {
         ShorthandScope scope(this, propId);
-        if (num != 1 || !parseValue(CSSPropertyOverflowX, important))
+        if (num != 1 || !parseValue(CSSPropertyOverflowY, important))
             return false;
-        CSSValue* value = m_parsedProperties->last().value();
-        addProperty(CSSPropertyOverflowY, value, important);
+
+        RefPtr<CSSValue> overflowXValue;
+
+        // FIXME: -webkit-paged-x or -webkit-paged-y only apply to overflow-y. If this value has been
+        // set using the shorthand, then for now overflow-x will default to auto, but once we implement
+        // pagination controls, it should default to hidden. If the overflow-y value is anything but
+        // paged-x or paged-y, then overflow-x and overflow-y should have the same value.
+        if (id == CSSValueWebkitPagedX || id == CSSValueWebkitPagedY)
+            overflowXValue = cssValuePool().createIdentifierValue(CSSValueAuto);
+        else
+            overflowXValue = m_parsedProperties->last().value();
+        addProperty(CSSPropertyOverflowX, overflowXValue.release(), important);
         return true;
     }
 
index 14cef2595de0ada84c9e20155375dac095125faa..c39a9c021815b34ccaa2eba59cd286e5355b653a 100644 (file)
@@ -1960,6 +1960,12 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflow e)
         case OOVERLAY:
             m_value.ident = CSSValueOverlay;
             break;
+        case OPAGEDX:
+            m_value.ident = CSSValueWebkitPagedX;
+            break;
+        case OPAGEDY:
+            m_value.ident = CSSValueWebkitPagedY;
+            break;
     }
 }
 
@@ -1978,6 +1984,10 @@ template<> inline CSSPrimitiveValue::operator EOverflow() const
             return OMARQUEE;
         case CSSValueOverlay:
             return OOVERLAY;
+        case CSSValueWebkitPagedX:
+            return OPAGEDX;
+        case CSSValueWebkitPagedY:
+            return OPAGEDY;
     }
 
     ASSERT_NOT_REACHED();
index 853c77fc9d7152ab28e74e6d6c4f99efcde1351a..8205cff46da20f5914e325a55db0dbedfa228a0e 100644 (file)
@@ -964,3 +964,7 @@ from-image
 snap
 #endif
 
+// overflow
+-webkit-paged-x
+-webkit-paged-y
+
index ea5950e54c89040a46f10c29d0082d9fb2af3d9c..6121f28f4f15217754a5dcda951a0c2cd89622ad 100644 (file)
@@ -96,6 +96,7 @@
 #include "RenderScrollbarTheme.h"
 #include "RenderStyleConstants.h"
 #include "RenderTheme.h"
+#include "RenderView.h"
 #include "RotateTransformOperation.h"
 #include "SVGDocumentExtensions.h"
 #include "SVGFontFaceElement.h"
@@ -1600,6 +1601,46 @@ void StyleResolver::matchUARules(MatchResult& result)
     }
 }
 
+static void setStylesForPaginationMode(Pagination::Mode paginationMode, RenderStyle* style)
+{
+    if (paginationMode == Pagination::Unpaginated)
+        return;
+        
+    switch (paginationMode) {
+    case Pagination::LeftToRightPaginated:
+        style->setColumnAxis(HorizontalColumnAxis);
+        if (style->isHorizontalWritingMode())
+            style->setColumnProgression(style->isLeftToRightDirection() ? NormalColumnProgression : ReverseColumnProgression);
+        else
+            style->setColumnProgression(style->isFlippedBlocksWritingMode() ? ReverseColumnProgression : NormalColumnProgression);
+        break;
+    case Pagination::RightToLeftPaginated:
+        style->setColumnAxis(HorizontalColumnAxis);
+        if (style->isHorizontalWritingMode())
+            style->setColumnProgression(style->isLeftToRightDirection() ? ReverseColumnProgression : NormalColumnProgression);
+        else
+            style->setColumnProgression(style->isFlippedBlocksWritingMode() ? NormalColumnProgression : ReverseColumnProgression);
+        break;
+    case Pagination::TopToBottomPaginated:
+        style->setColumnAxis(VerticalColumnAxis);
+        if (style->isHorizontalWritingMode())
+            style->setColumnProgression(style->isFlippedBlocksWritingMode() ? ReverseColumnProgression : NormalColumnProgression);
+        else
+            style->setColumnProgression(style->isLeftToRightDirection() ? NormalColumnProgression : ReverseColumnProgression);
+        break;
+    case Pagination::BottomToTopPaginated:
+        style->setColumnAxis(VerticalColumnAxis);
+        if (style->isHorizontalWritingMode())
+            style->setColumnProgression(style->isFlippedBlocksWritingMode() ? NormalColumnProgression : ReverseColumnProgression);
+        else
+            style->setColumnProgression(style->isLeftToRightDirection() ? ReverseColumnProgression : NormalColumnProgression);
+        break;
+    case Pagination::Unpaginated:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+}
+
 PassRefPtr<RenderStyle> StyleResolver::styleForDocument(Document* document, CSSFontSelector* fontSelector)
 {
     Frame* frame = document->frame();
@@ -1645,44 +1686,15 @@ PassRefPtr<RenderStyle> StyleResolver::styleForDocument(Document* document, CSSF
     }
 
     if (frame) {
-        if (Page* page = frame->page()) {
-            const Page::Pagination& pagination = page->pagination();
-            if (pagination.mode != Page::Pagination::Unpaginated) {
-                switch (pagination.mode) {
-                case Page::Pagination::LeftToRightPaginated:
-                    documentStyle->setColumnAxis(HorizontalColumnAxis);
-                    if (documentStyle->isHorizontalWritingMode())
-                        documentStyle->setColumnProgression(documentStyle->isLeftToRightDirection() ? NormalColumnProgression : ReverseColumnProgression);
-                    else
-                        documentStyle->setColumnProgression(documentStyle->isFlippedBlocksWritingMode() ? ReverseColumnProgression : NormalColumnProgression);
-                    break;
-                case Page::Pagination::RightToLeftPaginated:
-                    documentStyle->setColumnAxis(HorizontalColumnAxis);
-                    if (documentStyle->isHorizontalWritingMode())
-                        documentStyle->setColumnProgression(documentStyle->isLeftToRightDirection() ? ReverseColumnProgression : NormalColumnProgression);
-                    else
-                        documentStyle->setColumnProgression(documentStyle->isFlippedBlocksWritingMode() ? NormalColumnProgression : ReverseColumnProgression);
-                    break;
-                case Page::Pagination::TopToBottomPaginated:
-                    documentStyle->setColumnAxis(VerticalColumnAxis);
-                    if (documentStyle->isHorizontalWritingMode())
-                        documentStyle->setColumnProgression(documentStyle->isFlippedBlocksWritingMode() ? ReverseColumnProgression : NormalColumnProgression);
-                    else
-                        documentStyle->setColumnProgression(documentStyle->isLeftToRightDirection() ? NormalColumnProgression : ReverseColumnProgression);
-                    break;
-                case Page::Pagination::BottomToTopPaginated:
-                    documentStyle->setColumnAxis(VerticalColumnAxis);
-                    if (documentStyle->isHorizontalWritingMode())
-                        documentStyle->setColumnProgression(documentStyle->isFlippedBlocksWritingMode() ? NormalColumnProgression : ReverseColumnProgression);
-                    else
-                        documentStyle->setColumnProgression(documentStyle->isLeftToRightDirection() ? ReverseColumnProgression : NormalColumnProgression);
-                    break;
-                case Page::Pagination::Unpaginated:
-                    ASSERT_NOT_REACHED();
-                    break;
-                }
-
+        if (FrameView* frameView = frame->view()) {
+            const Pagination& pagination = frameView->pagination();
+            if (pagination.mode != Pagination::Unpaginated) {
+                setStylesForPaginationMode(pagination.mode, documentStyle.get());
                 documentStyle->setColumnGap(pagination.gap);
+                if (RenderView* view = document->renderView()) {
+                    if (view->hasColumns())
+                        view->updateColumnInfoFromStyle(documentStyle.get());
+                }
             }
         }
     }
@@ -2206,11 +2218,20 @@ void StyleResolver::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
         style->setOverflowY(OMARQUEE);
     else if (style->overflowY() == OMARQUEE && style->overflowX() != OMARQUEE)
         style->setOverflowX(OMARQUEE);
-    else if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE)
+    else if (style->overflowX() == OVISIBLE && style->overflowY() != OVISIBLE) {
+        // FIXME: Once we implement pagination controls, overflow-x should default to hidden
+        // if overflow-y is set to -webkit-paged-x or -webkit-page-y. For now, we'll let it
+        // default to auto so we can at least scroll through the pages.
         style->setOverflowX(OAUTO);
-    else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE)
+    else if (style->overflowY() == OVISIBLE && style->overflowX() != OVISIBLE)
         style->setOverflowY(OAUTO);
 
+    // Call setStylesForPaginationMode() if a pagination mode is set for any non-root elements. If these
+    // styles are specified on a root element, then they will be incorporated in
+    // StyleResolver::styleForDocument().
+    if ((style->overflowY() == OPAGEDX || style->overflowY() == OPAGEDY) && !(e->hasTagName(htmlTag) || e->hasTagName(bodyTag)))
+        setStylesForPaginationMode(WebCore::paginationModeForRenderStyle(style), style);
+
     // Table rows, sections and the table itself will support overflow:hidden and will ignore scroll/auto.
     // FIXME: Eventually table sections will support auto and scroll.
     if (style->display() == TABLE || style->display() == INLINE_TABLE
index 4482fe245cf73aaaa2b8c4227379a602404c2973..4c495fd5a5381c91c64442d21791c4c2d5faf6b2 100644 (file)
@@ -136,6 +136,33 @@ static RenderLayer::UpdateLayerPositionsFlags updateLayerPositionFlags(RenderLay
     return flags;
 }
 
+Pagination::Mode paginationModeForRenderStyle(RenderStyle* style)
+{
+    EOverflow overflow = style->overflowY();
+    if (overflow != OPAGEDX && overflow != OPAGEDY)
+        return Pagination::Unpaginated;
+
+    bool isHorizontalWritingMode = style->isHorizontalWritingMode();
+    TextDirection textDirection = style->direction();
+    WritingMode writingMode = style->writingMode();
+
+    // paged-x always corresponds to LeftToRightPaginated or RightToLeftPaginated. If the WritingMode
+    // is horizontal, then we use TextDirection to choose between those options. If the WritingMode
+    // is vertical, then the direction of the verticality dictates the choice.
+    if (overflow == OPAGEDX) {
+        if ((isHorizontalWritingMode && textDirection == LTR) || writingMode == LeftToRightWritingMode)
+            return Pagination::LeftToRightPaginated;
+        return Pagination::RightToLeftPaginated;
+    }
+
+    // paged-y always corresponds to TopToBottomPaginated or BottomToTopPaginated. If the WritingMode
+    // is horizontal, then the direction of the horizontality dictates the choice. If the WritingMode
+    // is vertical, then we use TextDirection to choose between those options. 
+    if (writingMode == TopToBottomWritingMode || (!isHorizontalWritingMode && textDirection == RTL))
+        return Pagination::TopToBottomPaginated;
+    return Pagination::BottomToTopPaginated;
+}
+
 FrameView::FrameView(Frame* frame)
     : m_frame(frame)
     , m_canHaveScrollbars(true)
@@ -582,6 +609,8 @@ void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, S
             // Don't set it at all.
             ;
     }
+
+    Pagination pagination;
     
      switch (overflowY) {
         case OHIDDEN:
@@ -596,11 +625,19 @@ void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, S
         case OAUTO:
             vMode = ScrollbarAuto;
             break;
+        case OPAGEDX:
+            pagination.mode = WebCore::paginationModeForRenderStyle(o->style());
+            break;
+        case OPAGEDY:
+            pagination.mode = WebCore::paginationModeForRenderStyle(o->style());
+            break;
         default:
             // Don't set it at all.
             ;
     }
 
+    setPagination(pagination);
+
     m_viewportRenderer = o;
 }
 
@@ -2555,6 +2592,30 @@ void FrameView::updateOverflowStatus(bool horizontalOverflow, bool verticalOverf
     
 }
 
+const Pagination& FrameView::pagination() const
+{
+    if (m_pagination != Pagination())
+        return m_pagination;
+
+    if (Page* page = m_frame->page()) {
+        if (page->mainFrame() == m_frame)
+            return page->pagination();
+    }
+
+    return m_pagination;
+}
+
+void FrameView::setPagination(const Pagination& pagination)
+{
+    if (m_pagination == pagination)
+        return;
+
+    m_pagination = pagination;
+
+    if (m_frame)
+        m_frame->document()->styleResolverChanged(DeferRecalcStyle);
+}
+
 IntRect FrameView::windowClipRect(bool clipToContents) const
 {
     ASSERT(m_frame->view() == this);
@@ -3051,8 +3112,7 @@ void FrameView::paintContents(GraphicsContext* p, const IntRect& rect)
         p->fillRect(rect, Color(0xFF, 0, 0), ColorSpaceDeviceRGB);
 #endif
 
-    Page* page = m_frame->page();
-    if (page->mainFrame() == m_frame && page->pagination().mode != Page::Pagination::Unpaginated)
+    if (pagination().mode != Pagination::Unpaginated)
         p->fillRect(rect, baseBackgroundColor(), ColorSpaceDeviceRGB);
 
     bool isTopLevelPainter = !sCurrentPaintTimeStamp;
index 87c108b48ac8741f283d91656df1467424ad8985..6ab968e855e3f38a8853bcc8c791d3fcbc5e22df 100644 (file)
@@ -29,6 +29,7 @@
 #include "Color.h"
 #include "Frame.h"
 #include "LayoutTypes.h"
+#include "Pagination.h"
 #include "PaintPhase.h"
 #include "ScrollView.h"
 #include <wtf/Forward.h>
@@ -52,6 +53,8 @@ class RenderLayer;
 class RenderObject;
 class RenderScrollbarPart;
 
+Pagination::Mode paginationModeForRenderStyle(RenderStyle*);
+
 typedef unsigned long long DOMTimeStamp;
 
 class FrameView : public ScrollView {
@@ -347,6 +350,15 @@ public:
 
     void setScrollingPerformanceLoggingEnabled(bool);
 
+    // Page and FrameView both store a Pagination value. Page::pagination() is set only by API,
+    // and FrameView::pagination() is set only by CSS. Page::pagination() will affect all
+    // FrameViews in the page cache, but FrameView::pagination() only affects the current
+    // FrameView. FrameView::pagination() will return m_pagination if it has been set. Otherwise,
+    // it will return Page::pagination() since currently there are no callers that need to
+    // distinguish between the two.
+    const Pagination& pagination() const;
+    void setPagination(const Pagination&);
+
 protected:
     virtual bool scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
     virtual void scrollContentsSlowPath(const IntRect& updateRect);
@@ -484,6 +496,8 @@ private:
     bool m_verticalOverflow;    
     RenderObject* m_viewportRenderer;
 
+    Pagination m_pagination;
+
     bool m_wasScrolledByUser;
     bool m_inProgrammaticScroll;
     bool m_safeToPropagateScrollToParent;
index f8b026f73cd8500884c72da4b629de1130380ee4..2ba722acc7345b82ed649227c4921d255ec1e25f 100644 (file)
@@ -25,6 +25,7 @@
 #include "FindOptions.h"
 #include "LayoutTypes.h"
 #include "PageVisibilityState.h"
+#include "Pagination.h"
 #include "PlatformScreen.h"
 #include "PlatformString.h"
 #include "Region.h"
@@ -246,28 +247,10 @@ namespace WebCore {
         float deviceScaleFactor() const { return m_deviceScaleFactor; }
         void setDeviceScaleFactor(float);
 
-        struct Pagination {
-            enum Mode { Unpaginated, LeftToRightPaginated, RightToLeftPaginated, TopToBottomPaginated, BottomToTopPaginated };
-
-            Pagination()
-                : mode(Unpaginated)
-                , behavesLikeColumns(false)
-                , pageLength(0)
-                , gap(0)
-            {
-            };
-
-            bool operator==(const Pagination& other) const
-            {
-                return mode == other.mode && behavesLikeColumns == other.behavesLikeColumns && pageLength == other.pageLength && gap == other.gap;
-            }
-
-            Mode mode;
-            bool behavesLikeColumns;
-            unsigned pageLength;
-            unsigned gap;
-        };
-
+        // Page and FrameView both store a Pagination value. Page::pagination() is set only by API,
+        // and FrameView::pagination() is set only by CSS. Page::pagination() will affect all
+        // FrameViews in the page cache, but FrameView::pagination() only affects the current
+        // FrameView. 
         const Pagination& pagination() const { return m_pagination; }
         void setPagination(const Pagination&);
 
diff --git a/Source/WebCore/rendering/Pagination.h b/Source/WebCore/rendering/Pagination.h
new file mode 100644 (file)
index 0000000..1afad69
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef Pagination_h
+#define Pagination_h
+
+namespace WebCore {
+
+struct Pagination {
+    enum Mode { Unpaginated, LeftToRightPaginated, RightToLeftPaginated, TopToBottomPaginated, BottomToTopPaginated };
+
+    Pagination()
+        : mode(Unpaginated)
+        , behavesLikeColumns(false)
+        , pageLength(0)
+        , gap(0)
+    {
+    };
+
+    bool operator==(const Pagination& other) const
+    {
+        return mode == other.mode && behavesLikeColumns == other.behavesLikeColumns && pageLength == other.pageLength && gap == other.gap;
+    }
+
+    bool operator!=(const Pagination& other) const
+    {
+        return mode != other.mode || behavesLikeColumns != other.behavesLikeColumns || pageLength != other.pageLength || gap != other.gap;
+    }
+
+    Mode mode;
+    bool behavesLikeColumns;
+    unsigned pageLength;
+    unsigned gap;
+};
+
+} // namespace WebCore
+
+#endif
index 19e59324e76d88a2fe72b77bae99275eb2695b8b..a4158f4e1879427b5aa8af5d2da3248fe00650b6 100755 (executable)
@@ -5114,8 +5114,12 @@ void RenderBlock::calcColumnWidth()
 
 bool RenderBlock::requiresColumns(int desiredColumnCount) const
 {
+    // If overflow-y is set to paged-x or paged-y on the body or html element, we'll handle the paginating
+    // in the RenderView instead.
+    bool isPaginated = (style()->overflowY() == OPAGEDX || style()->overflowY() == OPAGEDY) && !(isRoot() || isBody());
+
     return firstChild()
-        && (desiredColumnCount != 1 || !style()->hasAutoColumnWidth() || !style()->hasInlineColumnAxis())
+        && (desiredColumnCount != 1 || !style()->hasAutoColumnWidth() || !style()->hasInlineColumnAxis() || isPaginated)
         && !firstChild()->isAnonymousColumnsBlock()
         && !firstChild()->isAnonymousColumnSpanBlock();
 }
@@ -5146,6 +5150,32 @@ void RenderBlock::setDesiredColumnCountAndWidth(int count, LayoutUnit width)
     }
 }
 
+void RenderBlock::updateColumnInfoFromStyle(RenderStyle* style)
+{
+    if (!hasColumns())
+        return;
+
+    ColumnInfo* info = gColumnInfoMap->get(this);
+
+    bool needsLayout = false;
+    ColumnInfo::Axis oldAxis = info->progressionAxis();
+    ColumnInfo::Axis newAxis = style->hasInlineColumnAxis() ? ColumnInfo::InlineAxis : ColumnInfo::BlockAxis;
+    if (oldAxis != newAxis) {
+        info->setProgressionAxis(newAxis);
+        needsLayout = true;
+    }
+
+    bool oldProgressionIsReversed = info->progressionIsReversed();
+    bool newProgressionIsReversed = style->columnProgression() == ReverseColumnProgression;
+    if (oldProgressionIsReversed != newProgressionIsReversed) {
+        info->setProgressionIsReversed(newProgressionIsReversed);
+        needsLayout = true;
+    }
+
+    if (needsLayout)
+        setNeedsLayoutAndPrefWidthsRecalc();
+}
+
 LayoutUnit RenderBlock::desiredColumnWidth() const
 {
     if (!hasColumns())
index 420107fa2eae29664749c041bd498f426b6e35fb..a31b26ed6e8f41066b916e3929b0bd7336134f7f 100644 (file)
@@ -266,6 +266,8 @@ public:
 
     ColumnInfo* columnInfo() const;
     int columnGap() const;
+
+    void updateColumnInfoFromStyle(RenderStyle*);
     
     // These two functions take the ColumnInfo* to avoid repeated lookups of the info in the global HashMap.
     unsigned columnCount(ColumnInfo*) const;
index fe75262c8555d5873c9f7a0629c22b8a824a0b7c..661d0eb0820e38ff9da95a3591ed4f00ff7645fb 100644 (file)
@@ -4777,7 +4777,7 @@ bool RenderLayer::shouldBeNormalFlowOnly() const
                 || renderer()->isVideo()
                 || renderer()->isEmbeddedObject()
                 || renderer()->isRenderIFrame()
-                || renderer()->style()->specifiesColumns())
+                || (renderer()->style()->specifiesColumns() && !isRootLayer()))
             && !renderer()->isOutOfFlowPositioned()
             && !renderer()->isRelPositioned()
             && !renderer()->hasTransform()
index 0b59a053502caf821c84d2ae6aa9ada05d13ba27..ec2d1b8424441ebe78fc447e573db0a1e9ecfd2e 100644 (file)
@@ -217,12 +217,9 @@ void RenderView::mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, Transfo
 
 bool RenderView::requiresColumns(int desiredColumnCount) const
 {
-    if (m_frameView) {
-        if (Frame* frame = m_frameView->frame()) {
-            if (Page* page = frame->page())
-                return frame == page->mainFrame() && page->pagination().mode != Page::Pagination::Unpaginated;
-        }
-    }
+    if (m_frameView)
+        return m_frameView->pagination().mode != Pagination::Unpaginated;
+
     return RenderBlock::requiresColumns(desiredColumnCount);
 }
 
@@ -230,24 +227,17 @@ void RenderView::calcColumnWidth()
 {
     int columnWidth = contentLogicalWidth();
     if (m_frameView && style()->hasInlineColumnAxis()) {
-        if (Frame* frame = m_frameView->frame()) {
-            if (Page* page = frame->page()) {
-                if (int pageLength = page->pagination().pageLength)
-                    columnWidth = pageLength;
-            }
-        }
+        if (int pageLength = m_frameView->pagination().pageLength)
+            columnWidth = pageLength;
     }
     setDesiredColumnCountAndWidth(1, columnWidth);
 }
 
 ColumnInfo::PaginationUnit RenderView::paginationUnit() const
 {
-    if (m_frameView) {
-        if (Frame* frame = m_frameView->frame()) {
-            if (Page* page = frame->page())
-                return (frame == page->mainFrame() && page->pagination().behavesLikeColumns) ? ColumnInfo::Column : ColumnInfo::Page;
-        }
-    }
+    if (m_frameView)
+        return m_frameView->pagination().behavesLikeColumns ? ColumnInfo::Column : ColumnInfo::Page;
+
     return ColumnInfo::Page;
 }
 
@@ -799,14 +789,8 @@ int RenderView::viewLogicalHeight() const
     int height = style()->isHorizontalWritingMode() ? viewHeight() : viewWidth();
 
     if (hasColumns() && !style()->hasInlineColumnAxis()) {
-        if (Frame* frame = m_frameView->frame()) {
-            if (Page* page = frame->page()) {
-                if (frame == page->mainFrame()) {
-                    if (int pageLength = page->pagination().pageLength)
-                        height = pageLength;
-                }
-            }
-        }
+        if (int pageLength = m_frameView->pagination().pageLength)
+            height = pageLength;
     }
 
     return height;
index b0c330d13be537aacc3be2917bcada0aa9587e1e..880b622430dc892d9ffc6de987f826c9e6b31523 100644 (file)
@@ -114,7 +114,7 @@ enum EBoxSizing { CONTENT_BOX, BORDER_BOX };
 // Random visual rendering model attributes. Not inherited.
 
 enum EOverflow {
-    OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OMARQUEE
+    OVISIBLE, OHIDDEN, OSCROLL, OAUTO, OOVERLAY, OMARQUEE, OPAGEDX, OPAGEDY
 };
 
 enum EVerticalAlign {
index 063027870fea8f888b41897bfaa7ff4ff4dae14a..cd673982c0628a95d68aec836f2562c6f02a9077 100755 (executable)
@@ -160,7 +160,7 @@ void InternalSettings::reset()
 {
     TextRun::setAllowsRoundingHacks(false);
     setUserPreferredLanguages(Vector<String>());
-    page()->setPagination(Page::Pagination());
+    page()->setPagination(Pagination());
     page()->setPageScaleFactor(1, IntPoint(0, 0));
 #if ENABLE(PAGE_POPUP)
     m_pagePopupDriver.clear();
@@ -565,17 +565,17 @@ void InternalSettings::setPagination(const String& mode, int gap, int pageLength
         return;
     }
 
-    Page::Pagination pagination;
+    Pagination pagination;
     if (mode == "Unpaginated")
-        pagination.mode = Page::Pagination::Unpaginated;
+        pagination.mode = Pagination::Unpaginated;
     else if (mode == "LeftToRightPaginated")
-        pagination.mode = Page::Pagination::LeftToRightPaginated;
+        pagination.mode = Pagination::LeftToRightPaginated;
     else if (mode == "RightToLeftPaginated")
-        pagination.mode = Page::Pagination::RightToLeftPaginated;
+        pagination.mode = Pagination::RightToLeftPaginated;
     else if (mode == "TopToBottomPaginated")
-        pagination.mode = Page::Pagination::TopToBottomPaginated;
+        pagination.mode = Pagination::TopToBottomPaginated;
     else if (mode == "BottomToTopPaginated")
-        pagination.mode = Page::Pagination::BottomToTopPaginated;
+        pagination.mode = Pagination::BottomToTopPaginated;
     else {
         ec = SYNTAX_ERR;
         return;
index 0f2e3d42db1e32e7dc73791cef518ab6ca67b103..53112e658a854bcf0994254cf4d1871ec56cdcd2 100644 (file)
@@ -1,3 +1,21 @@
+2012-08-22  Beth Dakin  <bdakin@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=94401
+        Add support for making a web site become paginated using overflow: 
+        paged-x | paged-y
+        -and corresponding-
+        <rdar://problem/11831783> 
+
+        Reviewed by Dave Hyatt.
+
+        WebCore::Page::Pagination is now just WebCore::Pagination.
+        * WebView/WebView.mm:
+        (-[WebView _setPaginationMode:]):
+        (-[WebView _paginationMode]):
+        (-[WebView _setPaginationBehavesLikeColumns:]):
+        (-[WebView _setPageLength:]):
+        (-[WebView _setGapBetweenPages:]):
+
 2012-08-15  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>
 
         [css3-text] Add CSS3 Text decoration compile flag
index 3391ab9671a9bb5ca1bfa31a0054f16b06dc8d24..2bfaf248151d8973828b61b237d532a5470990f4 100644 (file)
@@ -2806,22 +2806,22 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
     if (!page)
         return;
 
-    Page::Pagination pagination = page->pagination();
+    Pagination pagination = page->pagination();
     switch (paginationMode) {
     case WebPaginationModeUnpaginated:
-        pagination.mode = Page::Pagination::Unpaginated;
+        pagination.mode = Pagination::Unpaginated;
         break;
     case WebPaginationModeLeftToRight:
-        pagination.mode = Page::Pagination::LeftToRightPaginated;
+        pagination.mode = Pagination::LeftToRightPaginated;
         break;
     case WebPaginationModeRightToLeft:
-        pagination.mode = Page::Pagination::RightToLeftPaginated;
+        pagination.mode = Pagination::RightToLeftPaginated;
         break;
     case WebPaginationModeTopToBottom:
-        pagination.mode = Page::Pagination::TopToBottomPaginated;
+        pagination.mode = Pagination::TopToBottomPaginated;
         break;
     case WebPaginationModeBottomToTop:
-        pagination.mode = Page::Pagination::BottomToTopPaginated;
+        pagination.mode = Pagination::BottomToTopPaginated;
         break;
     default:
         return;
@@ -2837,15 +2837,15 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
         return WebPaginationModeUnpaginated;
 
     switch (page->pagination().mode) {
-    case Page::Pagination::Unpaginated:
+    case Pagination::Unpaginated:
         return WebPaginationModeUnpaginated;
-    case Page::Pagination::LeftToRightPaginated:
+    case Pagination::LeftToRightPaginated:
         return WebPaginationModeLeftToRight;
-    case Page::Pagination::RightToLeftPaginated:
+    case Pagination::RightToLeftPaginated:
         return WebPaginationModeRightToLeft;
-    case Page::Pagination::TopToBottomPaginated:
+    case Pagination::TopToBottomPaginated:
         return WebPaginationModeTopToBottom;
-    case Page::Pagination::BottomToTopPaginated:
+    case Pagination::BottomToTopPaginated:
         return WebPaginationModeBottomToTop;
     }
 
@@ -2859,7 +2859,7 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
     if (!page)
         return;
 
-    Page::Pagination pagination = page->pagination();
+    Pagination pagination = page->pagination();
     pagination.behavesLikeColumns = behavesLikeColumns;
 }
 
@@ -2878,7 +2878,7 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
     if (!page)
         return;
 
-    Page::Pagination pagination = page->pagination();
+    Pagination pagination = page->pagination();
     pagination.pageLength = pageLength;
 
     page->setPagination(pagination);
@@ -2899,7 +2899,7 @@ static PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns)
     if (!page)
         return;
 
-    Page::Pagination pagination = page->pagination();
+    Pagination pagination = page->pagination();
     pagination.gap = pageGap;
     page->setPagination(pagination);
 }
index 86e3ce2eb5bf97df2fd26bc193173f9c26802071..b9c06dcdc58bf176ff64d11d52c5466532527eb5 100644 (file)
@@ -1,3 +1,33 @@
+2012-08-22  Beth Dakin  <bdakin@apple.com>
+
+        https://bugs.webkit.org/show_bug.cgi?id=94401
+        Add support for making a web site become paginated using overflow: 
+        paged-x | paged-y
+        -and corresponding-
+        <rdar://problem/11831783> 
+
+        Reviewed by Dave Hyatt.
+
+        WebCore::Page::Pagination is now just WebCore::Pagination.
+        * Shared/WebPageCreationParameters.h:
+        (WebPageCreationParameters):
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPaginationMode):
+        (WKPageGetPaginationMode):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy):
+        (WebKit::WebPageProxy::setPaginationMode):
+        * UIProcess/WebPageProxy.h:
+        (WebPageProxy):
+        (WebKit::WebPageProxy::paginationMode):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::setPaginationMode):
+        (WebKit::WebPage::setPaginationBehavesLikeColumns):
+        (WebKit::WebPage::setPageLength):
+        (WebKit::WebPage::setGapBetweenPages):
+        * WebProcess/WebPage/WebPage.h:
+        (WebPage):
+
 2012-08-22  Jer Noble  <jer.noble@apple.com>
 
         Browser menu visible when calling webkitRequestFullscreen after user manually enters full screen mode
index ce85dcecaada7242ca3bcc648fdd58ee1159c66d..97e88b60781fc9d142ade96d9412376899f6a17c 100644 (file)
@@ -67,7 +67,7 @@ struct WebPageCreationParameters {
     bool useFixedLayout;
     WebCore::IntSize fixedLayoutSize;
 
-    WebCore::Page::Pagination::Mode paginationMode;
+    WebCore::Pagination::Mode paginationMode;
     bool paginationBehavesLikeColumns;
     double pageLength;
     double gapBetweenPages;
index a2e229898e321669c0abe5ee9e55eff7546494df..437179bfb62103d2edda3a0b9b3a1884a35f5845 100644 (file)
@@ -352,22 +352,22 @@ bool WKPageIsPinnedToRightSide(WKPageRef pageRef)
 
 void WKPageSetPaginationMode(WKPageRef pageRef, WKPaginationMode paginationMode)
 {
-    Page::Pagination::Mode mode;
+    Pagination::Mode mode;
     switch (paginationMode) {
     case kWKPaginationModeUnpaginated:
-        mode = Page::Pagination::Unpaginated;
+        mode = Pagination::Unpaginated;
         break;
     case kWKPaginationModeLeftToRight:
-        mode = Page::Pagination::LeftToRightPaginated;
+        mode = Pagination::LeftToRightPaginated;
         break;
     case kWKPaginationModeRightToLeft:
-        mode = Page::Pagination::RightToLeftPaginated;
+        mode = Pagination::RightToLeftPaginated;
         break;
     case kWKPaginationModeTopToBottom:
-        mode = Page::Pagination::TopToBottomPaginated;
+        mode = Pagination::TopToBottomPaginated;
         break;
     case kWKPaginationModeBottomToTop:
-        mode = Page::Pagination::BottomToTopPaginated;
+        mode = Pagination::BottomToTopPaginated;
         break;
     default:
         return;
@@ -378,15 +378,15 @@ void WKPageSetPaginationMode(WKPageRef pageRef, WKPaginationMode paginationMode)
 WKPaginationMode WKPageGetPaginationMode(WKPageRef pageRef)
 {
     switch (toImpl(pageRef)->paginationMode()) {
-    case Page::Pagination::Unpaginated:
+    case Pagination::Unpaginated:
         return kWKPaginationModeUnpaginated;
-    case Page::Pagination::LeftToRightPaginated:
+    case Pagination::LeftToRightPaginated:
         return kWKPaginationModeLeftToRight;
-    case Page::Pagination::RightToLeftPaginated:
+    case Pagination::RightToLeftPaginated:
         return kWKPaginationModeRightToLeft;
-    case Page::Pagination::TopToBottomPaginated:
+    case Pagination::TopToBottomPaginated:
         return kWKPaginationModeTopToBottom;
-    case Page::Pagination::BottomToTopPaginated:
+    case Pagination::BottomToTopPaginated:
         return kWKPaginationModeBottomToTop;
     }
 
index fb63a33bad9a1a87b62db1bbc405172844e79387..c88c6655a8e6180dcbe7fe0a41a175940180eb7d 100644 (file)
@@ -183,7 +183,7 @@ WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> p
     , m_drawsTransparentBackground(false)
     , m_areMemoryCacheClientCallsEnabled(true)
     , m_useFixedLayout(false)
-    , m_paginationMode(Page::Pagination::Unpaginated)
+    , m_paginationMode(Pagination::Unpaginated)
     , m_paginationBehavesLikeColumns(false)
     , m_pageLength(0)
     , m_gapBetweenPages(0)
@@ -1502,7 +1502,7 @@ void WebPageProxy::setFixedLayoutSize(const IntSize& size)
     m_process->send(Messages::WebPage::SetFixedLayoutSize(size), m_pageID);
 }
 
-void WebPageProxy::setPaginationMode(WebCore::Page::Pagination::Mode mode)
+void WebPageProxy::setPaginationMode(WebCore::Pagination::Mode mode)
 {
     if (mode == m_paginationMode)
         return;
index 2ba6a9c024f0627d861a451973b971f829d99c81..9a19a566bb92c35ef508821c823c7b24228078c2 100644 (file)
@@ -488,8 +488,8 @@ public:
     bool isPinnedToLeftSide() const { return m_mainFrameIsPinnedToLeftSide; }
     bool isPinnedToRightSide() const { return m_mainFrameIsPinnedToRightSide; }
 
-    void setPaginationMode(WebCore::Page::Pagination::Mode);
-    WebCore::Page::Pagination::Mode paginationMode() const { return m_paginationMode; }
+    void setPaginationMode(WebCore::Pagination::Mode);
+    WebCore::Pagination::Mode paginationMode() const { return m_paginationMode; }
     void setPaginationBehavesLikeColumns(bool);
     bool paginationBehavesLikeColumns() const { return m_paginationBehavesLikeColumns; }
     void setPageLength(double);
@@ -1095,7 +1095,7 @@ private:
     bool m_useFixedLayout;
     WebCore::IntSize m_fixedLayoutSize;
 
-    WebCore::Page::Pagination::Mode m_paginationMode;
+    WebCore::Pagination::Mode m_paginationMode;
     bool m_paginationBehavesLikeColumns;
     double m_pageLength;
     double m_gapBetweenPages;
index 7099a4bb528b7ca1aa38ff00c8db1b4ee9c43d02..ecac12cf632246ec337c3a5bae210c6380c8f1f1 100644 (file)
@@ -1126,28 +1126,28 @@ void WebPage::setFixedLayoutSize(const IntSize& size)
 
 void WebPage::setPaginationMode(uint32_t mode)
 {
-    Page::Pagination pagination = m_page->pagination();
-    pagination.mode = static_cast<Page::Pagination::Mode>(mode);
+    Pagination pagination = m_page->pagination();
+    pagination.mode = static_cast<Pagination::Mode>(mode);
     m_page->setPagination(pagination);
 }
 
 void WebPage::setPaginationBehavesLikeColumns(bool behavesLikeColumns)
 {
-    Page::Pagination pagination = m_page->pagination();
+    Pagination pagination = m_page->pagination();
     pagination.behavesLikeColumns = behavesLikeColumns;
     m_page->setPagination(pagination);
 }
 
 void WebPage::setPageLength(double pageLength)
 {
-    Page::Pagination pagination = m_page->pagination();
+    Pagination pagination = m_page->pagination();
     pagination.pageLength = pageLength;
     m_page->setPagination(pagination);
 }
 
 void WebPage::setGapBetweenPages(double gap)
 {
-    Page::Pagination pagination = m_page->pagination();
+    Pagination pagination = m_page->pagination();
     pagination.gap = gap;
     m_page->setPagination(pagination);
 }
index ec5af0e96684c386180727f02033d4a9f9550fe2..789727ad3aae24bc334542290b58ba04fde89b62 100644 (file)
@@ -309,7 +309,7 @@ public:
     bool useFixedLayout() const { return m_useFixedLayout; }
     void setFixedLayoutSize(const WebCore::IntSize&);
 
-    void setPaginationMode(uint32_t /* WebCore::Page::Pagination::Mode */);
+    void setPaginationMode(uint32_t /* WebCore::Pagination::Mode */);
     void setPaginationBehavesLikeColumns(bool);
     void setPageLength(double);
     void setGapBetweenPages(double);
index 12c1f303303f02486ae9c548d88f0eedb483dd93..5f68abc3a6dc2057984fcebcf4cd60ce2971b243 100644 (file)
@@ -221,7 +221,7 @@ EXPORTS
         ?setFixedFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
         ?setMockScrollbarsEnabled@Settings@WebCore@@SAX_N@Z
         ?setPageScaleFactor@Page@WebCore@@QAEXMABVIntPoint@2@@Z
-        ?setPagination@Page@WebCore@@QAEXABUPagination@12@@Z
+        ?setPagination@Page@WebCore@@QAEXABUPagination@2@@Z
         ?setPictographFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
         ?setResourcesDataSizeLimitsFromInternals@InspectorController@WebCore@@QAEXHH@Z
         ?setSansSerifFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
index 1a47d2f3a504eb564b087ea9faf0ac4c69c9279e..b53c69e57d2e2be3d510749798120c9c2dbfdca5 100644 (file)
@@ -215,7 +215,7 @@ EXPORTS
         ?setFixedFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
         ?setMockScrollbarsEnabled@Settings@WebCore@@SAX_N@Z
         ?setPageScaleFactor@Page@WebCore@@QAEXMABVIntPoint@2@@Z
-        ?setPagination@Page@WebCore@@QAEXABUPagination@12@@Z
+        ?setPagination@Page@WebCore@@QAEXABUPagination@2@@Z
         ?setPictographFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
         ?setResourcesDataSizeLimitsFromInternals@InspectorController@WebCore@@QAEXHH@Z
         ?setSansSerifFontFamily@Settings@WebCore@@QAEXABVAtomicString@WTF@@W4UScriptCode@@@Z
index 44d7c60a7da08f5eabcad5bbbceb3e8a8a44beed..af4bff6a9b9512babaca8e1d94e246b774cae978 100644 (file)
@@ -27,7 +27,7 @@ _ZN3WTF7CStringC2EPKcm;
 _ZN3WTF7CStringD1Ev;
 _ZN3WTF7CStringaSERKS0_;
 _ZN24DumpRenderTreeSupportGtk*;
-_ZN7WebCore4Page13setPaginationERKNS0_10PaginationE;
+_ZN7WebCore4Page13setPaginationERKNS_10PaginationE;
 _ZN7WebCore4Page18setPageScaleFactorEfRKNS_8IntPointE;
 _ZN7WebCore4Page20setDeviceScaleFactorEf;
 _ZN7WebCore4Page16setCanStartMediaEb;