Implement coordinated scrollbar for subframes and overflow:scroll
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 09:13:32 +0000 (09:13 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Feb 2013 09:13:32 +0000 (09:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=109560

Patch by Tien-Ren Chen <trchen@chromium.org> on 2013-02-26
Reviewed by James Robinson.

Source/WebCore:

This patch obsoletes ScrollingCoordinatorPrivate for the Chromium
implementation. Also removes the concept of a single main scrolling
layer. Should use HashMap to keep track resources for multiple
scrollable objects.

Many of the callbacks are extended to support ScrollableArea instead
of just FrameView. Now ScrollingCoordinatorChromium coordinates
scrollbars for both subframes and overflow:scroll.

Some drive-by change:
1. Remove the GraphicsLayer parameter for layer change callbacks.
   Should be able to get the latest layer from the ScrollableArea anyway.
2. Should start from main frame document when updating touch event target rects.

New chromium test: ScrollingCoordinatorChromiumTest.iframeScrolling

* page/Frame.cpp:
(WebCore::Frame::willDetachPage):
* page/FrameView.cpp:
(WebCore::FrameView::prepareForDetach):
(WebCore::FrameView::layerForScrolling):
(WebCore):
* page/FrameView.h:
(FrameView):
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::ScrollingCoordinator::scrollLayerForScrollableArea):
(WebCore):
(WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea):
(WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
* page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::willDestroyScrollableArea):
(WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
(WebCore::ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
(ScrollingCoordinator):
* page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
(WebCore::scrollingWebLayerForGraphicsLayer):
(WebCore::ScrollingCoordinatorChromium::scrollingWebLayerForScrollableArea):
(WebCore::ScrollingCoordinatorChromium::ScrollingCoordinatorChromium):
(WebCore::ScrollingCoordinatorChromium::~ScrollingCoordinatorChromium):
(WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
(WebCore::ScrollingCoordinatorChromium::touchEventTargetRectsDidChange):
(WebCore::createScrollbarLayer):
(WebCore::detachScrollbarLayer):
(WebCore::setupScrollbarLayer):
(WebCore::ScrollingCoordinatorChromium::willDestroyScrollableArea):
(WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollbarLayerDidChange):
(WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
(WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRects):
(WebCore::ScrollingCoordinatorChromium::setWheelEventHandlerCount):
(WebCore::ScrollingCoordinatorChromium::setShouldUpdateScrollLayerPositionOnMainThread):
(WebCore::ScrollingCoordinatorChromium::setLayerIsContainerForFixedPositionLayers):
(WebCore::ScrollingCoordinatorChromium::setLayerIsFixedToContainerLayer):
(WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange):
(WebCore::ScrollingCoordinatorChromium::addWebScrollbarLayer):
(WebCore):
(WebCore::ScrollingCoordinatorChromium::getWebScrollbarLayer):
(WebCore::ScrollingCoordinatorChromium::removeWebScrollbarLayer):
* page/scrolling/chromium/ScrollingCoordinatorChromium.h:
(WebCore):
(ScrollingCoordinatorChromium):
* page/scrolling/mac/ScrollingCoordinatorMac.h:
(ScrollingCoordinatorMac):
* page/scrolling/mac/ScrollingCoordinatorMac.mm:
(WebCore::ScrollingCoordinatorMac::scrollableAreaScrollbarLayerDidChange):
* platform/ScrollableArea.h:
(ScrollableArea):
(WebCore::ScrollableArea::layerForScrolling):
* platform/graphics/GraphicsLayer.h:
(GraphicsLayer):
(WebCore::GraphicsLayer::setContentsToPlatformLayer):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::~RenderLayer):
(WebCore::RenderLayer::layerForScrolling):
(WebCore):
* rendering/RenderLayer.h:
(RenderLayer):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateOverflowControlsLayers):
(WebCore::RenderLayerBacking::positionOverflowControlsLayers):
(WebCore::RenderLayerBacking::updateScrollingLayers):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::frameViewDidScroll):
(WebCore::RenderLayerCompositor::scrollingLayerDidChange):
(WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

Source/WebKit/chromium:

Added ScrollingCoordinatorChromiumTest.iframeScrolling to verify
impl-side scrolling and impl-side scrollbars for frames.

Update ScrollingCoordinatorChromiumTest.overflowScrolling to verify
impl-side scrollbars.

* tests/ScrollingCoordinatorChromiumTest.cpp:
(WebKit::ScrollingCoordinatorChromiumTest::ScrollingCoordinatorChromiumTest):
(WebKit::TEST_F):
(WebKit):
* tests/data/iframe-scrolling-inner.html: Added.
* tests/data/iframe-scrolling.html: Added.

LayoutTests:

Coordinated scrollbars changes drawsContent flag on scrollbar GraphicsLayers,
test expectation are updated.

* platform/chromium-linux/compositing/iframes/become-overlapped-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/composited-parent-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/connect-compositing-iframe-delayed-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/connect-compositing-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/connect-compositing-iframe2-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/connect-compositing-iframe3-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/enter-compositing-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/iframe-resize-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/iframe-size-from-zero-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/invisible-nested-iframe-show-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/overlapped-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/resizer-expected.txt: Added.
* platform/chromium-linux/compositing/iframes/scrolling-iframe-expected.txt: Added.
* platform/chromium-linux/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt:
* platform/chromium-linux/compositing/overflow/textarea-scroll-touch-expected.txt: Added.
* platform/chromium-linux/compositing/overflow/updating-scrolling-content-expected.txt:
* platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt: Added.
* platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt: Added.
* platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt: Added.
* platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt: Added.
* platform/chromium-linux/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-toggle-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-overlay-with-touch-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-without-painting-expected.txt:
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/updating-scrolling-content-expected.txt:
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/become-overlapped-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/composited-parent-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-delayed-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe2-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe3-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/enter-compositing-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-resize-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-size-from-zero-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/invisible-nested-iframe-show-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/overlapped-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/resizer-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/scrolling-iframe-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-without-painting-expected.txt:
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/updating-scrolling-content-expected.txt:
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-expected.txt: Added.
* platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt: Added.
* platform/chromium/TestExpectations:

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

75 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/chromium-linux/compositing/iframes/become-overlapped-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/composited-parent-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-delayed-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe2-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe3-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/enter-compositing-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/iframe-resize-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/iframe-size-from-zero-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/invisible-nested-iframe-show-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/overlapped-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/resizer-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/iframes/scrolling-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt
LayoutTests/platform/chromium-linux/compositing/overflow/textarea-scroll-touch-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/overflow/updating-scrolling-content-expected.txt
LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/composited-scrolling-creates-a-stacking-container-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-toggle-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-overlay-with-touch-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-content-clip-to-viewport-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-without-painting-expected.txt
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/updating-scrolling-content-expected.txt
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/become-overlapped-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/composited-parent-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-delayed-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe2-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe3-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/enter-compositing-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-resize-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-size-from-zero-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/invisible-nested-iframe-show-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/overlapped-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/resizer-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/scrolling-iframe-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-content-clip-to-viewport-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-without-painting-expected.txt
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/updating-scrolling-content-expected.txt
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt [new file with mode: 0644]
LayoutTests/platform/chromium/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/page/Frame.cpp
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/FrameView.h
Source/WebCore/page/scrolling/ScrollingCoordinator.cpp
Source/WebCore/page/scrolling/ScrollingCoordinator.h
Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp
Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.h
Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h
Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm
Source/WebCore/platform/ScrollableArea.h
Source/WebCore/platform/graphics/GraphicsLayer.h
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderLayerBacking.cpp
Source/WebCore/rendering/RenderLayerCompositor.cpp
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/tests/ScrollingCoordinatorChromiumTest.cpp
Source/WebKit/chromium/tests/data/iframe-scrolling-inner.html [new file with mode: 0644]
Source/WebKit/chromium/tests/data/iframe-scrolling.html [new file with mode: 0644]

index 8eb744b..9c6d1cd 100644 (file)
@@ -1,3 +1,68 @@
+2013-02-26  Tien-Ren Chen  <trchen@chromium.org>
+
+        Implement coordinated scrollbar for subframes and overflow:scroll
+        https://bugs.webkit.org/show_bug.cgi?id=109560
+
+        Reviewed by James Robinson.
+
+        Coordinated scrollbars changes drawsContent flag on scrollbar GraphicsLayers,
+        test expectation are updated.
+
+        * platform/chromium-linux/compositing/iframes/become-overlapped-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/composited-parent-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/connect-compositing-iframe-delayed-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/connect-compositing-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/connect-compositing-iframe2-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/connect-compositing-iframe3-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/enter-compositing-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/iframe-resize-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/iframe-size-from-zero-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/invisible-nested-iframe-show-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/overlapped-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/resizer-expected.txt: Added.
+        * platform/chromium-linux/compositing/iframes/scrolling-iframe-expected.txt: Added.
+        * platform/chromium-linux/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt:
+        * platform/chromium-linux/compositing/overflow/textarea-scroll-touch-expected.txt: Added.
+        * platform/chromium-linux/compositing/overflow/updating-scrolling-content-expected.txt:
+        * platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt: Added.
+        * platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt: Added.
+        * platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt: Added.
+        * platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-toggle-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-overlay-with-touch-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-without-painting-expected.txt:
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/updating-scrolling-content-expected.txt:
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/become-overlapped-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/composited-parent-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-delayed-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe2-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe3-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/enter-compositing-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-resize-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-size-from-zero-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/invisible-nested-iframe-show-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/overlapped-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/resizer-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/scrolling-iframe-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-content-clip-to-viewport-expected.txt: Copied from LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-without-painting-expected.txt.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-without-painting-expected.txt:
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/updating-scrolling-content-expected.txt:
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-expected.txt: Added.
+        * platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt: Added.
+        * platform/chromium/TestExpectations:
+
 2013-02-26  Glenn Adams  <glenn@skynav.com>
 
         CSS3: line-break property support
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/become-overlapped-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/become-overlapped-iframe-expected.txt
new file mode 100644 (file)
index 0000000..5cc271f
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 58.00 58.00)
+          (bounds 350.00 200.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 15.00 15.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 305.00 170.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 305.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 305.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 305.00 0.00)
+                  (bounds 15.00 170.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 150.00 150.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/composited-parent-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/composited-parent-iframe-expected.txt
new file mode 100644 (file)
index 0000000..38cc114
--- /dev/null
@@ -0,0 +1,55 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position -12.00 -12.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
new file mode 100644 (file)
index 0000000..376911e
--- /dev/null
@@ -0,0 +1,63 @@
+
+When the parent document becomes composited, the layer trees should get connected together.
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 108.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 100.00 100.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe2-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe2-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe3-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/connect-compositing-iframe3-expected.txt
new file mode 100644 (file)
index 0000000..90057a7
--- /dev/null
@@ -0,0 +1,55 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/enter-compositing-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/enter-compositing-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/iframe-resize-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/iframe-resize-expected.txt
new file mode 100644 (file)
index 0000000..a6cd44f
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 470.00 190.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 385.00 120.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 385.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 385.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 120.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/iframe-size-from-zero-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/iframe-size-from-zero-expected.txt
new file mode 100644 (file)
index 0000000..edc4f9e
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 28.00 28.00)
+          (bounds 330.00 180.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 15.00 15.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/invisible-nested-iframe-show-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/invisible-nested-iframe-show-expected.txt
new file mode 100644 (file)
index 0000000..852e5fa
--- /dev/null
@@ -0,0 +1,93 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (bounds 358.00 208.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 23.00 23.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 193.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 193.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 8.00 8.00)
+                                  (bounds 252.00 172.00)
+                                  (drawsContent 1)
+                                  (children 1
+                                    (GraphicsLayer
+                                      (position 1.00 1.00)
+                                      (children 1
+                                        (GraphicsLayer
+                                          (bounds 250.00 170.00)
+                                          (children 1
+                                            (GraphicsLayer
+                                              (children 1
+                                                (GraphicsLayer
+                                                  (bounds 250.00 230.00)
+                                                  (children 1
+                                                    (GraphicsLayer
+                                                      (bounds 250.00 230.00)
+                                                      (drawsContent 1)
+                                                      (children 1
+                                                        (GraphicsLayer
+                                                          (position 18.00 10.00)
+                                                          (bounds 210.00 210.00)
+                                                          (contentsOpaque 1)
+                                                          (drawsContent 1)
+                                                        )
+                                                      )
+                                                    )
+                                                  )
+                                                )
+                                              )
+                                            )
+                                          )
+                                        )
+                                      )
+                                    )
+                                  )
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 18.00 203.00)
+          (bounds 210.00 210.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/overlapped-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/overlapped-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/resizer-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/resizer-expected.txt
new file mode 100644 (file)
index 0000000..37e83f7
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 304.00 154.00)
+          (drawsContent 1)
+          (children 2
+            (GraphicsLayer
+              (position 2.00 2.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 287.00 137.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/iframes/scrolling-iframe-expected.txt b/LayoutTests/platform/chromium-linux/compositing/iframes/scrolling-iframe-expected.txt
new file mode 100644 (file)
index 0000000..fe8c244
--- /dev/null
@@ -0,0 +1,70 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 4
+                (GraphicsLayer
+                  (bounds 285.00 135.00)
+                  (children 1
+                    (GraphicsLayer
+                      (position -80.00 -80.00)
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 508.00 608.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 508.00 608.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 108.00 100.00)
+                                  (bounds 200.00 200.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 135.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 135.00)
+                  (bounds 285.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 285.00 135.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt b/LayoutTests/platform/chromium-linux/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt
new file mode 100644 (file)
index 0000000..c71afc5
--- /dev/null
@@ -0,0 +1,54 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 28.00 20.00)
+          (bounds 202.00 202.00)
+          (drawsContent 1)
+          (children 4
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 200.00 200.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 200.00 300.00)
+                  (drawsContent 1)
+                  (children 2
+                    (GraphicsLayer
+                      (bounds 202.00 202.00)
+                      (drawsContent 1)
+                    )
+                    (GraphicsLayer
+                      (bounds 200.00 150.00)
+                      (contentsOpaque 1)
+                      (drawsContent 1)
+                    )
+                  )
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 1.00 186.00)
+              (bounds 185.00 15.00)
+            )
+            (GraphicsLayer
+              (position 186.00 1.00)
+              (bounds 15.00 185.00)
+            )
+            (GraphicsLayer
+              (position 186.00 186.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/LayoutTests/platform/chromium-linux/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
new file mode 100644 (file)
index 0000000..2cfc0f7
--- /dev/null
@@ -0,0 +1,39 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 320.00 340.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 320.00 340.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 305.00 1224.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 325.00)
+              (bounds 305.00 15.00)
+            )
+            (GraphicsLayer
+              (position 305.00 0.00)
+              (bounds 15.00 325.00)
+            )
+            (GraphicsLayer
+              (position 305.00 325.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index ee2c672..2a1338d 100644 (file)
             (GraphicsLayer
               (position 1.00 186.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 186.00 1.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/compositing/overflow/textarea-scroll-touch-expected.txt b/LayoutTests/platform/chromium-linux/compositing/overflow/textarea-scroll-touch-expected.txt
new file mode 100644 (file)
index 0000000..9068827
--- /dev/null
@@ -0,0 +1,69 @@
+  
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 18.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 248.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index 067bc86..1621d51 100644 (file)
             (GraphicsLayer
               (position 0.00 185.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 185.00 0.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
new file mode 100644 (file)
index 0000000..060f064
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 51.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/LayoutTests/platform/chromium-linux/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
new file mode 100644 (file)
index 0000000..00a47f0
--- /dev/null
@@ -0,0 +1,56 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 154.00 154.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 2.00 2.00)
+              (children 4
+                (GraphicsLayer
+                  (bounds 135.00 135.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 508.00 516.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 508.00 516.00)
+                              (drawsContent 1)
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 0.00 135.00)
+                  (bounds 135.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 135.00 0.00)
+                  (bounds 15.00 135.00)
+                )
+                (GraphicsLayer
+                  (position 135.00 135.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/composited-scrolling-creates-a-stacking-container-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/composited-scrolling-creates-a-stacking-container-expected.txt
new file mode 100644 (file)
index 0000000..c71afc5
--- /dev/null
@@ -0,0 +1,54 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 28.00 20.00)
+          (bounds 202.00 202.00)
+          (drawsContent 1)
+          (children 4
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 200.00 200.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 200.00 300.00)
+                  (drawsContent 1)
+                  (children 2
+                    (GraphicsLayer
+                      (bounds 202.00 202.00)
+                      (drawsContent 1)
+                    )
+                    (GraphicsLayer
+                      (bounds 200.00 150.00)
+                      (contentsOpaque 1)
+                      (drawsContent 1)
+                    )
+                  )
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 1.00 186.00)
+              (bounds 185.00 15.00)
+            )
+            (GraphicsLayer
+              (position 186.00 1.00)
+              (bounds 15.00 185.00)
+            )
+            (GraphicsLayer
+              (position 186.00 186.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-expected.txt
new file mode 100644 (file)
index 0000000..685abc0
--- /dev/null
@@ -0,0 +1,40 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 300.00 300.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 300.00 300.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 1000.00 1000.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 285.00)
+              (bounds 285.00 15.00)
+            )
+            (GraphicsLayer
+              (position 285.00 0.00)
+              (bounds 15.00 285.00)
+            )
+            (GraphicsLayer
+              (position 285.00 285.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-toggle-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-auto-with-touch-toggle-expected.txt
new file mode 100644 (file)
index 0000000..685abc0
--- /dev/null
@@ -0,0 +1,40 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 300.00 300.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 300.00 300.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 1000.00 1000.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 285.00)
+              (bounds 285.00 15.00)
+            )
+            (GraphicsLayer
+              (position 285.00 0.00)
+              (bounds 15.00 285.00)
+            )
+            (GraphicsLayer
+              (position 285.00 285.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-overlay-with-touch-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/overflow-overlay-with-touch-expected.txt
new file mode 100644 (file)
index 0000000..685abc0
--- /dev/null
@@ -0,0 +1,40 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 300.00 300.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 300.00 300.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 1000.00 1000.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 285.00)
+              (bounds 285.00 15.00)
+            )
+            (GraphicsLayer
+              (position 285.00 0.00)
+              (bounds 15.00 285.00)
+            )
+            (GraphicsLayer
+              (position 285.00 285.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-content-clip-to-viewport-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/scrolling-content-clip-to-viewport-expected.txt
new file mode 100644 (file)
index 0000000..2cfc0f7
--- /dev/null
@@ -0,0 +1,39 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 320.00 340.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 320.00 340.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 305.00 1224.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 325.00)
+              (bounds 305.00 15.00)
+            )
+            (GraphicsLayer
+              (position 305.00 0.00)
+              (bounds 15.00 325.00)
+            )
+            (GraphicsLayer
+              (position 305.00 325.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index ee2c672..2a1338d 100644 (file)
             (GraphicsLayer
               (position 1.00 186.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 186.00 1.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/gpu/compositedscrolling/overflow/textarea-scroll-touch-expected.txt
new file mode 100644 (file)
index 0000000..9068827
--- /dev/null
@@ -0,0 +1,69 @@
+  
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 18.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 248.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index 067bc86..1621d51 100644 (file)
             (GraphicsLayer
               (position 0.00 185.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 185.00 0.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/become-overlapped-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/become-overlapped-iframe-expected.txt
new file mode 100644 (file)
index 0000000..5cc271f
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 58.00 58.00)
+          (bounds 350.00 200.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 15.00 15.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 305.00 170.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 305.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 305.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 305.00 0.00)
+                  (bounds 15.00 170.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 150.00 150.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/composited-parent-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/composited-parent-iframe-expected.txt
new file mode 100644 (file)
index 0000000..38cc114
--- /dev/null
@@ -0,0 +1,55 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position -12.00 -12.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-delayed-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-delayed-expected.txt
new file mode 100644 (file)
index 0000000..376911e
--- /dev/null
@@ -0,0 +1,63 @@
+
+When the parent document becomes composited, the layer trees should get connected together.
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 108.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 100.00 100.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe2-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe2-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe3-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/connect-compositing-iframe3-expected.txt
new file mode 100644 (file)
index 0000000..90057a7
--- /dev/null
@@ -0,0 +1,55 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/enter-compositing-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/enter-compositing-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-resize-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-resize-expected.txt
new file mode 100644 (file)
index 0000000..a6cd44f
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 470.00 190.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 385.00 120.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 385.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 385.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 120.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-size-from-zero-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/iframe-size-from-zero-expected.txt
new file mode 100644 (file)
index 0000000..edc4f9e
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 28.00 28.00)
+          (bounds 330.00 180.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 15.00 15.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/invisible-nested-iframe-show-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/invisible-nested-iframe-show-expected.txt
new file mode 100644 (file)
index 0000000..852e5fa
--- /dev/null
@@ -0,0 +1,93 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (bounds 358.00 208.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 23.00 23.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 193.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 193.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 8.00 8.00)
+                                  (bounds 252.00 172.00)
+                                  (drawsContent 1)
+                                  (children 1
+                                    (GraphicsLayer
+                                      (position 1.00 1.00)
+                                      (children 1
+                                        (GraphicsLayer
+                                          (bounds 250.00 170.00)
+                                          (children 1
+                                            (GraphicsLayer
+                                              (children 1
+                                                (GraphicsLayer
+                                                  (bounds 250.00 230.00)
+                                                  (children 1
+                                                    (GraphicsLayer
+                                                      (bounds 250.00 230.00)
+                                                      (drawsContent 1)
+                                                      (children 1
+                                                        (GraphicsLayer
+                                                          (position 18.00 10.00)
+                                                          (bounds 210.00 210.00)
+                                                          (contentsOpaque 1)
+                                                          (drawsContent 1)
+                                                        )
+                                                      )
+                                                    )
+                                                  )
+                                                )
+                                              )
+                                            )
+                                          )
+                                        )
+                                      )
+                                    )
+                                  )
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 18.00 203.00)
+          (bounds 210.00 210.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/overlapped-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/overlapped-iframe-expected.txt
new file mode 100644 (file)
index 0000000..0187f70
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/resizer-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/resizer-expected.txt
new file mode 100644 (file)
index 0000000..37e83f7
--- /dev/null
@@ -0,0 +1,60 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 304.00 154.00)
+          (drawsContent 1)
+          (children 2
+            (GraphicsLayer
+              (position 2.00 2.00)
+              (children 2
+                (GraphicsLayer
+                  (bounds 285.00 150.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 285.00 230.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 285.00 230.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 18.00 10.00)
+                                  (bounds 210.00 210.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 150.00)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 287.00 137.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/scrolling-iframe-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/iframes/scrolling-iframe-expected.txt
new file mode 100644 (file)
index 0000000..fe8c244
--- /dev/null
@@ -0,0 +1,70 @@
+
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 8.00 8.00)
+          (bounds 370.00 220.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (position 35.00 35.00)
+              (children 4
+                (GraphicsLayer
+                  (bounds 285.00 135.00)
+                  (children 1
+                    (GraphicsLayer
+                      (position -80.00 -80.00)
+                      (children 1
+                        (GraphicsLayer
+                          (bounds 508.00 608.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 508.00 608.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 108.00 100.00)
+                                  (bounds 200.00 200.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 285.00 0.00)
+                  (bounds 15.00 135.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 135.00)
+                  (bounds 285.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 285.00 135.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 5.00 5.00)
+          (bounds 50.00 50.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt
new file mode 100644 (file)
index 0000000..c71afc5
--- /dev/null
@@ -0,0 +1,54 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 28.00 20.00)
+          (bounds 202.00 202.00)
+          (drawsContent 1)
+          (children 4
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 200.00 200.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 200.00 300.00)
+                  (drawsContent 1)
+                  (children 2
+                    (GraphicsLayer
+                      (bounds 202.00 202.00)
+                      (drawsContent 1)
+                    )
+                    (GraphicsLayer
+                      (bounds 200.00 150.00)
+                      (contentsOpaque 1)
+                      (drawsContent 1)
+                    )
+                  )
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 1.00 186.00)
+              (bounds 185.00 15.00)
+            )
+            (GraphicsLayer
+              (position 186.00 1.00)
+              (bounds 15.00 185.00)
+            )
+            (GraphicsLayer
+              (position 186.00 186.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/scrolling-content-clip-to-viewport-expected.txt
new file mode 100644 (file)
index 0000000..2cfc0f7
--- /dev/null
@@ -0,0 +1,39 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 320.00 340.00)
+          (children 4
+            (GraphicsLayer
+              (bounds 320.00 340.00)
+              (children 1
+                (GraphicsLayer
+                  (bounds 305.00 1224.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 0.00 325.00)
+              (bounds 305.00 15.00)
+            )
+            (GraphicsLayer
+              (position 305.00 0.00)
+              (bounds 15.00 325.00)
+            )
+            (GraphicsLayer
+              (position 305.00 325.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index ee2c672..2a1338d 100644 (file)
             (GraphicsLayer
               (position 1.00 186.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 186.00 1.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/overflow/textarea-scroll-touch-expected.txt
new file mode 100644 (file)
index 0000000..9068827
--- /dev/null
@@ -0,0 +1,69 @@
+  
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 2
+        (GraphicsLayer
+          (position 18.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+        (GraphicsLayer
+          (position 248.00 18.00)
+          (bounds 206.00 126.00)
+          (contentsOpaque 1)
+          (drawsContent 1)
+          (children 3
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 204.00 124.00)
+              (children 1
+                (GraphicsLayer
+                  (position 0.00 -50.00)
+                  (bounds 189.00 328.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+            (GraphicsLayer
+              (position 190.00 1.00)
+              (bounds 15.00 109.00)
+            )
+            (GraphicsLayer
+              (position 190.00 110.00)
+              (bounds 15.00 15.00)
+              (drawsContent 1)
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index 067bc86..1621d51 100644 (file)
             (GraphicsLayer
               (position 0.00 185.00)
               (bounds 185.00 15.00)
-              (drawsContent 1)
             )
             (GraphicsLayer
               (position 185.00 0.00)
               (bounds 15.00 185.00)
-              (drawsContent 1)
               (repaint rects
                 (rect 0.00 0.00 15.00 185.00)
               )
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
new file mode 100644 (file)
index 0000000..060f064
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 51.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/LayoutTests/platform/chromium-linux/platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
new file mode 100644 (file)
index 0000000..a2594db
--- /dev/null
@@ -0,0 +1,62 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (bounds 400.00 400.00)
+          (drawsContent 1)
+          (children 1
+            (GraphicsLayer
+              (children 4
+                (GraphicsLayer
+                  (bounds 385.00 385.00)
+                  (children 1
+                    (GraphicsLayer
+                      (children 1
+                        (GraphicsLayer
+                          (position -615.00 0.00)
+                          (bounds 1000.00 1000.00)
+                          (children 1
+                            (GraphicsLayer
+                              (bounds 1000.00 1000.00)
+                              (drawsContent 1)
+                              (children 1
+                                (GraphicsLayer
+                                  (position 665.00 50.00)
+                                  (bounds 100.00 100.00)
+                                  (contentsOpaque 1)
+                                  (drawsContent 1)
+                                )
+                              )
+                            )
+                          )
+                        )
+                      )
+                    )
+                  )
+                )
+                (GraphicsLayer
+                  (position 385.00 0.00)
+                  (bounds 15.00 385.00)
+                )
+                (GraphicsLayer
+                  (position 0.00 385.00)
+                  (bounds 385.00 15.00)
+                )
+                (GraphicsLayer
+                  (position 385.00 385.00)
+                  (bounds 15.00 15.00)
+                  (drawsContent 1)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
index 4fe7ee4..007b53f 100644 (file)
@@ -4438,3 +4438,12 @@ webkit.org/b/110851 platform/chromium/virtual/softwarecompositing/geometry/fixed
 webkit.org/b/110851 platform/chromium/virtual/softwarecompositing/overflow/overflow-scaled-descendant-overlapping.html [ ImageOnlyFailure ]
 webkit.org/b/110851 platform/chromium/virtual/softwarecompositing/repaint/page-scale-repaint.html [ ImageOnlyFailure ]
 
+# Impl-side scrolling is broken for RTL. Causing impl-side scrollbar artifacts.
+crbug.com/175926 [ Linux ] compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] compositing/rtl/rtl-iframe-absolute-overflow.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] compositing/rtl/rtl-iframe-fixed-overflow.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-absolute-overflow.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ ImageOnlyFailure ]
+crbug.com/175926 [ Linux ] platform/chromium/virtual/softwarecompositing/rtl/rtl-iframe-fixed-overflow.html [ ImageOnlyFailure ]
index 915800c..916f909 100644 (file)
@@ -1,3 +1,95 @@
+2013-02-26  Tien-Ren Chen  <trchen@chromium.org>
+
+        Implement coordinated scrollbar for subframes and overflow:scroll
+        https://bugs.webkit.org/show_bug.cgi?id=109560
+
+        Reviewed by James Robinson.
+
+        This patch obsoletes ScrollingCoordinatorPrivate for the Chromium
+        implementation. Also removes the concept of a single main scrolling
+        layer. Should use HashMap to keep track resources for multiple
+        scrollable objects.
+
+        Many of the callbacks are extended to support ScrollableArea instead
+        of just FrameView. Now ScrollingCoordinatorChromium coordinates
+        scrollbars for both subframes and overflow:scroll.
+
+        Some drive-by change:
+        1. Remove the GraphicsLayer parameter for layer change callbacks.
+           Should be able to get the latest layer from the ScrollableArea anyway.
+        2. Should start from main frame document when updating touch event target rects.
+
+        New chromium test: ScrollingCoordinatorChromiumTest.iframeScrolling
+
+        * page/Frame.cpp:
+        (WebCore::Frame::willDetachPage):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::prepareForDetach):
+        (WebCore::FrameView::layerForScrolling):
+        (WebCore):
+        * page/FrameView.h:
+        (FrameView):
+        * page/scrolling/ScrollingCoordinator.cpp:
+        (WebCore::ScrollingCoordinator::scrollLayerForScrollableArea):
+        (WebCore):
+        (WebCore::ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea):
+        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
+        * page/scrolling/ScrollingCoordinator.h:
+        (WebCore::ScrollingCoordinator::willDestroyScrollableArea):
+        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
+        (WebCore::ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
+        (ScrollingCoordinator):
+        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
+        (WebCore::scrollingWebLayerForGraphicsLayer):
+        (WebCore::ScrollingCoordinatorChromium::scrollingWebLayerForScrollableArea):
+        (WebCore::ScrollingCoordinatorChromium::ScrollingCoordinatorChromium):
+        (WebCore::ScrollingCoordinatorChromium::~ScrollingCoordinatorChromium):
+        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
+        (WebCore::ScrollingCoordinatorChromium::touchEventTargetRectsDidChange):
+        (WebCore::createScrollbarLayer):
+        (WebCore::detachScrollbarLayer):
+        (WebCore::setupScrollbarLayer):
+        (WebCore::ScrollingCoordinatorChromium::willDestroyScrollableArea):
+        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollbarLayerDidChange):
+        (WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
+        (WebCore::ScrollingCoordinatorChromium::setTouchEventTargetRects):
+        (WebCore::ScrollingCoordinatorChromium::setWheelEventHandlerCount):
+        (WebCore::ScrollingCoordinatorChromium::setShouldUpdateScrollLayerPositionOnMainThread):
+        (WebCore::ScrollingCoordinatorChromium::setLayerIsContainerForFixedPositionLayers):
+        (WebCore::ScrollingCoordinatorChromium::setLayerIsFixedToContainerLayer):
+        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange):
+        (WebCore::ScrollingCoordinatorChromium::addWebScrollbarLayer):
+        (WebCore):
+        (WebCore::ScrollingCoordinatorChromium::getWebScrollbarLayer):
+        (WebCore::ScrollingCoordinatorChromium::removeWebScrollbarLayer):
+        * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
+        (WebCore):
+        (ScrollingCoordinatorChromium):
+        * page/scrolling/mac/ScrollingCoordinatorMac.h:
+        (ScrollingCoordinatorMac):
+        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
+        (WebCore::ScrollingCoordinatorMac::scrollableAreaScrollbarLayerDidChange):
+        * platform/ScrollableArea.h:
+        (ScrollableArea):
+        (WebCore::ScrollableArea::layerForScrolling):
+        * platform/graphics/GraphicsLayer.h:
+        (GraphicsLayer):
+        (WebCore::GraphicsLayer::setContentsToPlatformLayer):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::~RenderLayer):
+        (WebCore::RenderLayer::layerForScrolling):
+        (WebCore):
+        * rendering/RenderLayer.h:
+        (RenderLayer):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
+        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
+        (WebCore::RenderLayerBacking::updateScrollingLayers):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::frameViewDidScroll):
+        (WebCore::RenderLayerCompositor::scrollingLayerDidChange):
+        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
+
 2013-02-26  Kentaro Hara  <haraken@chromium.org>
 
         [V8] Overloaded constructors don't need header declarations
index 1237ff9..5d06cac 100644 (file)
@@ -77,6 +77,7 @@
 #include "ScriptController.h"
 #include "ScriptSourceCode.h"
 #include "ScriptValue.h"
+#include "ScrollingCoordinator.h"
 #include "Settings.h"
 #include "StylePropertySet.h"
 #include "TextIterator.h"
@@ -690,6 +691,9 @@ void Frame::willDetachPage()
     if (page() && page()->focusController()->focusedFrame() == this)
         page()->focusController()->setFocusedFrame(0);
 
+    if (page() && page()->scrollingCoordinator() && m_view)
+        page()->scrollingCoordinator()->willDestroyScrollableArea(m_view.get());
+
     script()->clearScriptObjects();
     script()->updatePlatformScriptObjects();
 }
index 10c00c5..a84e56e 100644 (file)
@@ -364,6 +364,11 @@ void FrameView::prepareForDetach()
     // When the view is no longer associated with a frame, it needs to be removed from the ax object cache
     // right now, otherwise it won't be able to reach the topDocument()'s axObject cache later.
     removeFromAXObjectCache();
+
+    if (m_frame && m_frame->page()) {
+        if (ScrollingCoordinator* scrollingCoordinator = m_frame->page()->scrollingCoordinator())
+            scrollingCoordinator->willDestroyScrollableArea(this);
+    }
 }
 
 void FrameView::detachCustomScrollbars()
@@ -791,6 +796,14 @@ bool FrameView::usesCompositedScrolling() const
     return false;
 }
 
+GraphicsLayer* FrameView::layerForScrolling() const
+{
+    RenderView* renderView = this->renderView();
+    if (!renderView)
+        return 0;
+    return renderView->compositor()->scrollLayer();
+}
+
 GraphicsLayer* FrameView::layerForHorizontalScrollbar() const
 {
     RenderView* renderView = this->renderView();
index 494ae47..cc9f1a8 100644 (file)
@@ -454,6 +454,7 @@ private:
     virtual bool scrollAnimatorEnabled() const OVERRIDE;
 #if USE(ACCELERATED_COMPOSITING)
     virtual bool usesCompositedScrolling() const OVERRIDE;
+    virtual GraphicsLayer* layerForScrolling() const OVERRIDE;
     virtual GraphicsLayer* layerForHorizontalScrollbar() const OVERRIDE;
     virtual GraphicsLayer* layerForVerticalScrollbar() const OVERRIDE;
     virtual GraphicsLayer* layerForScrollCorner() const OVERRIDE;
index 1440d9c..bede4fe 100644 (file)
@@ -272,6 +272,21 @@ void ScrollingCoordinator::frameViewFixedObjectsDidChange(FrameView* frameView)
     updateShouldUpdateScrollLayerPositionOnMainThread();
 }
 
+GraphicsLayer* ScrollingCoordinator::scrollLayerForScrollableArea(ScrollableArea* scrollableArea)
+{
+    return scrollableArea->layerForScrolling();
+}
+
+GraphicsLayer* ScrollingCoordinator::horizontalScrollbarLayerForScrollableArea(ScrollableArea* scrollableArea)
+{
+    return scrollableArea->layerForHorizontalScrollbar();
+}
+
+GraphicsLayer* ScrollingCoordinator::verticalScrollbarLayerForScrollableArea(ScrollableArea* scrollableArea)
+{
+    return scrollableArea->layerForVerticalScrollbar();
+}
+
 GraphicsLayer* ScrollingCoordinator::scrollLayerForFrameView(FrameView* frameView)
 {
 #if USE(ACCELERATED_COMPOSITING)
index f183f31..d6c335d 100644 (file)
@@ -149,9 +149,9 @@ public:
 
     // These virtual functions are currently unique to Chromium's WebLayer approach. Their meaningful
     // implementations are in ScrollingCoordinatorChromium.
-    virtual void frameViewHorizontalScrollbarLayerDidChange(FrameView*, GraphicsLayer*) { }
-    virtual void frameViewVerticalScrollbarLayerDidChange(FrameView*, GraphicsLayer*) { }
-    virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*, GraphicsLayer*) { }
+    virtual void willDestroyScrollableArea(ScrollableArea*) { }
+    virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*) { }
+    virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation) { }
     virtual void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool) { }
     virtual void setLayerIsFixedToContainerLayer(GraphicsLayer*, bool) { }
     virtual void touchEventTargetRectsDidChange(const Document*) { }
@@ -168,6 +168,10 @@ public:
 protected:
     explicit ScrollingCoordinator(Page*);
 
+    static GraphicsLayer* scrollLayerForScrollableArea(ScrollableArea*);
+    static GraphicsLayer* horizontalScrollbarLayerForScrollableArea(ScrollableArea*);
+    static GraphicsLayer* verticalScrollbarLayerForScrollableArea(ScrollableArea*);
+
     unsigned computeCurrentWheelEventHandlerCount();
     GraphicsLayer* scrollLayerForFrameView(FrameView*);
     GraphicsLayer* counterScrollingLayerForFrameView(FrameView*);
index a741f8d..258b166 100644 (file)
@@ -51,59 +51,28 @@ using WebKit::WebVector;
 
 namespace WebCore {
 
-class ScrollingCoordinatorPrivate {
-WTF_MAKE_NONCOPYABLE(ScrollingCoordinatorPrivate);
-public:
-    ScrollingCoordinatorPrivate()
-        : m_scrollLayer(0)
-    {
-    }
-
-    ~ScrollingCoordinatorPrivate()
-    {
-        if (m_horizontalScrollbarLayer)
-            GraphicsLayerChromium::unregisterContentsLayer(m_horizontalScrollbarLayer->layer());
-        if (m_verticalScrollbarLayer)
-            GraphicsLayerChromium::unregisterContentsLayer(m_verticalScrollbarLayer->layer());
-    }
-
-    void setScrollLayer(WebLayer* layer)
-    {
-        m_scrollLayer = layer;
-
-        if (m_horizontalScrollbarLayer)
-            m_horizontalScrollbarLayer->setScrollLayer(layer);
-        if (m_verticalScrollbarLayer)
-            m_verticalScrollbarLayer->setScrollLayer(layer);
-    }
-
-    void setHorizontalScrollbarLayer(PassOwnPtr<WebScrollbarLayer> layer)
-    {
-        m_horizontalScrollbarLayer = layer;
-    }
-
-    void setVerticalScrollbarLayer(PassOwnPtr<WebScrollbarLayer> layer)
-    {
-        m_verticalScrollbarLayer = layer;
-    }
-
-    WebLayer* scrollLayer() const { return m_scrollLayer; }
+static WebLayer* scrollingWebLayerForGraphicsLayer(GraphicsLayer* layer)
+{
+    return layer->platformLayer();
+}
 
-private:
-    WebLayer* m_scrollLayer;
-    OwnPtr<WebScrollbarLayer> m_horizontalScrollbarLayer;
-    OwnPtr<WebScrollbarLayer> m_verticalScrollbarLayer;
-};
+WebLayer* ScrollingCoordinatorChromium::scrollingWebLayerForScrollableArea(ScrollableArea* scrollableArea)
+{
+    GraphicsLayer* graphicsLayer = scrollLayerForScrollableArea(scrollableArea);
+    return graphicsLayer ? scrollingWebLayerForGraphicsLayer(graphicsLayer) : 0;
+}
 
 ScrollingCoordinatorChromium::ScrollingCoordinatorChromium(Page* page)
     : ScrollingCoordinator(page)
-    , m_private(new ScrollingCoordinatorPrivate)
 {
 }
 
 ScrollingCoordinatorChromium::~ScrollingCoordinatorChromium()
 {
-    delete m_private;
+    for (ScrollbarMap::iterator it = m_horizontalScrollbars.begin(); it != m_horizontalScrollbars.end(); ++it)
+        GraphicsLayerChromium::unregisterContentsLayer(it->value->layer());
+    for (ScrollbarMap::iterator it = m_verticalScrollbars.begin(); it != m_verticalScrollbars.end(); ++it)
+        GraphicsLayerChromium::unregisterContentsLayer(it->value->layer());
 }
 
 void ScrollingCoordinatorChromium::frameViewLayoutUpdated(FrameView* frameView)
@@ -121,173 +90,171 @@ void ScrollingCoordinatorChromium::frameViewLayoutUpdated(FrameView* frameView)
     computeAbsoluteTouchEventTargetRects(m_page->mainFrame()->document(), touchEventTargetRects);
     setTouchEventTargetRects(touchEventTargetRects);
 #endif
-    if (m_private->scrollLayer())
-        m_private->scrollLayer()->setBounds(frameView->contentsSize());
+    if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(frameView))
+        scrollLayer->setBounds(frameView->contentsSize());
 }
 
-void ScrollingCoordinatorChromium::touchEventTargetRectsDidChange(const Document* document)
+void ScrollingCoordinatorChromium::touchEventTargetRectsDidChange(const Document*)
 {
 #if ENABLE(TOUCH_EVENT_TRACKING)
+    // The rects are always evaluated and used in the main frame coordinates.
+    FrameView* frameView = m_page->mainFrame()->view();
+    Document* document = m_page->mainFrame()->document();
+
     // Wait until after layout to update.
-    if (m_page->mainFrame()->view()->needsLayout())
+    if (frameView->needsLayout() || !document)
         return;
 
-    // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    if (m_private->scrollLayer()) {
-        Vector<IntRect> touchEventTargetRects;
-        computeAbsoluteTouchEventTargetRects(document, touchEventTargetRects);
-        setTouchEventTargetRects(touchEventTargetRects);
-    }
-#else
-    UNUSED_PARAM(document);
+    Vector<IntRect> touchEventTargetRects;
+    computeAbsoluteTouchEventTargetRects(document, touchEventTargetRects);
+    setTouchEventTargetRects(touchEventTargetRects);
 #endif
 }
 
-void ScrollingCoordinatorChromium::frameViewRootLayerDidChange(FrameView* frameView)
+static PassOwnPtr<WebScrollbarLayer> createScrollbarLayer(Scrollbar* scrollbar)
 {
-    ScrollingCoordinator::frameViewRootLayerDidChange(frameView);
-    setScrollLayer(scrollLayerForFrameView(frameView));
+    // All Chromium scrollbar themes derive from ScrollbarThemeComposite.
+    ScrollbarThemeComposite* themeComposite = static_cast<ScrollbarThemeComposite*>(scrollbar->theme());
+    WebKit::WebScrollbarThemePainter painter(themeComposite, scrollbar);
+    OwnPtr<WebKit::WebScrollbarThemeGeometry> geometry(WebKit::WebScrollbarThemeGeometryNative::create(themeComposite));
+
+    OwnPtr<WebScrollbarLayer> scrollbarLayer = adoptPtr(WebKit::Platform::current()->compositorSupport()->createScrollbarLayer(new WebKit::WebScrollbarImpl(scrollbar), painter, geometry.leakPtr()));
+    GraphicsLayerChromium::registerContentsLayer(scrollbarLayer->layer());
+    return scrollbarLayer.release();
 }
 
-static WebLayer* scrollableLayerForGraphicsLayer(GraphicsLayer* layer)
+static void detachScrollbarLayer(GraphicsLayer* scrollbarGraphicsLayer)
 {
-    return layer->platformLayer();
+    ASSERT(scrollbarGraphicsLayer);
+
+    scrollbarGraphicsLayer->setContentsToPlatformLayer(0);
+    scrollbarGraphicsLayer->setDrawsContent(true);
 }
 
-PassOwnPtr<WebScrollbarLayer> ScrollingCoordinatorChromium::createScrollbarLayer(Scrollbar* scrollbar, WebLayer* scrollLayer, GraphicsLayer* scrollbarGraphicsLayer, FrameView* frameView)
+static void setupScrollbarLayer(GraphicsLayer* scrollbarGraphicsLayer, WebScrollbarLayer* scrollbarLayer, WebLayer* scrollLayer)
 {
-    ASSERT(scrollbar);
     ASSERT(scrollbarGraphicsLayer);
+    ASSERT(scrollbarLayer);
 
     if (!scrollLayer) {
-        // FIXME: sometimes we get called before setScrollLayer, workaround by finding the scroll layout ourselves.
-        scrollLayer = scrollableLayerForGraphicsLayer(scrollLayerForFrameView(frameView));
-        ASSERT(scrollLayer);
-    }
-
-    // Root layer non-overlay scrollbars should be marked opaque to disable
-    // blending.
-    bool isOpaqueRootScrollbar = !frameView->parent() && !scrollbar->isOverlayScrollbar();
-    if (!scrollbarGraphicsLayer->contentsOpaque())
-        scrollbarGraphicsLayer->setContentsOpaque(isOpaqueRootScrollbar);
-
-    // FIXME: Mac scrollbar themes are not thread-safe to paint.
-    bool platformSupported = true;
-#if OS(DARWIN)
-    platformSupported = false;
-#endif
-
-    if (!platformSupported || scrollbar->isCustomScrollbar()) {
-        scrollbarGraphicsLayer->setContentsToMedia(0);
-        scrollbarGraphicsLayer->setDrawsContent(true);
-        return nullptr;
+        detachScrollbarLayer(scrollbarGraphicsLayer);
+        return;
     }
-
-    // All Chromium scrollbar themes derive from ScrollbarThemeComposite.
-    ScrollbarThemeComposite* themeComposite = static_cast<ScrollbarThemeComposite*>(scrollbar->theme());
-    WebKit::WebScrollbarThemePainter painter(themeComposite, scrollbar);
-    OwnPtr<WebKit::WebScrollbarThemeGeometry> geometry(WebKit::WebScrollbarThemeGeometryNative::create(themeComposite));
-
-    OwnPtr<WebScrollbarLayer> scrollbarLayer = adoptPtr(WebKit::Platform::current()->compositorSupport()->createScrollbarLayer(new WebKit::WebScrollbarImpl(scrollbar), painter, geometry.leakPtr()));
     scrollbarLayer->setScrollLayer(scrollLayer);
-
-    GraphicsLayerChromium::registerContentsLayer(scrollbarLayer->layer());
-    scrollbarGraphicsLayer->setContentsToMedia(scrollbarLayer->layer());
+    scrollbarGraphicsLayer->setContentsToPlatformLayer(scrollbarLayer->layer());
     scrollbarGraphicsLayer->setDrawsContent(false);
-    scrollbarLayer->layer()->setOpaque(scrollbarGraphicsLayer->contentsOpaque());
-
-    return scrollbarLayer.release();
 }
 
-void ScrollingCoordinatorChromium::frameViewHorizontalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer* horizontalScrollbarLayer)
+void ScrollingCoordinatorChromium::willDestroyScrollableArea(ScrollableArea* scrollableArea)
 {
-    if (!horizontalScrollbarLayer || !coordinatesScrollingForFrameView(frameView))
-        return;
-
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    m_private->setHorizontalScrollbarLayer(createScrollbarLayer(frameView->horizontalScrollbar(), m_private->scrollLayer(), horizontalScrollbarLayer, frameView));
+    removeWebScrollbarLayer(scrollableArea, HorizontalScrollbar);
+    removeWebScrollbarLayer(scrollableArea, VerticalScrollbar);
 }
 
-void ScrollingCoordinatorChromium::frameViewVerticalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer* verticalScrollbarLayer)
+void ScrollingCoordinatorChromium::scrollableAreaScrollbarLayerDidChange(ScrollableArea* scrollableArea, ScrollbarOrientation orientation)
 {
-    if (!verticalScrollbarLayer || !coordinatesScrollingForFrameView(frameView))
+#if OS(DARWIN)
+    static const bool platformSupportsCoordinatedScrollbar = false;
+    static const bool platformSupportsMainFrameOnly = false; // Don't care.
+#elif OS(WINDOWS)
+    static const bool platformSupportsCoordinatedScrollbar = true;
+    static const bool platformSupportsMainFrameOnly = true;
+#else
+    static const bool platformSupportsCoordinatedScrollbar = true;
+    static const bool platformSupportsMainFrameOnly = false;
+#endif
+    if (!platformSupportsCoordinatedScrollbar)
         return;
 
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    m_private->setVerticalScrollbarLayer(createScrollbarLayer(frameView->verticalScrollbar(), m_private->scrollLayer(), verticalScrollbarLayer, frameView));
-}
+    bool isMainFrame = (scrollableArea == static_cast<ScrollableArea*>(m_page->mainFrame()->view()));
+    if (!isMainFrame && platformSupportsMainFrameOnly)
+        return;
 
-void ScrollingCoordinatorChromium::setScrollLayer(GraphicsLayer* scrollLayer)
-{
-    m_private->setScrollLayer(scrollLayer ? scrollableLayerForGraphicsLayer(scrollLayer) : 0);
+    GraphicsLayer* scrollbarGraphicsLayer = orientation == HorizontalScrollbar ? horizontalScrollbarLayerForScrollableArea(scrollableArea) : verticalScrollbarLayerForScrollableArea(scrollableArea);
+    if (scrollbarGraphicsLayer) {
+        Scrollbar* scrollbar = orientation == HorizontalScrollbar ? scrollableArea->horizontalScrollbar() : scrollableArea->verticalScrollbar();
+        if (scrollbar->isCustomScrollbar()) {
+            detachScrollbarLayer(scrollbarGraphicsLayer);
+            return;
+        }
+
+        WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, orientation);
+        if (!scrollbarLayer)
+            scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, createScrollbarLayer(scrollbar));
+
+        // Root layer non-overlay scrollbars should be marked opaque to disable
+        // blending.
+        bool isOpaqueScrollbar = !scrollbar->isOverlayScrollbar();
+        if (!scrollbarGraphicsLayer->contentsOpaque())
+            scrollbarGraphicsLayer->setContentsOpaque(isMainFrame && isOpaqueScrollbar);
+        scrollbarLayer->layer()->setOpaque(scrollbarGraphicsLayer->contentsOpaque());
+
+        setupScrollbarLayer(scrollbarGraphicsLayer, scrollbarLayer, scrollingWebLayerForScrollableArea(scrollableArea));
+    } else
+        removeWebScrollbarLayer(scrollableArea, orientation);
 }
 
 void ScrollingCoordinatorChromium::setNonFastScrollableRegion(const Region& region)
 {
-    // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    if (m_private->scrollLayer()) {
+    if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) {
         Vector<IntRect> rects = region.rects();
         WebVector<WebRect> webRects(rects.size());
         for (size_t i = 0; i < rects.size(); ++i)
             webRects[i] = rects[i];
-        m_private->scrollLayer()->setNonFastScrollableRegion(webRects);
+        scrollLayer->setNonFastScrollableRegion(webRects);
     }
 }
 
 void ScrollingCoordinatorChromium::setTouchEventTargetRects(const Vector<IntRect>& absoluteHitTestRects)
 {
-    // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    if (m_private->scrollLayer()) {
+    if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) {
         WebVector<WebRect> webRects(absoluteHitTestRects.size());
         for (size_t i = 0; i < absoluteHitTestRects.size(); ++i)
             webRects[i] = absoluteHitTestRects[i];
-        m_private->scrollLayer()->setTouchEventHandlerRegion(webRects);
+        scrollLayer->setTouchEventHandlerRegion(webRects);
     }
 }
 
 void ScrollingCoordinatorChromium::setWheelEventHandlerCount(unsigned wheelEventHandlerCount)
 {
-    // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    if (m_private->scrollLayer())
-        m_private->scrollLayer()->setHaveWheelEventHandlers(wheelEventHandlerCount > 0);
+    if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view()))
+        scrollLayer->setHaveWheelEventHandlers(wheelEventHandlerCount > 0);
 }
 
 void ScrollingCoordinatorChromium::setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons reasons)
 {
-    // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
-    setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
-    if (m_private->scrollLayer())
-        m_private->scrollLayer()->setShouldScrollOnMainThread(reasons);
+    if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view()))
+        scrollLayer->setShouldScrollOnMainThread(reasons);
 }
 
 void ScrollingCoordinatorChromium::setLayerIsContainerForFixedPositionLayers(GraphicsLayer* layer, bool enable)
 {
-    if (WebLayer* scrollableLayer = scrollableLayerForGraphicsLayer(layer))
+    if (WebLayer* scrollableLayer = scrollingWebLayerForGraphicsLayer(layer))
         scrollableLayer->setIsContainerForFixedPositionLayers(enable);
 }
 
 void ScrollingCoordinatorChromium::setLayerIsFixedToContainerLayer(GraphicsLayer* layer, bool enable)
 {
-    if (WebLayer* scrollableLayer = scrollableLayerForGraphicsLayer(layer))
+    if (WebLayer* scrollableLayer = scrollingWebLayerForGraphicsLayer(layer))
         scrollableLayer->setFixedToContainerLayer(enable);
 }
 
-void ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange(ScrollableArea* scrollableArea, GraphicsLayer* scrollLayer)
+void ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange(ScrollableArea* scrollableArea)
 {
-    if (!scrollLayer)
-        return;
-    GraphicsLayerChromium* layer = static_cast<GraphicsLayerChromium*>(scrollLayer);
-    layer->setScrollableArea(scrollableArea);
+    GraphicsLayerChromium* scrollLayer = static_cast<GraphicsLayerChromium*>(scrollLayerForScrollableArea(scrollableArea));
+    if (scrollLayer)
+        scrollLayer->setScrollableArea(scrollableArea);
 
-    if (WebLayer* webLayer = scrollLayer->platformLayer()) {
+    WebLayer* webLayer = scrollingWebLayerForScrollableArea(scrollableArea);
+    if (webLayer) {
         webLayer->setScrollable(true);
         webLayer->setScrollPosition(scrollableArea->scrollPosition());
         webLayer->setMaxScrollPosition(IntSize(scrollableArea->scrollSize(HorizontalScrollbar), scrollableArea->scrollSize(VerticalScrollbar)));
     }
+    if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, HorizontalScrollbar))
+        setupScrollbarLayer(horizontalScrollbarLayerForScrollableArea(scrollableArea), scrollbarLayer, webLayer);
+    if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, VerticalScrollbar))
+        setupScrollbarLayer(verticalScrollbarLayerForScrollableArea(scrollableArea), scrollbarLayer, webLayer);
 }
 
 void ScrollingCoordinatorChromium::recomputeWheelEventHandlerCountForFrameView(FrameView* frameView)
@@ -296,4 +263,23 @@ void ScrollingCoordinatorChromium::recomputeWheelEventHandlerCountForFrameView(F
     setWheelEventHandlerCount(computeCurrentWheelEventHandlerCount());
 }
 
+WebScrollbarLayer* ScrollingCoordinatorChromium::addWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation, PassOwnPtr<WebKit::WebScrollbarLayer> scrollbarLayer)
+{
+    ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars;
+    return scrollbars.add(scrollableArea, scrollbarLayer).iterator->value.get();
+}
+
+WebScrollbarLayer* ScrollingCoordinatorChromium::getWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation)
+{
+    ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars;
+    return scrollbars.get(scrollableArea);
+}
+
+void ScrollingCoordinatorChromium::removeWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation)
+{
+    ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars;
+    if (OwnPtr<WebScrollbarLayer> scrollbarLayer = scrollbars.take(scrollableArea))
+        GraphicsLayerChromium::unregisterContentsLayer(scrollbarLayer->layer());
+}
+
 }
index ad36f11..c1c029a 100644 (file)
@@ -36,7 +36,6 @@ class WebLayer;
 namespace WebCore {
 
 class Scrollbar;
-class ScrollingCoordinatorPrivate;
 
 class ScrollingCoordinatorChromium : public ScrollingCoordinator {
 public:
@@ -46,15 +45,6 @@ public:
     // Should be called whenever the given frame view has been laid out.
     virtual void frameViewLayoutUpdated(FrameView*);
 
-    // Should be called whenever the root layer for the given frame view changes.
-    virtual void frameViewRootLayerDidChange(FrameView*);
-
-    // Should be called whenever the horizontal scrollbar layer for the given frame view changes.
-    virtual void frameViewHorizontalScrollbarLayerDidChange(FrameView*, GraphicsLayer*);
-
-    // Should be called whenever the vertical scrollbar layer for the given frame view changes.
-    virtual void frameViewVerticalScrollbarLayerDidChange(FrameView*, GraphicsLayer*);
-
     // Return whether this scrolling coordinator can keep fixed position layers fixed to their
     // containers while scrolling.
     virtual bool supportsFixedPositionLayers() const { return true; }
@@ -65,8 +55,14 @@ public:
     // Attach/detach layer position to ancestor fixed position container.
     virtual void setLayerIsFixedToContainerLayer(GraphicsLayer*, bool);
 
+    // Should be called when a ScrollableArea is getting destroyed.
+    virtual void willDestroyScrollableArea(ScrollableArea*);
+
     // Should be called whenever the scrollable layer for the given scroll area changes.
-    virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*, GraphicsLayer*);
+    virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*);
+
+    // Should be called whenever the scrollbar layer for the given scrollable area changes.
+    virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation);
 
     // Should be called whenever touch handlers are registered, removed, or moved.
     virtual void touchEventTargetRectsDidChange(const Document*) OVERRIDE;
@@ -75,13 +71,19 @@ private:
     virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*);
     virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons);
 
-    void setScrollLayer(GraphicsLayer*);
+    static WebKit::WebLayer* scrollingWebLayerForScrollableArea(ScrollableArea*);
+
     void setNonFastScrollableRegion(const Region&);
     void setTouchEventTargetRects(const Vector<IntRect>&);
     void setWheelEventHandlerCount(unsigned);
-    PassOwnPtr<WebKit::WebScrollbarLayer> createScrollbarLayer(Scrollbar*, WebKit::WebLayer* scrollLayer, GraphicsLayer* scrollbarGraphicsLayer, FrameView*);
 
-    ScrollingCoordinatorPrivate* m_private;
+    WebKit::WebScrollbarLayer* addWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation, PassOwnPtr<WebKit::WebScrollbarLayer>);
+    WebKit::WebScrollbarLayer* getWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
+    void removeWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
+
+    typedef HashMap<ScrollableArea*, OwnPtr<WebKit::WebScrollbarLayer> > ScrollbarMap;
+    ScrollbarMap m_horizontalScrollbars;
+    ScrollbarMap m_verticalScrollbars;
 };
 
 } // namespace WebCore
index ecefd5f..a6ce951 100644 (file)
@@ -52,11 +52,8 @@ public:
     // Should be called whenever the root layer for the given frame view changes.
     virtual void frameViewRootLayerDidChange(FrameView*);
 
-    // Should be called whenever the horizontal scrollbar layer for the given frame view changes.
-    virtual void frameViewHorizontalScrollbarLayerDidChange(FrameView*, GraphicsLayer* horizontalScrollbarLayer);
-
-    // Should be called whenever the vertical scrollbar layer for the given frame view changes.
-    virtual void frameViewVerticalScrollbarLayerDidChange(FrameView*, GraphicsLayer* verticalScrollbarLayer);
+    // Should be called whenever the scrollbar layer for the given scrollable area changes.
+    virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation);
 
     // Requests that the scrolling coordinator updates the scroll position of the given frame view. If this function returns true, it means that the
     // position will be updated asynchronously. If it returns false, the caller should update the scrolling position itself.
index e09fb76..f658cde 100644 (file)
@@ -190,23 +190,12 @@ void ScrollingCoordinatorMac::frameViewRootLayerDidChange(FrameView* frameView)
     setCounterScrollingLayerForNode(counterScrollingLayerForFrameView(frameView), node);
 }
 
-void ScrollingCoordinatorMac::frameViewHorizontalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer*)
+void ScrollingCoordinatorMac::scrollableAreaScrollbarLayerDidChange(ScrollableArea* scrollableArea, ScrollbarOrientation)
 {
     ASSERT(isMainThread());
     ASSERT(m_page);
 
-    if (frameView->frame() != m_page->mainFrame())
-        return;
-
-    // FIXME: Implement.
-}
-
-void ScrollingCoordinatorMac::frameViewVerticalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer*)
-{
-    ASSERT(isMainThread());
-    ASSERT(m_page);
-    
-    if (frameView->frame() != m_page->mainFrame())
+    if (scrollableArea != static_cast<ScrollableArea*>(m_page->mainFrame()->view()))
         return;
 
     // FIXME: Implement.
index 0049c23..3dedcc2 100644 (file)
@@ -193,6 +193,8 @@ protected:
     virtual void invalidateScrollCornerRect(const IntRect&) = 0;
 
 #if USE(ACCELERATED_COMPOSITING)
+    friend class ScrollingCoordinator;
+    virtual GraphicsLayer* layerForScrolling() const { return 0; }
     virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
     virtual GraphicsLayer* layerForVerticalScrollbar() const { return 0; }
     virtual GraphicsLayer* layerForScrollCorner() const { return 0; }
index 12f05c6..42d6c91 100644 (file)
@@ -349,6 +349,9 @@ public:
     // Pass an invalid color to remove the contents layer.
     virtual void setContentsToSolidColor(const Color&) { }
     virtual void setContentsToCanvas(PlatformLayer*) { }
+    // FIXME: webkit.org/b/109658
+    // Should unify setContentsToMedia and setContentsToCanvas
+    virtual void setContentsToPlatformLayer(PlatformLayer* layer) { setContentsToMedia(layer); }
     virtual bool hasContentsLayer() const { return false; }
 
     // Callback from the underlying graphics system to draw layer contents.
index e4ca609..d3ef5ed 100644 (file)
@@ -240,6 +240,11 @@ RenderLayer::~RenderLayer()
     destroyScrollbar(HorizontalScrollbar);
     destroyScrollbar(VerticalScrollbar);
 
+    if (renderer()->frame() && renderer()->frame()->page()) {
+        if (ScrollingCoordinator* scrollingCoordinator = renderer()->frame()->page()->scrollingCoordinator())
+            scrollingCoordinator->willDestroyScrollableArea(this);
+    }
+
     if (m_reflection)
         removeReflection();
     
@@ -5118,6 +5123,11 @@ bool RenderLayer::hasCompositedMask() const
     return m_backing && m_backing->hasMaskLayer();
 }
 
