Changeset 168244 in webkit


Ignore:
Timestamp:
May 4, 2014 1:40:40 PM (10 years ago)
Author:
Beth Dakin
Message:

Top content inset: Margin tiles should not display in the inset area when pinned
to the top of the page
https://bugs.webkit.org/show_bug.cgi?id=132535
-and corresponding-
<rdar://problem/16613039>

Reviewed by Simon Fraser.

Source/WebCore:
Prior to this change, topContentInset was implemented by positioning
RenderLayerCompositor’s m_rootContentLayer based on the inset value. In order to
ensure that no content is displayed in the inset area when we are pinned to the
top of the page, we’ll have to take a different approach. In this patch, when you
are pinned to the top of the page, the m_rootContentLayer is positioned at (0,0),
much like it would be without an inset, but the m_clip layer IS positioned at (0,
topContentInset). Then for all y-scroll values between 0 and topContentInset, the
positions of the clip layer and the contents layer are adjusted so that the clip
layer approaches a position of (0,0), and the root layer approaches a position of
(0, topContentInset). This makes sure that any content above the top the document
is aways clipped out of the inset area.

In order to achieve this, the scrolling thread needs to know about the
topContentInset, the clip layer, and the root contents layer.

AsyncScrollingCoordinator::updateScrollingNode() now takes an additional parameter
for the clip layer. Also export the topContentInset symbol for UI-side
compositing.

  • WebCore.exp.in:

Here is the new computation. Implemented in one spot that can be called from the
scrolling thread, AsyncScrollingCoordinator and RenderLayerCompositor.

  • page/FrameView.cpp:

(WebCore::FrameView::yPositionForInsetClipLayer):
(WebCore::FrameView::yPositionForRootContentLayer):

  • page/FrameView.h:

Set the topContentInset, the insetClipLayer, and the scrolledContentsLayer when
appropriate.

  • page/scrolling/AsyncScrollingCoordinator.cpp:

(WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
(WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):

Set or sync the positions for the inset layer and the contents layer.
(WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
(WebCore::AsyncScrollingCoordinator::updateScrollingNode):

  • page/scrolling/AsyncScrollingCoordinator.h:

Convenience functions for getting the clipLayer() and the rootContentLayer() from
the RenderLayerCompositor.

  • page/scrolling/ScrollingCoordinator.cpp:

(WebCore::ScrollingCoordinator::insetClipLayerForFrameView):
(WebCore::ScrollingCoordinator::rootContentLayerForFrameView):

  • page/scrolling/ScrollingCoordinator.h:

(WebCore::ScrollingCoordinator::updateScrollingNode):

ScrollingStateScrolling nodes have two new members now. m_insetClipLayer and
m_topContentInset. We can use m_scrolledContentsLayer for the rootContentsLayer
since previously that member was not used for FrameViews; it was only used for
accelerated overflow:scroll nodes.

  • page/scrolling/ScrollingStateScrollingNode.cpp:

(WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
(WebCore::ScrollingStateScrollingNode::setTopContentInset):
(WebCore::ScrollingStateScrollingNode::setInsetClipLayer):

  • page/scrolling/ScrollingStateScrollingNode.h:

Similarly, ScrollingTreeScrollingNode has two new members for m_topContentInset
and m_clipLayer.

  • page/scrolling/ScrollingTreeScrollingNode.cpp:

(WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
(WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):

  • page/scrolling/ScrollingTreeScrollingNode.h:

(WebCore::ScrollingTreeScrollingNode::topContentInset):

  • page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
  • page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:

(WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):

Compute positions for the two new layers.
(WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

Now use the static FrameView functions to compute the positions for these layers.

  • rendering/RenderLayerCompositor.cpp:

(WebCore::RenderLayerCompositor::frameViewDidChangeSize):
(WebCore::RenderLayerCompositor::positionForClipLayer):
(WebCore::RenderLayerCompositor::clipLayer):
(WebCore::RenderLayerCompositor::rootContentLayer):
(WebCore::RenderLayerCompositor::updateRootLayerPosition):
(WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
(WebCore::RenderLayerCompositor::ensureRootLayer):
(WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

  • rendering/RenderLayerCompositor.h:

Source/WebKit2:
Encode and decode the ScrollingStateScrollingNode’s m_topContentInset even though
we don’t use it for anything yet. Since the headerLayer and footerLayer are not
encoded or decoded yet, I did not encode/decode the insetClipLayer yet, which,
like the header and footer layers, would not yet be used.

  • Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:

(ArgumentCoder<ScrollingStateScrollingNode>::encode):
(ArgumentCoder<ScrollingStateScrollingNode>::decode):

LayoutTests:
Anchor point!

  • compositing/absolute-inside-out-of-view-fixed-expected.txt:
  • compositing/animation/filling-animation-overlap-at-end-expected.txt:
  • compositing/animation/filling-animation-overlap-expected.txt:
  • compositing/animation/layer-for-filling-animation-expected.txt:
  • compositing/backing/backface-visibility-in-3dtransformed-expected.txt:
  • compositing/backing/no-backing-for-clip-expected.txt:
  • compositing/backing/no-backing-for-clip-overhang-expected.txt:
  • compositing/backing/no-backing-for-clip-overlap-expected.txt:
  • compositing/backing/no-backing-for-perspective-expected.txt:
  • compositing/bounds-in-flipped-writing-mode-expected.txt:
  • compositing/clip-child-by-non-stacking-ancestor-expected.txt:
  • compositing/columns/ancestor-clipped-in-paginated-expected.txt:
  • compositing/columns/clipped-in-paginated-expected.txt:
  • compositing/columns/composited-columns-expected.txt:
  • compositing/columns/composited-columns-vertical-rl-expected.txt:
  • compositing/columns/composited-in-paginated-expected.txt:
  • compositing/columns/composited-in-paginated-rl-expected.txt:
  • compositing/columns/composited-in-paginated-writing-mode-rl-expected.txt:
  • compositing/columns/composited-lr-paginated-repaint-expected.txt:
  • compositing/columns/composited-nested-columns-expected.txt:
  • compositing/columns/composited-rl-paginated-repaint-expected.txt:
  • compositing/columns/hittest-composited-in-paginated-expected.txt:
  • compositing/columns/rotated-in-paginated-expected.txt:
  • compositing/columns/untransformed-composited-in-paginated-expected.txt:
  • compositing/contents-opaque/background-clip-expected.txt:
  • compositing/contents-opaque/background-color-expected.txt:
  • compositing/contents-opaque/body-background-painted-expected.txt:
  • compositing/contents-opaque/body-background-skipped-expected.txt:
  • compositing/contents-opaque/filter-expected.txt:
  • compositing/contents-opaque/hidden-with-visible-child-expected.txt:
  • compositing/contents-opaque/hidden-with-visible-text-expected.txt:
  • compositing/contents-opaque/layer-opacity-expected.txt:
  • compositing/contents-opaque/layer-transform-expected.txt:
  • compositing/contents-opaque/overflow-hidden-child-layers-expected.txt:
  • compositing/contents-opaque/visibility-hidden-expected.txt:
  • compositing/contents-scale/animating-expected.txt:
  • compositing/contents-scale/rounded-contents-scale-expected.txt:
  • compositing/contents-scale/scaled-ancestor-expected.txt:
  • compositing/contents-scale/simple-scale-expected.txt:
  • compositing/contents-scale/z-translate-expected.txt:
  • compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt:
  • compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt:
  • compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt:
  • compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt:
  • compositing/geometry/ancestor-overflow-change-expected.txt:
  • compositing/geometry/bounds-clipped-composited-child-expected.txt:
  • compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt:
  • compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt:
  • compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt:
  • compositing/geometry/bounds-ignores-hidden-expected.txt:
  • compositing/geometry/clip-expected.txt:
  • compositing/geometry/clip-inside-expected.txt:
  • compositing/geometry/composited-in-columns-expected.txt:
  • compositing/geometry/fixed-position-flipped-writing-mode-expected.txt:
  • compositing/geometry/flipped-writing-mode-expected.txt:
  • compositing/geometry/foreground-layer-expected.txt:
  • compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt:
  • compositing/geometry/layer-due-to-layer-children-switch-expected.txt:
  • compositing/geometry/limit-layer-bounds-clipping-ancestor-expected.txt:
  • compositing/geometry/limit-layer-bounds-fixed-expected.txt:
  • compositing/geometry/limit-layer-bounds-fixed-positioned-expected.txt:
  • compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt:
  • compositing/geometry/limit-layer-bounds-overflow-root-expected.txt:
  • compositing/geometry/limit-layer-bounds-positioned-expected.txt:
  • compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt:
  • compositing/geometry/limit-layer-bounds-transformed-expected.txt:
  • compositing/geometry/limit-layer-bounds-transformed-overflow-expected.txt:
  • compositing/geometry/negative-text-indent-with-overflow-hidden-layer-expected.txt:
  • compositing/geometry/preserve-3d-switching-expected.txt:
  • compositing/iframes/become-composited-nested-iframes-expected.txt:
  • compositing/iframes/become-overlapped-iframe-expected.txt:
  • compositing/iframes/composited-parent-iframe-expected.txt:
  • compositing/iframes/connect-compositing-iframe-delayed-expected.txt:
  • compositing/iframes/connect-compositing-iframe-expected.txt:
  • compositing/iframes/connect-compositing-iframe2-expected.txt:
  • compositing/iframes/connect-compositing-iframe3-expected.txt:
  • compositing/iframes/enter-compositing-iframe-expected.txt:
  • compositing/iframes/iframe-resize-expected.txt:
  • compositing/iframes/iframe-size-from-zero-expected.txt:
  • compositing/iframes/invisible-nested-iframe-hide-expected.txt:
  • compositing/iframes/overlapped-iframe-expected.txt:
  • compositing/iframes/overlapped-iframe-iframe-expected.txt:
  • compositing/iframes/overlapped-nested-iframes-expected.txt:
  • compositing/iframes/page-cache-layer-tree-expected.txt:
  • compositing/iframes/scrolling-iframe-expected.txt:
  • compositing/images/clip-on-directly-composited-image-expected.txt:
  • compositing/layer-creation/animation-overlap-with-children-expected.txt:
  • compositing/layer-creation/fixed-position-and-transform-expected.txt:
  • compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt:
  • compositing/layer-creation/fixed-position-out-of-view-expected.txt:
  • compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt:
  • compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt:
  • compositing/layer-creation/fixed-position-transformed-into-view-expected.txt:
  • compositing/layer-creation/fixed-position-under-transform-expected.txt:
  • compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt:
  • compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt:
  • compositing/layer-creation/overflow-scroll-overlap-expected.txt:
  • compositing/layer-creation/overlap-animation-clipping-expected.txt:
  • compositing/layer-creation/overlap-animation-expected.txt:
  • compositing/layer-creation/overlap-child-layer-expected.txt:
  • compositing/layer-creation/overlap-clipping-expected.txt:
  • compositing/layer-creation/overlap-transformed-3d-expected.txt:
  • compositing/layer-creation/overlap-transformed-and-clipped-expected.txt:
  • compositing/layer-creation/overlap-transformed-layer-expected.txt:
  • compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt:
  • compositing/layer-creation/overlap-transforms-expected.txt:
  • compositing/layer-creation/rotate3d-overlap-expected.txt:
  • compositing/layer-creation/scroll-partial-update-expected.txt:
  • compositing/layer-creation/spanOverlapsCanvas-expected.txt:
  • compositing/layer-creation/stacking-context-overlap-expected.txt:
  • compositing/layer-creation/stacking-context-overlap-nested-expected.txt:
  • compositing/layer-creation/translatez-overlap-expected.txt:
  • compositing/masks/mask-layer-size-expected.txt:
  • compositing/overflow-trumps-transform-style-expected.txt:
  • compositing/overflow/clip-descendents-expected.txt:
  • compositing/overflow/content-gains-scrollbars-expected.txt:
  • compositing/overflow/content-loses-scrollbars-expected.txt:
  • compositing/overflow/overflow-scrollbar-layer-positions-expected.txt:
  • compositing/overflow/overflow-scrollbar-layers-expected.txt:
  • compositing/overflow/resize-painting-expected.txt:
  • compositing/plugins/no-backing-store-expected.txt:
  • compositing/plugins/small-to-large-composited-plugin-expected.txt:
  • compositing/regions/fixed-in-named-flow-clip-descendant-expected.txt:
  • compositing/regions/fixed-in-named-flow-expected.txt:
  • compositing/regions/fixed-in-named-flow-from-abs-in-named-flow-expected.txt:
  • compositing/regions/fixed-in-named-flow-from-outflow-expected.txt:
  • compositing/regions/fixed-in-named-flow-got-transformed-parent-expected.txt:
  • compositing/regions/fixed-in-named-flow-lost-transformed-parent-expected.txt:
  • compositing/regions/fixed-in-named-flow-overlap-composited-expected.txt:
  • compositing/regions/fixed-in-named-flow-transformed-parent-expected.txt:
  • compositing/regions/fixed-transformed-in-named-flow-expected.txt:
  • compositing/repaint/absolute-painted-into-composited-ancestor-expected.txt:
  • compositing/repaint/fixed-background-scroll-expected.txt:
  • compositing/repaint/positioned-movement-expected.txt:
  • compositing/repaint/repaint-on-layer-grouping-change-expected.txt:
  • compositing/repaint/resize-repaint-expected.txt:
  • compositing/rtl/rtl-absolute-expected.txt:
  • compositing/rtl/rtl-absolute-overflow-expected.txt:
  • compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt:
  • compositing/rtl/rtl-fixed-expected.txt:
  • compositing/rtl/rtl-fixed-overflow-expected.txt:
  • compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt:
  • compositing/rtl/rtl-relative-expected.txt:
  • compositing/tiled-layers-hidpi-expected.txt:
  • compositing/visibility/layer-visible-content-expected.txt:
  • platform/mac-wk2/compositing/contents-opaque/body-background-painted-expected.txt:
  • platform/mac-wk2/compositing/contents-opaque/body-background-skipped-expected.txt:
  • platform/mac-wk2/compositing/repaint/fixed-background-scroll-expected.txt:
  • platform/mac-wk2/compositing/rtl/rtl-absolute-expected.txt:
  • platform/mac-wk2/compositing/rtl/rtl-absolute-overflow-expected.txt:
  • platform/mac-wk2/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt:
  • platform/mac-wk2/compositing/rtl/rtl-fixed-expected.txt:
  • platform/mac-wk2/compositing/rtl/rtl-fixed-overflow-expected.txt:
  • platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
  • platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
  • platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
  • platform/mac-wk2/compositing/tiling/tiled-layer-resize-expected.txt:
  • platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-div-latched-div-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-div-latched-div-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-div-latched-mainframe-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-div-latched-mainframe-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-iframe-latched-iframe-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-iframe-latched-iframe-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-iframe-latched-mainframe-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-iframe-latched-mainframe-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-select-latched-mainframe-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-select-latched-mainframe-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-select-latched-select-expected.txt:
  • platform/mac-wk2/tiled-drawing/fast-scroll-select-latched-select-with-handler-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-background-no-image-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-body-layer-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-opacity-html-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-positioned-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-transformed-html-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-body-background-zoomed-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-html-background-expected.txt:
  • platform/mac-wk2/tiled-drawing/fixed-background/fixed-non-propagated-body-background-expected.txt:
  • platform/mac-wk2/tiled-drawing/simple-document-with-margin-tiles-expected.txt:
  • platform/mac-wk2/tiled-drawing/sticky/sticky-layers-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-coverage-after-scroll-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-coverage-after-scroll-speculative-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-coverage-scroll-to-bottom-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-coverage-slow-scrolling-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-coverage-speculative-expected.txt:
  • platform/mac-wk2/tiled-drawing/tile-size-slow-zoomed-expected.txt:
  • platform/mac-wk2/tiled-drawing/tiled-drawing-scroll-position-page-cache-restoration-expected.txt:
  • platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-expected.txt:
  • platform/mac-wk2/tiled-drawing/tiled-drawing-zoom-scrolled-expected.txt:
  • platform/mac-wk2/tiled-drawing/use-tiled-drawing-expected.txt:
  • platform/mac/compositing/canvas/accelerated-canvas-compositing-expected.txt:
  • platform/mac/compositing/geometry/fixed-position-composited-switch-expected.txt:
  • platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt:
  • platform/mac/compositing/iframes/resizer-expected.txt:
  • platform/mac/compositing/images/direct-image-object-fit-expected.txt:
  • platform/mac/compositing/layer-creation/overlap-animation-container-expected.txt:
  • platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt:
  • platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants2-expected.txt:
  • platform/mac/compositing/overflow/composited-scrolling-creates-a-stacking-container-expected.txt:
  • platform/mac/compositing/overflow/composited-scrolling-paint-phases-expected.txt:
  • platform/mac/compositing/reflections/direct-image-object-fit-reflected-expected.txt:
  • platform/mac/compositing/repaint/invalidations-on-composited-layers-expected.txt:
  • platform/mac/compositing/tiling/backface-preserve-3d-tiled-expected.txt:
  • platform/mac/compositing/tiling/crash-reparent-tiled-layer-expected.txt:
  • platform/mac/compositing/tiling/huge-layer-add-remove-child-expected.txt:
  • platform/mac/compositing/tiling/huge-layer-img-expected.txt:
  • platform/mac/compositing/tiling/huge-layer-with-layer-children-expected.txt:
  • platform/mac/compositing/tiling/huge-layer-with-layer-children-resize-expected.txt:
  • platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
  • platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
  • platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt:
  • platform/mac/compositing/tiling/tiled-layer-resize-expected.txt:
  • platform/mac/compositing/video/video-object-fit-expected.txt:
  • platform/mac/compositing/visible-rect/2d-transformed-expected.txt:
  • platform/mac/compositing/visible-rect/3d-transform-style-expected.txt:
  • platform/mac/compositing/visible-rect/3d-transformed-expected.txt:
  • platform/mac/compositing/visible-rect/animated-expected.txt:
  • platform/mac/compositing/visible-rect/animated-from-none-expected.txt:
  • platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt:
  • platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt:
  • platform/mac/compositing/visible-rect/flipped-preserve-3d-expected.txt:
  • platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
  • platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt:
  • platform/mac/compositing/visible-rect/nested-transform-expected.txt:
  • platform/mac/compositing/visible-rect/scrolled-expected.txt:
Location:
trunk
Files:
245 edited

Legend:

Unmodified
Added
Removed
Note: See TracChangeset for help on using the changeset viewer.