WebKit Bugzilla
Attachment 361503 Details for
Bug 194433
: Compute fixed position rect based on scrolling tree view of the current scroll position
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
frame-fixed-ios-2.patch (text/plain), 48.34 KB, created by
Antti Koivisto
on 2019-02-08 05:50:02 PST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Antti Koivisto
Created:
2019-02-08 05:50:02 PST
Size:
48.34 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 241191) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,63 @@ >+2019-02-08 Antti Koivisto <antti@apple.com> >+ >+ Compute fixed position rect based on scrolling tree view of the current scroll position >+ https://bugs.webkit.org/show_bug.cgi?id=194433 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ It should be scrolling trees responsibility to incorporate scroll positions when computing final positions for layers. >+ This makes it easier to archive glitch-free positioning. >+ >+ This patch removes code that that passes the last committed scroll position via the state tree and modifies its only >+ client (in ScrollingTreeScrollingNodeDelegateIOS) to use the UIScrollView scrolling position. >+ >+ Test by Frederic Wang. >+ >+ * page/scrolling/AsyncScrollingCoordinator.cpp: >+ (WebCore::AsyncScrollingCoordinator::setScrollingNodeGeometry): >+ * page/scrolling/ScrollingStateScrollingNode.cpp: >+ (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): >+ (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged): >+ (WebCore::ScrollingStateScrollingNode::setScrollPosition): Deleted. >+ * page/scrolling/ScrollingStateScrollingNode.h: >+ (WebCore::ScrollingStateScrollingNode::scrollPosition const): Deleted. >+ * page/scrolling/ScrollingTreeFrameHostingNode.cpp: >+ (WebCore::ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange): >+ >+ Remove the 'cumulativeDelta' parameter. It is not needed since 'fixedPositionRect' is correct without adjustments. >+ >+ * page/scrolling/ScrollingTreeFrameHostingNode.h: >+ * page/scrolling/ScrollingTreeFrameScrollingNode.h: >+ (WebCore::ScrollingTreeFrameScrollingNode::fixedPositionRect): >+ >+ Compute based on scrolling tree view of the scrolling position. >+ >+ * page/scrolling/ScrollingTreeNode.h: >+ * page/scrolling/ScrollingTreeScrollingNode.cpp: >+ (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren): >+ (WebCore::ScrollingTreeScrollingNode::updateLayersAfterAncestorChange): >+ * page/scrolling/ScrollingTreeScrollingNode.h: >+ (WebCore::ScrollingTreeScrollingNode::lastCommittedScrollPosition const): Deleted. >+ * page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp: >+ (WebCore::ScrollingTreeScrollingNodeDelegate::lastCommittedScrollPosition const): Deleted. >+ * page/scrolling/cocoa/ScrollingTreeFixedNode.h: >+ * page/scrolling/cocoa/ScrollingTreeFixedNode.mm: >+ (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange): >+ * page/scrolling/cocoa/ScrollingTreeStickyNode.h: >+ * page/scrolling/cocoa/ScrollingTreeStickyNode.mm: >+ (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange): >+ * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: >+ * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterViewportChange): >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange): >+ (WebCore::ScrollingTreeFrameScrollingNodeIOS::updateChildNodesAfterScroll): >+ * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: >+ (WebCore::ScrollingTreeFrameScrollingNodeMac::setScrollLayerPosition): >+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h: >+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm: >+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange): >+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::setScrollLayerPosition): >+ > 2019-02-08 Eric Liang <ericliang@apple.com> > > When performing AXPress, check to see if the menu list is disabled. >Index: Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp >=================================================================== >--- Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (working copy) >@@ -636,7 +636,6 @@ void AsyncScrollingCoordinator::setScrol > > scrollingNode.setParentRelativeScrollableRect(scrollingGeometry.parentRelativeScrollableRect); > scrollingNode.setScrollOrigin(scrollingGeometry.scrollOrigin); >- scrollingNode.setScrollPosition(scrollingGeometry.scrollPosition); > scrollingNode.setTotalContentsSize(scrollingGeometry.contentSize); > scrollingNode.setReachableContentsSize(scrollingGeometry.reachableContentSize); > scrollingNode.setScrollableAreaSize(scrollingGeometry.scrollableAreaSize); >Index: Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (working copy) >@@ -44,7 +44,6 @@ ScrollingStateScrollingNode::ScrollingSt > , m_totalContentsSize(stateNode.totalContentsSize()) > , m_reachableContentsSize(stateNode.reachableContentsSize()) > , m_parentRelativeScrollableRect(stateNode.parentRelativeScrollableRect()) >- , m_scrollPosition(stateNode.scrollPosition()) > , m_requestedScrollPosition(stateNode.requestedScrollPosition()) > , m_scrollOrigin(stateNode.scrollOrigin()) > #if ENABLE(CSS_SCROLL_SNAP) >@@ -68,7 +67,6 @@ void ScrollingStateScrollingNode::setAll > setPropertyChangedBit(TotalContentsSize); > setPropertyChangedBit(ReachableContentsSize); > setPropertyChangedBit(ParentRelativeScrollableRect); >- setPropertyChangedBit(ScrollPosition); > setPropertyChangedBit(ScrollOrigin); > setPropertyChangedBit(ScrollableAreaParams); > setPropertyChangedBit(RequestedScrollPosition); >@@ -123,15 +121,6 @@ void ScrollingStateScrollingNode::setPar > setPropertyChanged(ParentRelativeScrollableRect); > } > >-void ScrollingStateScrollingNode::setScrollPosition(const FloatPoint& scrollPosition) >-{ >- if (m_scrollPosition == scrollPosition) >- return; >- >- m_scrollPosition = scrollPosition; >- setPropertyChanged(ScrollPosition); >-} >- > void ScrollingStateScrollingNode::setScrollOrigin(const IntPoint& scrollOrigin) > { > if (m_scrollOrigin == scrollOrigin) >Index: Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (working copy) >@@ -43,7 +43,6 @@ public: > TotalContentsSize, > ReachableContentsSize, > ParentRelativeScrollableRect, >- ScrollPosition, > ScrollOrigin, > ScrollableAreaParams, > RequestedScrollPosition, >@@ -73,9 +72,6 @@ public: > const LayoutRect& parentRelativeScrollableRect() const { return m_parentRelativeScrollableRect; } > WEBCORE_EXPORT void setParentRelativeScrollableRect(const LayoutRect&); > >- const FloatPoint& scrollPosition() const { return m_scrollPosition; } >- WEBCORE_EXPORT void setScrollPosition(const FloatPoint&); >- > const IntPoint& scrollOrigin() const { return m_scrollOrigin; } > WEBCORE_EXPORT void setScrollOrigin(const IntPoint&); > >Index: Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.cpp (working copy) >@@ -57,13 +57,13 @@ void ScrollingTreeFrameHostingNode::comm > m_parentRelativeScrollableRect = frameHostingStateNode.parentRelativeScrollableRect(); > } > >-void ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+void ScrollingTreeFrameHostingNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) > { > if (!m_children) > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta); >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect); > } > > LayoutPoint ScrollingTreeFrameHostingNode::parentToLocalPoint(LayoutPoint point) const >Index: Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeFrameHostingNode.h (working copy) >@@ -42,7 +42,7 @@ private: > ScrollingTreeFrameHostingNode(ScrollingTree&, ScrollingNodeID); > > void commitStateBeforeChildren(const ScrollingStateNode&) final; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) final; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) final; > > const LayoutRect& parentRelativeScrollableRect() const { return m_parentRelativeScrollableRect; } > >Index: Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeFrameScrollingNode.h (working copy) >@@ -42,7 +42,7 @@ public: > void commitStateBeforeChildren(const ScrollingStateNode&) override; > > // FIXME: We should implement this when we support ScrollingTreeScrollingNodes as children. >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& /*changedNode*/, const FloatRect& /*fixedPositionRect*/, const FloatSize& /*cumulativeDelta*/) override { } >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& /*changedNode*/, const FloatRect& /*fixedPositionRect*/) override { } > > ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) override = 0; > void setScrollPosition(const FloatPoint&) override; >@@ -58,7 +58,7 @@ public: > FloatSize viewToContentsOffset(const FloatPoint& scrollPosition) const; > FloatRect layoutViewportForScrollPosition(const FloatPoint& visibleContentOrigin, float scale) const; > >- FloatRect fixedPositionRect() { return FloatRect(lastCommittedScrollPosition(), scrollableAreaSize()); }; >+ FloatRect fixedPositionRect() { return FloatRect(scrollPosition(), scrollableAreaSize()); }; > > float frameScaleFactor() const { return m_frameScaleFactor; } > >Index: Source/WebCore/page/scrolling/ScrollingTreeNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeNode.h (working copy) >@@ -58,7 +58,7 @@ public: > virtual void commitStateBeforeChildren(const ScrollingStateNode&) = 0; > virtual void commitStateAfterChildren(const ScrollingStateNode&) { } > >- virtual void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) = 0; >+ virtual void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) = 0; > > ScrollingTreeNode* parent() const { return m_parent; } > void setParent(ScrollingTreeNode* parent) { m_parent = parent; } >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.cpp (working copy) >@@ -62,9 +62,6 @@ void ScrollingTreeScrollingNode::commitS > if (state.hasChangedProperty(ScrollingStateScrollingNode::ReachableContentsSize)) > m_reachableContentsSize = state.reachableContentsSize(); > >- if (state.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition)) >- m_lastCommittedScrollPosition = state.scrollPosition(); >- > if (state.hasChangedProperty(ScrollingStateScrollingNode::ParentRelativeScrollableRect)) > m_parentRelativeScrollableRect = state.parentRelativeScrollableRect(); > >@@ -113,13 +110,13 @@ void ScrollingTreeScrollingNode::commitS > scrollingTree().scrollingTreeNodeRequestsScroll(scrollingNodeID(), scrollingStateNode.requestedScrollPosition(), scrollingStateNode.requestedScrollPositionRepresentsProgrammaticScroll()); > } > >-void ScrollingTreeScrollingNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+void ScrollingTreeScrollingNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) > { > if (!m_children) > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta); >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect); > } > > void ScrollingTreeScrollingNode::setScrollPosition(const FloatPoint& scrollPosition) >@@ -193,7 +190,6 @@ void ScrollingTreeScrollingNode::dumpPro > ts.dumpProperty("total content size for rubber band", m_totalContentsSizeForRubberBand); > if (m_reachableContentsSize != m_totalContentsSize) > ts.dumpProperty("reachable content size", m_reachableContentsSize); >- ts.dumpProperty("last committed scroll position", m_lastCommittedScrollPosition); > > if (!m_parentRelativeScrollableRect.isEmpty()) > ts.dumpProperty("parent relative scrollable rect", m_parentRelativeScrollableRect); >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNode.h (working copy) >@@ -50,7 +50,7 @@ public: > WEBCORE_EXPORT void commitStateBeforeChildren(const ScrollingStateNode&) override; > WEBCORE_EXPORT void commitStateAfterChildren(const ScrollingStateNode&) override; > >- WEBCORE_EXPORT void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ WEBCORE_EXPORT void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) override; > > virtual ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) = 0; > WEBCORE_EXPORT virtual void setScrollPosition(const FloatPoint&); >@@ -90,7 +90,6 @@ protected: > > virtual void setScrollLayerPosition(const FloatPoint&, const FloatRect& layoutViewport) = 0; > >- FloatPoint lastCommittedScrollPosition() const { return m_lastCommittedScrollPosition; } > const FloatSize& reachableContentsSize() const { return m_reachableContentsSize; } > const LayoutRect& parentRelativeScrollableRect() const { return m_parentRelativeScrollableRect; } > const IntPoint& scrollOrigin() const { return m_scrollOrigin; } >@@ -126,7 +125,6 @@ private: > FloatSize m_totalContentsSize; > FloatSize m_totalContentsSizeForRubberBand; > FloatSize m_reachableContentsSize; >- FloatPoint m_lastCommittedScrollPosition; > LayoutRect m_parentRelativeScrollableRect; > IntPoint m_scrollOrigin; > #if ENABLE(CSS_SCROLL_SNAP) >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.cpp (working copy) >@@ -44,11 +44,6 @@ ScrollingTree& ScrollingTreeScrollingNod > return m_scrollingNode.scrollingTree(); > } > >-FloatPoint ScrollingTreeScrollingNodeDelegate::lastCommittedScrollPosition() const >-{ >- return m_scrollingNode.lastCommittedScrollPosition(); >-} >- > const FloatSize& ScrollingTreeScrollingNodeDelegate::totalContentsSize() > { > return m_scrollingNode.totalContentsSize(); >Index: Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h >=================================================================== >--- Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h (revision 241191) >+++ Source/WebCore/page/scrolling/ScrollingTreeScrollingNodeDelegate.h (working copy) >@@ -41,7 +41,6 @@ public: > > protected: > WEBCORE_EXPORT ScrollingTree& scrollingTree() const; >- WEBCORE_EXPORT FloatPoint lastCommittedScrollPosition() const; > WEBCORE_EXPORT const FloatSize& totalContentsSize(); > WEBCORE_EXPORT const FloatSize& reachableContentsSize(); > WEBCORE_EXPORT const IntPoint& scrollOrigin() const; >Index: Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h >=================================================================== >--- Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.h (working copy) >@@ -47,7 +47,7 @@ private: > ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID); > > void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) override; > > void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; > >Index: Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm >=================================================================== >--- Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm (revision 241191) >+++ Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm (working copy) >@@ -70,15 +70,13 @@ static inline CGPoint operator*(CGPoint& > } > } > >-void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) > { > using namespace ScrollingTreeFixedNodeInternal; > FloatPoint layerPosition = m_constraints.layerPositionForViewportRect(fixedPositionRect); > > LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeFixedNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " viewportRectAtLastLayout " << m_constraints.viewportRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " new offset from top " << (fixedPositionRect.y() - layerPosition.y())); > >- layerPosition -= cumulativeDelta; >- > CGRect layerBounds = [m_layer bounds]; > CGPoint anchorPoint = [m_layer anchorPoint]; > CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; >@@ -96,10 +94,8 @@ void ScrollingTreeFixedNode::updateLayer > if (!m_children) > return; > >- FloatSize newDelta = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; >- > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, newDelta); >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect); > } > > void ScrollingTreeFixedNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >Index: Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h >=================================================================== >--- Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.h (working copy) >@@ -47,7 +47,7 @@ private: > ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID); > > void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) override; > > void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override; > >Index: Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm >=================================================================== >--- Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm (revision 241191) >+++ Source/WebCore/page/scrolling/cocoa/ScrollingTreeStickyNode.mm (working copy) >@@ -72,7 +72,7 @@ static inline CGPoint operator*(CGPoint& > } > } > >-void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) > { > using namespace ScrollingTreeStickyNodeInternal; > bool adjustStickyLayer = false; >@@ -88,8 +88,6 @@ void ScrollingTreeStickyNode::updateLaye > > LOG_WITH_STREAM(Scrolling, stream << "ScrollingTreeStickyNode " << scrollingNodeID() << " updateLayersAfterAncestorChange: new viewport " << fixedPositionRect << " constrainingRectAtLastLayout " << m_constraints.constrainingRectAtLastLayout() << " last layer pos " << m_constraints.layerPositionAtLastLayout() << " adjustStickyLayer " << adjustStickyLayer); > >- FloatSize deltaForDescendants = cumulativeDelta; >- > if (adjustStickyLayer) { > FloatPoint layerPosition = m_constraints.layerPositionForConstrainingRect(constrainingRect); > >@@ -97,15 +95,13 @@ void ScrollingTreeStickyNode::updateLaye > CGPoint anchorPoint = [m_layer anchorPoint]; > CGPoint newPosition = layerPosition - m_constraints.alignmentOffset() + anchorPoint * layerBounds.size; > [m_layer setPosition:newPosition]; >- >- deltaForDescendants = layerPosition - m_constraints.layerPositionAtLastLayout() + cumulativeDelta; > } > > if (!m_children) > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, deltaForDescendants); >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect); > } > > void ScrollingTreeStickyNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const >Index: Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h >=================================================================== >--- Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h (revision 241191) >+++ Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h (working copy) >@@ -53,7 +53,7 @@ protected: > > void updateLayersAfterViewportChange(const FloatRect& fixedPositionRect, double scale) override; > void updateLayersAfterDelegatedScroll(const FloatPoint&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) override; > > void setScrollPosition(const FloatPoint&) override; > void setScrollLayerPosition(const FloatPoint&, const FloatRect& layoutViewport) override; >Index: Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm >=================================================================== >--- Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm (revision 241191) >+++ Source/WebCore/page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm (working copy) >@@ -141,17 +141,16 @@ void ScrollingTreeFrameScrollingNodeIOS: > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(*this, fixedPositionRect, FloatSize()); >+ child->updateLayersAfterAncestorChange(*this, fixedPositionRect); > } > >-void ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect&, const FloatSize&) >+void ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect&) > { > if (!m_children) > return; > >- FloatRect fixedPositionRect(scrollPosition(), scrollableAreaSize()); > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, FloatSize()); >+ child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect()); > } > > void ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterDelegatedScroll(const FloatPoint& scrollPosition) >@@ -193,7 +192,7 @@ void ScrollingTreeFrameScrollingNodeIOS: > fixedPositionRect = FloatRect(scrollPosition, scrollableAreaSize()); > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(*this, fixedPositionRect, FloatSize()); >+ child->updateLayersAfterAncestorChange(*this, fixedPositionRect); > } > > FloatPoint ScrollingTreeFrameScrollingNodeIOS::minimumScrollPosition() const >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (revision 241191) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (working copy) >@@ -337,7 +337,7 @@ void ScrollingTreeFrameScrollingNodeMac: > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(*this, fixedPositionRect, FloatSize()); >+ child->updateLayersAfterAncestorChange(*this, fixedPositionRect); > } > > void ScrollingTreeFrameScrollingNodeMac::updateLayersAfterViewportChange(const FloatRect&, double) >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (revision 241191) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (working copy) >@@ -54,7 +54,7 @@ private: > void updateLayersAfterViewportChange(const FloatRect&, double) override { } > void updateLayersAfterDelegatedScroll(const FloatPoint& scrollPosition) override; > >- void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) override; > > ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) override; > >Index: Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm >=================================================================== >--- Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (revision 241191) >+++ Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (working copy) >@@ -93,11 +93,10 @@ ScrollingEventResult ScrollingTreeOverfl > > > >-void ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >+void ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect) > { > UNUSED_PARAM(changedNode); > UNUSED_PARAM(fixedPositionRect); >- UNUSED_PARAM(cumulativeDelta); > } > > FloatPoint ScrollingTreeOverflowScrollingNodeMac::scrollPosition() const >@@ -131,7 +130,7 @@ void ScrollingTreeOverflowScrollingNodeM > return; > > for (auto& child : *m_children) >- child->updateLayersAfterAncestorChange(*this, fixedPositionRect, { }); >+ child->updateLayersAfterAncestorChange(*this, fixedPositionRect); > } > > void ScrollingTreeOverflowScrollingNodeMac::updateLayersAfterDelegatedScroll(const FloatPoint& scrollPosition) >Index: Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.cpp (working copy) >@@ -54,7 +54,7 @@ void ScrollingTreeFixedNode::commitState > { > } > >-void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&, const FloatSize&) >+void ScrollingTreeFixedNode::updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&) > { > } > >Index: Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.h >=================================================================== >--- Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/nicosia/ScrollingTreeFixedNode.h (working copy) >@@ -42,7 +42,7 @@ private: > ScrollingTreeFixedNode(ScrollingTree&, ScrollingNodeID); > > void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&, const FloatSize&) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&) override; > }; > > } // namespace WebCore >Index: Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.cpp >=================================================================== >--- Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.cpp (revision 241191) >+++ Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.cpp (working copy) >@@ -54,7 +54,7 @@ void ScrollingTreeStickyNode::commitStat > { > } > >-void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&, const FloatSize&) >+void ScrollingTreeStickyNode::updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&) > { > } > >Index: Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.h >=================================================================== >--- Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.h (revision 241191) >+++ Source/WebCore/page/scrolling/nicosia/ScrollingTreeStickyNode.h (working copy) >@@ -42,7 +42,7 @@ private: > ScrollingTreeStickyNode(ScrollingTree&, ScrollingNodeID); > > void commitStateBeforeChildren(const ScrollingStateNode&) override; >- void updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&, const FloatSize&) override; >+ void updateLayersAfterAncestorChange(const ScrollingTreeNode&, const FloatRect&) override; > }; > > } // namespace WebCore >Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 241193) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,44 @@ >+2019-02-08 Antti Koivisto <antti@apple.com> >+ >+ Compute fixed position rect based on ScrollingTree scroll position >+ https://bugs.webkit.org/show_bug.cgi?id=194433 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: >+ (ArgumentCoder<ScrollingStateScrollingNode>::encode): >+ (ArgumentCoder<ScrollingStateScrollingNode>::decode): >+ (WebKit::dump): >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h: >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm: >+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::commitStateBeforeChildren): >+ >+ Avoid constantly reconstructing the delegate. >+ >+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange): Deleted. >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h: >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm: >+ (WebKit::ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange): Deleted. >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h: >+ * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm: >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::commitStateAfterChildren): >+ >+ Setting scroll position based on node tree is wrong as it overrides the user scroll position. >+ >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::setScrollLayerPosition): >+ >+ Remove the current incorrect implementation and replace with FIXME. >+ This is used for programmatic scrolling. >+ >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll): >+ >+ Don't compute the delta. It is no longer needed since the fixed position rect we get is the correct one. >+ >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::scrollViewDidScroll const): >+ (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateLayersAfterAncestorChange): Deleted. >+ >+ This was incorrect for frames and didn't do anything anyway so remove it. >+ > 2019-02-08 Keith Rollin <krollin@apple.com> > > Unreviewed build fix. >Index: Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp >=================================================================== >--- Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (revision 241191) >+++ Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (working copy) >@@ -127,7 +127,6 @@ void ArgumentCoder<ScrollingStateScrolli > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollableAreaSize, scrollableAreaSize) > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::TotalContentsSize, totalContentsSize) > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ReachableContentsSize, reachableContentsSize) >- SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollPosition, scrollPosition) > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::ScrollOrigin, scrollOrigin) > #if ENABLE(CSS_SCROLL_SNAP) > SCROLLING_NODE_ENCODE(ScrollingStateScrollingNode::HorizontalSnapOffsets, horizontalSnapOffsets) >@@ -216,7 +215,6 @@ bool ArgumentCoder<ScrollingStateScrolli > SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollableAreaSize, FloatSize, setScrollableAreaSize); > SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::TotalContentsSize, FloatSize, setTotalContentsSize); > SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ReachableContentsSize, FloatSize, setReachableContentsSize); >- SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollPosition, FloatPoint, setScrollPosition); > SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::ScrollOrigin, IntPoint, setScrollOrigin); > #if ENABLE(CSS_SCROLL_SNAP) > SCROLLING_NODE_DECODE(ScrollingStateScrollingNode::HorizontalSnapOffsets, Vector<float>, setHorizontalSnapOffsets); >@@ -512,9 +510,6 @@ static void dump(TextStream& ts, const S > if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ReachableContentsSize)) > ts.dumpProperty("reachable-contents-size", node.reachableContentsSize()); > >- if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition)) >- ts.dumpProperty("scroll-position", node.scrollPosition()); >- > if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin)) > ts.dumpProperty("scroll-origin", node.scrollOrigin()); > >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.h (working copy) >@@ -48,7 +48,6 @@ private: > void setScrollLayerPosition(const WebCore::FloatPoint&, const WebCore::FloatRect& layoutViewport) override; > > void updateLayersAfterDelegatedScroll(const WebCore::FloatPoint& scrollPosition) override; >- void updateLayersAfterAncestorChange(const WebCore::ScrollingTreeNode& changedNode, const WebCore::FloatRect& fixedPositionRect, const WebCore::FloatSize& cumulativeDelta) override; > > std::unique_ptr<ScrollingTreeScrollingNodeDelegateIOS> m_scrollingNodeDelegate; > }; >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeFrameScrollingNodeRemoteIOS.mm (working copy) >@@ -53,10 +53,8 @@ void ScrollingTreeFrameScrollingNodeRemo > ScrollingTreeFrameScrollingNodeIOS::commitStateBeforeChildren(stateNode); > > if (stateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) { >- if (scrollContainerLayer()) >+ if (scrollContainerLayer() && !m_scrollingNodeDelegate) > m_scrollingNodeDelegate = std::make_unique<ScrollingTreeScrollingNodeDelegateIOS>(*this); >- else >- m_scrollingNodeDelegate = nullptr; > } > > if (m_scrollingNodeDelegate) >@@ -71,15 +69,6 @@ void ScrollingTreeFrameScrollingNodeRemo > m_scrollingNodeDelegate->commitStateAfterChildren(downcast<ScrollingStateScrollingNode>(stateNode)); > } > >-void ScrollingTreeFrameScrollingNodeRemoteIOS::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >-{ >- if (m_scrollingNodeDelegate) { >- m_scrollingNodeDelegate->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta); >- return; >- } >- ScrollingTreeFrameScrollingNodeIOS::updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta); >-} >- > FloatPoint ScrollingTreeFrameScrollingNodeRemoteIOS::scrollPosition() const > { > if (m_scrollingNodeDelegate) >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.h (working copy) >@@ -51,8 +51,6 @@ private: > void updateLayersAfterViewportChange(const WebCore::FloatRect& fixedPositionRect, double scale) override { } > void updateLayersAfterDelegatedScroll(const WebCore::FloatPoint& scrollPosition) override; > >- void updateLayersAfterAncestorChange(const WebCore::ScrollingTreeNode& changedNode, const WebCore::FloatRect& fixedPositionRect, const WebCore::FloatSize& cumulativeDelta) override; >- > WebCore::ScrollingEventResult handleWheelEvent(const WebCore::PlatformWheelEvent&) override { return ScrollingEventResult::DidNotHandleEvent; } > > std::unique_ptr<ScrollingTreeScrollingNodeDelegateIOS> m_scrollingNodeDelegate; >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeOverflowScrollingNodeIOS.mm (working copy) >@@ -66,11 +66,6 @@ void ScrollingTreeOverflowScrollingNodeI > m_scrollingNodeDelegate->commitStateAfterChildren(downcast<ScrollingStateScrollingNode>(stateNode)); > } > >-void ScrollingTreeOverflowScrollingNodeIOS::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >-{ >- m_scrollingNodeDelegate->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta); >-} >- > FloatPoint ScrollingTreeOverflowScrollingNodeIOS::scrollPosition() const > { > return m_scrollingNodeDelegate->scrollPosition(); >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.h (working copy) >@@ -61,7 +61,6 @@ public: > void resetScrollViewDelegate(); > void commitStateBeforeChildren(const WebCore::ScrollingStateScrollingNode&); > void commitStateAfterChildren(const WebCore::ScrollingStateScrollingNode&); >- void updateLayersAfterAncestorChange(const WebCore::ScrollingTreeNode& changedNode, const WebCore::FloatRect& fixedPositionRect, const WebCore::FloatSize& cumulativeDelta); > WebCore::FloatPoint scrollPosition() const; > void setScrollLayerPosition(const WebCore::FloatPoint&); > void updateChildNodesAfterScroll(const WebCore::FloatPoint& scrollPosition); >Index: Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm >=================================================================== >--- Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm (revision 241191) >+++ Source/WebKit/UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm (working copy) >@@ -223,17 +223,14 @@ void ScrollingTreeScrollingNodeDelegateI > { > SetForScope<bool> updatingChange(m_updatingFromStateNode, true); > if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer) >- || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ReachableContentsSize) >- || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition) > || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin)) { > BEGIN_BLOCK_OBJC_EXCEPTIONS > UIScrollView *scrollView = (UIScrollView *)[scrollLayer() delegate]; > ASSERT([scrollView isKindOfClass:[UIScrollView self]]); > >- if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer) >- || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer)) { >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer)) { > if (!m_scrollViewDelegate) > m_scrollViewDelegate = adoptNS([[WKScrollingNodeScrollViewDelegate alloc] initWithScrollingTreeNodeDelegate:this]); > >@@ -247,12 +244,8 @@ void ScrollingTreeScrollingNodeDelegateI > recomputeInsets = true; > } > >- if ((scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition) >- || scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin)) >- && ![m_scrollViewDelegate _isInUserInteraction]) { >- scrollView.contentOffset = scrollingStateNode.scrollPosition() + scrollOrigin(); >+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin)) > recomputeInsets = true; >- } > > if (recomputeInsets) { > UIEdgeInsets insets = UIEdgeInsetsMake(0, 0, 0, 0); >@@ -275,17 +268,6 @@ void ScrollingTreeScrollingNodeDelegateI > } > } > >-void ScrollingTreeScrollingNodeDelegateIOS::updateLayersAfterAncestorChange(const ScrollingTreeNode& changedNode, const FloatRect& fixedPositionRect, const FloatSize& cumulativeDelta) >-{ >- if (!scrollingNode().children()) >- return; >- >- FloatSize scrollDelta = lastCommittedScrollPosition() - scrollingNode().scrollPosition(); >- >- for (auto& child : *scrollingNode().children()) >- child->updateLayersAfterAncestorChange(changedNode, fixedPositionRect, cumulativeDelta + scrollDelta); >-} >- > FloatPoint ScrollingTreeScrollingNodeDelegateIOS::scrollPosition() const > { > BEGIN_BLOCK_OBJC_EXCEPTIONS >@@ -297,7 +279,7 @@ FloatPoint ScrollingTreeScrollingNodeDel > > void ScrollingTreeScrollingNodeDelegateIOS::setScrollLayerPosition(const FloatPoint& scrollPosition) > { >- [m_scrollLayer setPosition:CGPointMake(scrollPosition.x() + scrollOrigin().x(), scrollPosition.y() + scrollOrigin().y())]; >+ // FIXME: Set the scroll position in response to programmatic scroll. > updateChildNodesAfterScroll(scrollPosition); > } > >@@ -312,10 +294,9 @@ void ScrollingTreeScrollingNodeDelegateI > fixedPositionRect = frameNode->fixedPositionRect(); > else > fixedPositionRect = scrollingTree().fixedPositionRect(); >- FloatSize scrollDelta = lastCommittedScrollPosition() - scrollPosition; > > for (auto& child : *scrollingNode().children()) >- child->updateLayersAfterAncestorChange(scrollingNode(), fixedPositionRect, scrollDelta); >+ child->updateLayersAfterAncestorChange(scrollingNode(), fixedPositionRect); > } > > void ScrollingTreeScrollingNodeDelegateIOS::scrollWillStart() const >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 241193) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,15 @@ >+2019-02-08 Antti Koivisto <antti@apple.com> >+ >+ Compute fixed position rect based on scrolling tree view of the scroll position >+ https://bugs.webkit.org/show_bug.cgi?id=194433 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test by Frederic Wang. >+ >+ * fast/scrolling/ios/scroll-iframe-expected.html: >+ * fast/scrolling/ios/scroll-iframe.html: >+ > 2019-02-08 Eric Liang <ericliang@apple.com> > > Check if receive AXPressDidFail notification when performing AXPress action on disabled MenuList. >Index: LayoutTests/fast/scrolling/ios/scroll-iframe-expected.html >=================================================================== >--- LayoutTests/fast/scrolling/ios/scroll-iframe-expected.html (revision 241191) >+++ LayoutTests/fast/scrolling/ios/scroll-iframe-expected.html (working copy) >@@ -19,6 +19,8 @@ > <div class=testdiv></div> > <div class=testdiv></div> > <div class=testdiv></div> >+ <div class=testdiv></div> >+ <div class=testdiv></div> > </div> > </body> > </html> >Index: LayoutTests/fast/scrolling/ios/scroll-iframe.html >=================================================================== >--- LayoutTests/fast/scrolling/ios/scroll-iframe.html (revision 241191) >+++ LayoutTests/fast/scrolling/ios/scroll-iframe.html (working copy) >@@ -37,11 +37,19 @@ > await touchAndDragFromPointToPoint(c.x, c.y, c.x, c.y - 2000); > await liftUpAtPoint(c.x, c.y - 2000); > >+ c = centerOf("positionFixed"); >+ await touchAndDragFromPointToPoint(c.x, c.y, c.x - 150, c.y - 150); >+ await liftUpAtPoint(c.x - 150, c.y - 150); >+ >+ c = centerOf("positionSticky"); >+ await touchAndDragFromPointToPoint(c.x, c.y, c.x, c.y - 150); >+ await liftUpAtPoint(c.x, c.y - 150); >+ > // Wait for scrolling to stabilize and for scrollbars to disappear. > setTimeout(() => {testRunner.notifyDone(); }, 2000); > } > >- var frameToLoadCount = 4; >+ var frameToLoadCount = 6; > function newFrameLoaded() { > frameToLoadCount--; > if (frameToLoadCount == 0) >@@ -85,6 +93,19 @@ > <div style='width: 100px; height: 500px; background: green;'></div> > </body>" onload="newFrameLoaded()"> > </iframe> >+ <iframe id="positionFixed" scrolling="yes" srcdoc=" >+ <body style='position: relative; margin: 0; width: 300px; height: 300px'> >+ <div style='position: fixed; width: 100px; height: 50px; background: green;'></div> >+ <div style='position: absolute; bottom: 0px; right: 0px; width: 100px; height: 50px; background: green;'></div> >+ </body>" onload="newFrameLoaded()"> >+ </iframe> >+ <iframe id="positionSticky" scrolling="yes" srcdoc=" >+ <body style='position: relative; margin: 0; width: 300px; height: 300px'> >+ <div style='height: 100px'></div> >+ <div style='position: -webkit-sticky; position: sticky; left: 0px; top: 0px; width: 100px; height: 50px; background: green;'></div> >+ <div style='position: absolute; bottom: 0px; width: 100px; height: 50px; background: green;'></div> >+ </body>" onload="newFrameLoaded()"> >+ </iframe> > </div> > </body> > </html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 194433
:
361500
|
361501
|
361502
|
361503
|
361504
|
361515
|
362606
|
362990