+GraphicsLayer* RenderLayer::layerForScrolling() const
+{
+    return m_backing ? m_backing->scrollingContentsLayer() : 0;
+}
+
 GraphicsLayer* RenderLayer::layerForHorizontalScrollbar() const
 {
     return m_backing ? m_backing->layerForHorizontalScrollbar() : 0;
index 20b01ca..d74725e 100644 (file)
@@ -705,6 +705,7 @@ public:
     RenderLayerBacking* backing() const { return m_backing.get(); }
     RenderLayerBacking* ensureBacking();
     void clearBacking(bool layerBeingDestroyed = false);
+    virtual GraphicsLayer* layerForScrolling() const;
     virtual GraphicsLayer* layerForHorizontalScrollbar() const;
     virtual GraphicsLayer* layerForVerticalScrollbar() const;
     virtual GraphicsLayer* layerForScrollCorner() const;
index 6fd36c4..917eb1e 100644 (file)
@@ -1003,38 +1003,47 @@ bool RenderLayerBacking::requiresScrollCornerLayer() const
 
 bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer)
 {
-    bool layersChanged = false;
+    bool horizontalScrollbarLayerChanged = false;
     if (needsHorizontalScrollbarLayer) {
         if (!m_layerForHorizontalScrollbar) {
             m_layerForHorizontalScrollbar = createGraphicsLayer("horizontal scrollbar");
-            layersChanged = true;
+            horizontalScrollbarLayerChanged = true;
         }
     } else if (m_layerForHorizontalScrollbar) {
         m_layerForHorizontalScrollbar.clear();
-        layersChanged = true;
+        horizontalScrollbarLayerChanged = true;
     }
 
+    bool verticalScrollbarLayerChanged = false;
     if (needsVerticalScrollbarLayer) {
         if (!m_layerForVerticalScrollbar) {
             m_layerForVerticalScrollbar = createGraphicsLayer("vertical scrollbar");
-            layersChanged = true;
+            verticalScrollbarLayerChanged = true;
         }
     } else if (m_layerForVerticalScrollbar) {
         m_layerForVerticalScrollbar.clear();
-        layersChanged = true;
+        verticalScrollbarLayerChanged = true;
     }
 
+    bool scrollCornerLayerChanged = false;
     if (needsScrollCornerLayer) {
         if (!m_layerForScrollCorner) {
             m_layerForScrollCorner = createGraphicsLayer("scroll corner");
-            layersChanged = true;
+            scrollCornerLayerChanged = true;
         }
     } else if (m_layerForScrollCorner) {
         m_layerForScrollCorner.clear();
-        layersChanged = true;
+        scrollCornerLayerChanged = true;
     }
 
-    return layersChanged;
+    if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m_owningLayer)) {
+        if (horizontalScrollbarLayerChanged)
+            scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owningLayer, HorizontalScrollbar);
+        if (verticalScrollbarLayerChanged)
+            scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owningLayer, VerticalScrollbar);
+    }
+
+    return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || scrollCornerLayerChanged;
 }
 
 void RenderLayerBacking::positionOverflowControlsLayers(const IntSize& offsetFromRoot)
@@ -1045,8 +1054,10 @@ void RenderLayerBacking::positionOverflowControlsLayers(const IntSize& offsetFro
         if (hBar) {
             layer->setPosition(hBar->frameRect().location() - offsetFromRoot - offsetFromRenderer);
             layer->setSize(hBar->frameRect().size());
+            if (layer->hasContentsLayer())
+                layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().size()));
         }
-        layer->setDrawsContent(hBar);
+        layer->setDrawsContent(hBar && !layer->hasContentsLayer());
     }
     
     if (GraphicsLayer* layer = layerForVerticalScrollbar()) {
@@ -1054,8 +1065,10 @@ void RenderLayerBacking::positionOverflowControlsLayers(const IntSize& offsetFro
         if (vBar) {
             layer->setPosition(vBar->frameRect().location() - offsetFromRoot - offsetFromRenderer);
             layer->setSize(vBar->frameRect().size());
+            if (layer->hasContentsLayer())
+                layer->setContentsRect(IntRect(IntPoint(), vBar->frameRect().size()));
         }
-        layer->setDrawsContent(vBar);
+        layer->setDrawsContent(vBar && !layer->hasContentsLayer());
     }
 
     if (GraphicsLayer* layer = layerForScrollCorner()) {
@@ -1181,6 +1194,8 @@ bool RenderLayerBacking::updateMaskLayer(bool needsMaskLayer)
 
 bool RenderLayerBacking::updateScrollingLayers(bool needsScrollingLayers)
 {
+    ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m_owningLayer);
+
     bool layerChanged = false;
     if (needsScrollingLayers) {
         if (!m_scrollingLayer) {
@@ -1196,11 +1211,15 @@ bool RenderLayerBacking::updateScrollingLayers(bool needsScrollingLayers)
             m_scrollingLayer->addChild(m_scrollingContentsLayer.get());
 
             layerChanged = true;
+            if (scrollingCoordinator)
+                scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLayer);
         }
     } else if (m_scrollingLayer) {
         m_scrollingLayer = nullptr;
         m_scrollingContentsLayer = nullptr;
         layerChanged = true;
+        if (scrollingCoordinator)
+            scrollingCoordinator->scrollableAreaScrollLayerDidChange(m_owningLayer);
     }
 
     if (layerChanged) {
index a1037c1..3e07077 100644 (file)
@@ -1220,7 +1220,7 @@ void RenderLayerCompositor::frameViewDidScroll()
             return;
         if (Settings* settings = m_renderView->document()->settings())
             if (settings->compositedScrollingForFramesEnabled())
-                scrollingCoordinator->scrollableAreaScrollLayerDidChange(frameView, m_scrollLayer.get());
+                scrollingCoordinator->scrollableAreaScrollLayerDidChange(frameView);
     }
 
     m_scrollLayer->setPosition(FloatPoint(-scrollPosition.x(), -scrollPosition.y()));
@@ -1245,9 +1245,8 @@ void RenderLayerCompositor::rootFixedBackgroundsChanged()
 
 void RenderLayerCompositor::scrollingLayerDidChange(RenderLayer* layer)
 {
-    RenderLayerBacking* backing = layer->backing();
     if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-        scrollingCoordinator->scrollableAreaScrollLayerDidChange(layer, backing ? backing->scrollingContentsLayer() : 0);
+        scrollingCoordinator->scrollableAreaScrollLayerDidChange(layer);
 }
 
 void RenderLayerCompositor::fixedRootBackgroundLayerChanged()
@@ -2495,14 +2494,14 @@ void RenderLayerCompositor::updateOverflowControlsLayers()
             m_overflowControlsHostLayer->addChild(m_layerForHorizontalScrollbar.get());
 
             if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-                scrollingCoordinator->frameViewHorizontalScrollbarLayerDidChange(m_renderView->frameView(), m_layerForHorizontalScrollbar.get());
+                scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_renderView->frameView(), HorizontalScrollbar);
         }
     } else if (m_layerForHorizontalScrollbar) {
         m_layerForHorizontalScrollbar->removeFromParent();
         m_layerForHorizontalScrollbar = nullptr;
 
         if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-            scrollingCoordinator->frameViewHorizontalScrollbarLayerDidChange(m_renderView->frameView(), 0);
+            scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_renderView->frameView(), HorizontalScrollbar);
     }
 
     if (requiresVerticalScrollbarLayer()) {
@@ -2518,14 +2517,14 @@ void RenderLayerCompositor::updateOverflowControlsLayers()
             m_overflowControlsHostLayer->addChild(m_layerForVerticalScrollbar.get());
 
             if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-                scrollingCoordinator->frameViewVerticalScrollbarLayerDidChange(m_renderView->frameView(), m_layerForVerticalScrollbar.get());
+                scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_renderView->frameView(), VerticalScrollbar);
         }
     } else if (m_layerForVerticalScrollbar) {
         m_layerForVerticalScrollbar->removeFromParent();
         m_layerForVerticalScrollbar = nullptr;
 
         if (ScrollingCoordinator* scrollingCoordinator = this->scrollingCoordinator())
-            scrollingCoordinator->frameViewVerticalScrollbarLayerDidChange(m_renderView->frameView(), 0);
+            scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_renderView->frameView(), VerticalScrollbar);
     }
 
     if (requiresScrollCornerLayer()) {
index 6171e4a..c996205 100644 (file)
@@ -1,3 +1,23 @@
+2013-02-26  Tien-Ren Chen  <trchen@chromium.org>
+
+        Implement coordinated scrollbar for subframes and overflow:scroll
+        https://bugs.webkit.org/show_bug.cgi?id=109560
+
+        Reviewed by James Robinson.
+
+        Added ScrollingCoordinatorChromiumTest.iframeScrolling to verify
+        impl-side scrolling and impl-side scrollbars for frames.
+
+        Update ScrollingCoordinatorChromiumTest.overflowScrolling to verify
+        impl-side scrollbars.
+
+        * tests/ScrollingCoordinatorChromiumTest.cpp:
+        (WebKit::ScrollingCoordinatorChromiumTest::ScrollingCoordinatorChromiumTest):
+        (WebKit::TEST_F):
+        (WebKit):
+        * tests/data/iframe-scrolling-inner.html: Added.
+        * tests/data/iframe-scrolling.html: Added.
+
 2013-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r144016.
index 2667cb5..8dd255c 100644 (file)
@@ -91,6 +91,8 @@ public:
         m_webViewImpl->settings()->setAcceleratedCompositingEnabled(true);
         m_webViewImpl->settings()->setAcceleratedCompositingForFixedPositionEnabled(true);
         m_webViewImpl->settings()->setAcceleratedCompositingForOverflowScrollEnabled(true);
+        m_webViewImpl->settings()->setAcceleratedCompositingForScrollableFramesEnabled(true);
+        m_webViewImpl->settings()->setCompositedScrollingForFramesEnabled(true);
         m_webViewImpl->settings()->setFixedPositionCreatesStackingContext(true);
         m_webViewImpl->initializeMainFrame(&m_mockWebFrameClient);
         m_webViewImpl->resize(IntSize(320, 240));
@@ -235,6 +237,57 @@ TEST_F(ScrollingCoordinatorChromiumTest, overflowScrolling)
 
     WebLayer* webScrollLayer = static_cast<WebLayer*>(layerBacking->scrollingContentsLayer()->platformLayer());
     ASSERT_TRUE(webScrollLayer->scrollable());
+
+#if !OS(DARWIN) && !OS(WINDOWS)
+    // Now verify we've attached impl-side scrollbars onto the scrollbar layers
+    ASSERT_TRUE(layerBacking->layerForHorizontalScrollbar());
+    ASSERT_TRUE(layerBacking->layerForHorizontalScrollbar()->hasContentsLayer());
+    ASSERT_TRUE(layerBacking->layerForVerticalScrollbar());
+    ASSERT_TRUE(layerBacking->layerForVerticalScrollbar()->hasContentsLayer());
+#endif
+}
+
+TEST_F(ScrollingCoordinatorChromiumTest, iframeScrolling)
+{
+    registerMockedHttpURLLoad("iframe-scrolling.html");
+    registerMockedHttpURLLoad("iframe-scrolling-inner.html");
+    navigateTo(m_baseURL + "iframe-scrolling.html");
+
+    // Verify the properties of the accelerated scrolling element starting from the RenderObject
+    // all the way to the WebLayer.
+    Element* scrollableFrame = m_webViewImpl->mainFrameImpl()->frame()->document()->getElementById("scrollable");
+    ASSERT_TRUE(scrollableFrame);
+
+    RenderObject* renderer = scrollableFrame->renderer();
+    ASSERT_TRUE(renderer);
+    ASSERT_TRUE(renderer->isWidget());
+
+    RenderWidget* renderWidget = toRenderWidget(renderer);
+    ASSERT_TRUE(renderWidget);
+    ASSERT_TRUE(renderWidget->widget());
+    ASSERT_TRUE(renderWidget->widget()->isFrameView());
+
+    FrameView* innerFrameView = static_cast<FrameView*>(renderWidget->widget());
+    RenderView* innerRenderView = innerFrameView->renderView();
+    ASSERT_TRUE(innerRenderView);
+
+    RenderLayerCompositor* innerCompositor = innerRenderView->compositor();
+    ASSERT_TRUE(innerCompositor->inCompositingMode());
+    ASSERT_TRUE(innerCompositor->scrollLayer());
+
+    GraphicsLayerChromium* scrollLayer = static_cast<GraphicsLayerChromium*>(innerCompositor->scrollLayer());
+    ASSERT_EQ(innerFrameView, scrollLayer->scrollableArea());
+
+    WebLayer* webScrollLayer = static_cast<WebLayer*>(scrollLayer->platformLayer());
+    ASSERT_TRUE(webScrollLayer->scrollable());
+
+#if !OS(DARWIN) && !OS(WINDOWS)
+    // Now verify we've attached impl-side scrollbars onto the scrollbar layers
+    ASSERT_TRUE(innerCompositor->layerForHorizontalScrollbar());
+    ASSERT_TRUE(innerCompositor->layerForHorizontalScrollbar()->hasContentsLayer());
+    ASSERT_TRUE(innerCompositor->layerForVerticalScrollbar());
+    ASSERT_TRUE(innerCompositor->layerForVerticalScrollbar()->hasContentsLayer());
+#endif
 }
 
 } // namespace
diff --git a/Source/WebKit/chromium/tests/data/iframe-scrolling-inner.html b/Source/WebKit/chromium/tests/data/iframe-scrolling-inner.html
new file mode 100644 (file)
index 0000000..365d21c
--- /dev/null
@@ -0,0 +1,5 @@
+<!DOCTYPE HTML>
+<html>
+<body style="width:100px;height:100px;">
+</body>
+</html>
diff --git a/Source/WebKit/chromium/tests/data/iframe-scrolling.html b/Source/WebKit/chromium/tests/data/iframe-scrolling.html
new file mode 100644 (file)
index 0000000..ab30f13
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <style type="text/css">
+    #scrollable {
+      width: 50px;
+      height: 50px;
+    }
+    </style>
+</head>
+<body>
+<iframe src="iframe-scrolling-inner.html" id="scrollable"/>
+</body>
+</html>