Diff
Modified: trunk/LayoutTests/ChangeLog (246592 => 246593)
--- trunk/LayoutTests/ChangeLog 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/LayoutTests/ChangeLog 2019-06-19 17:21:11 UTC (rev 246593)
@@ -1,3 +1,14 @@
+2019-06-19 Antti Koivisto <[email protected]>
+
+ RequestedScrollPosition shouldn't be applied after node reattach
+ https://bugs.webkit.org/show_bug.cgi?id=198994
+ <rdar://problem/51439685>
+
+ Reviewed by Simon Fraser.
+
+ * scrollingcoordinator/ios/scroll-position-after-reattach-expected.html: Added.
+ * scrollingcoordinator/ios/scroll-position-after-reattach.html: Added.
+
2019-06-19 Truitt Savell <[email protected]>
REGRESSION: ( r246394 ) webgpu/whlsl-buffer-fragment.html and webgpu/whlsl-buffer-vertex.html are failing
Added: trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach-expected.html (0 => 246593)
--- trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach-expected.html (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach-expected.html 2019-06-19 17:21:11 UTC (rev 246593)
@@ -0,0 +1,47 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true internal:AsyncFrameScrollingEnabled=true ] -->
+<style>
+#outer {
+ overflow: scroll;
+ width: 400px;
+ height: 400px;
+ border: 2px solid yellow;
+}
+#inner {
+ overflow: auto;
+ width: 300px;
+ height: 300px;
+ border: 2px solid blue;
+}
+#innercontent {
+ width: 1000px;
+ height: 1000px;
+ border: 10px solid green;
+}
+#outercontent {
+ width: 1000px;
+ height: 1000px;
+ border: 10px solid red;
+}
+</style>
+<script src=""
+<script>
+if (window.testRunner)
+ testRunner.waitUntilDone();
+
+async function doTest() {
+ if (!window.testRunner)
+ return;
+ inner.scrollTo(0, 200);
+ testRunner.notifyDone();
+}
+
+window.addEventListener('load', doTest, false);
+</script>
+
+<div id=outer>
+ <div id=inner>
+ <div id=innercontent>This should be scrollable</div>
+ </div>
+ <div id=outercontent class=content></div>
+</div>
+
Added: trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach.html (0 => 246593)
--- trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach.html (rev 0)
+++ trunk/LayoutTests/scrollingcoordinator/ios/scroll-position-after-reattach.html 2019-06-19 17:21:11 UTC (rev 246593)
@@ -0,0 +1,56 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true internal:AsyncFrameScrollingEnabled=true ] -->
+<style>
+#outer {
+ overflow: scroll;
+ width: 400px;
+ height: 400px;
+ border: 2px solid yellow;
+}
+#inner {
+ overflow: auto;
+ width: 300px;
+ height: 300px;
+ border: 2px solid blue;
+}
+#innercontent {
+ width: 1000px;
+ height: 1000px;
+ border: 10px solid green;
+}
+#outercontent {
+ width: 1000px;
+ height: 1000px;
+ border: 10px solid red;
+}
+</style>
+<script src=""
+<script>
+if (window.testRunner)
+ testRunner.waitUntilDone();
+
+function scroll() {
+ let removed = outercontent;
+ outercontent.remove();
+ document.offsetLeft;
+ setTimeout(() => outer.appendChild(removed));
+}
+
+async function doTest() {
+ if (!window.testRunner)
+ return;
+ inner.addEventListener("scroll", scroll);
+
+ await UIHelper.immediateScrollElementAtContentPointToOffset(50, 50, 0, 200);
+ testRunner.notifyDone();
+}
+
+window.addEventListener('load', doTest, false);
+</script>
+
+<div id=outer>
+ <div id=inner>
+ <div id=innercontent>This should be scrollable</div>
+ </div>
+ <div id=outercontent class=content></div>
+</div>
+
Modified: trunk/Source/WebCore/ChangeLog (246592 => 246593)
--- trunk/Source/WebCore/ChangeLog 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/ChangeLog 2019-06-19 17:21:11 UTC (rev 246593)
@@ -1,3 +1,54 @@
+2019-06-19 Antti Koivisto <[email protected]>
+
+ RequestedScrollPosition shouldn't be applied after node reattach
+ https://bugs.webkit.org/show_bug.cgi?id=198994
+ <rdar://problem/51439685>
+
+ Reviewed by Simon Fraser.
+
+ Test: scrollingcoordinator/ios/scroll-position-after-reattach.html
+
+ If a scrolling node gets reattached, its scroll position resets to (0,0) or whatever the previous
+ requestedScrollPosition was, and the current position is lost.
+
+ * page/scrolling/ScrollingStateFixedNode.cpp:
+ (WebCore::ScrollingStateFixedNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStateFixedNode::setAllPropertiesChanged): Deleted.
+
+ Rename to better reflect what this is for.
+
+ * page/scrolling/ScrollingStateFixedNode.h:
+ * page/scrolling/ScrollingStateFrameHostingNode.cpp:
+ (WebCore::ScrollingStateFrameHostingNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStateFrameHostingNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStateFrameHostingNode.h:
+ * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
+ (WebCore::ScrollingStateFrameScrollingNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStateFrameScrollingNode.h:
+ * page/scrolling/ScrollingStateNode.cpp:
+ (WebCore::ScrollingStateNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStateNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStateNode.h:
+ * page/scrolling/ScrollingStatePositionedNode.cpp:
+ (WebCore::ScrollingStatePositionedNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStatePositionedNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStatePositionedNode.h:
+ * page/scrolling/ScrollingStateScrollingNode.cpp:
+ (WebCore::ScrollingStateScrollingNode::setPropertyChangedBitsAfterReattach):
+
+ Don't set RequestedScrollPosition. It is a special property that is applied only once on request
+ and shouldn't get reapplied. Nodes should keep their existing scroll position on reattach.
+
+ (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStateScrollingNode.h:
+ * page/scrolling/ScrollingStateStickyNode.cpp:
+ (WebCore::ScrollingStateStickyNode::setPropertyChangedBitsAfterReattach):
+ (WebCore::ScrollingStateStickyNode::setAllPropertiesChanged): Deleted.
+ * page/scrolling/ScrollingStateStickyNode.h:
+ * page/scrolling/ScrollingStateTree.cpp:
+ (WebCore::ScrollingStateTree::nodeWasReattachedRecursive):
+
2019-06-18 Saam Barati <[email protected]>
[WHLSL] Support matrices
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -58,10 +58,10 @@
return adoptRef(*new ScrollingStateFixedNode(*this, adoptiveTree));
}
-void ScrollingStateFixedNode::setAllPropertiesChanged()
+void ScrollingStateFixedNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(ViewportConstraints);
- ScrollingStateNode::setAllPropertiesChanged();
+ ScrollingStateNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStateFixedNode::updateConstraints(const FixedPositionViewportConstraints& constraints)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFixedNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -55,7 +55,7 @@
ScrollingStateFixedNode(ScrollingStateTree&, ScrollingNodeID);
ScrollingStateFixedNode(const ScrollingStateFixedNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
void reconcileLayerPositionForViewportRect(const LayoutRect& viewportRect, ScrollingLayerPositionAction) override;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -57,11 +57,11 @@
return adoptRef(*new ScrollingStateFrameHostingNode(*this, adoptiveTree));
}
-void ScrollingStateFrameHostingNode::setAllPropertiesChanged()
+void ScrollingStateFrameHostingNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(ParentRelativeScrollableRect);
- ScrollingStateNode::setAllPropertiesChanged();
+ ScrollingStateNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStateFrameHostingNode::setParentRelativeScrollableRect(const LayoutRect& parentRelativeScrollableRect)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameHostingNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -53,7 +53,7 @@
ScrollingStateFrameHostingNode(ScrollingStateTree&, ScrollingNodeID);
ScrollingStateFrameHostingNode(const ScrollingStateFrameHostingNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
LayoutRect m_parentRelativeScrollableRect;
};
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -85,7 +85,7 @@
return adoptRef(*new ScrollingStateFrameScrollingNode(*this, adoptiveTree));
}
-void ScrollingStateFrameScrollingNode::setAllPropertiesChanged()
+void ScrollingStateFrameScrollingNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(FrameScaleFactor);
setPropertyChangedBit(EventTrackingRegion);
@@ -107,7 +107,7 @@
setPropertyChangedBit(MinLayoutViewportOrigin);
setPropertyChangedBit(MaxLayoutViewportOrigin);
- ScrollingStateScrollingNode::setAllPropertiesChanged();
+ ScrollingStateScrollingNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStateFrameScrollingNode::setFrameScaleFactor(float scaleFactor)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -135,7 +135,7 @@
ScrollingStateFrameScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
LayerRepresentation m_rootContentsLayer;
LayerRepresentation m_counterScrollingLayer;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -67,7 +67,7 @@
m_scrollingStateTree.setHasChangedProperties();
}
-void ScrollingStateNode::setAllPropertiesChanged()
+void ScrollingStateNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(Layer);
setPropertyChangedBit(ChildNodes);
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -212,7 +212,7 @@
bool hasChangedProperty(unsigned propertyBit) const { return m_changedProperties & (static_cast<ChangedProperties>(1) << propertyBit); }
void resetChangedProperties() { m_changedProperties = 0; }
void setPropertyChanged(unsigned propertyBit);
- virtual void setAllPropertiesChanged();
+ virtual void setPropertyChangedBitsAfterReattach();
ChangedProperties changedProperties() const { return m_changedProperties; }
void setChangedProperties(ChangedProperties changedProperties) { m_changedProperties = changedProperties; }
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -59,11 +59,11 @@
return adoptRef(*new ScrollingStatePositionedNode(*this, adoptiveTree));
}
-void ScrollingStatePositionedNode::setAllPropertiesChanged()
+void ScrollingStatePositionedNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(RelatedOverflowScrollingNodes);
setPropertyChangedBit(LayoutConstraintData);
- ScrollingStateNode::setAllPropertiesChanged();
+ ScrollingStateNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStatePositionedNode::setRelatedOverflowScrollingNodes(Vector<ScrollingNodeID>&& nodes)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStatePositionedNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -61,7 +61,7 @@
ScrollingStatePositionedNode(ScrollingStateTree&, ScrollingNodeID);
ScrollingStatePositionedNode(const ScrollingStatePositionedNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -73,7 +73,7 @@
ScrollingStateScrollingNode::~ScrollingStateScrollingNode() = default;
-void ScrollingStateScrollingNode::setAllPropertiesChanged()
+void ScrollingStateScrollingNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(ScrollableAreaSize);
setPropertyChangedBit(TotalContentsSize);
@@ -82,7 +82,6 @@
setPropertyChangedBit(ScrollPosition);
setPropertyChangedBit(ScrollOrigin);
setPropertyChangedBit(ScrollableAreaParams);
- setPropertyChangedBit(RequestedScrollPosition);
#if ENABLE(CSS_SCROLL_SNAP)
setPropertyChangedBit(HorizontalSnapOffsets);
setPropertyChangedBit(VerticalSnapOffsets);
@@ -98,7 +97,7 @@
setPropertyChangedBit(VerticalScrollbarLayer);
setPropertyChangedBit(PainterForScrollbar);
- ScrollingStateNode::setAllPropertiesChanged();
+ ScrollingStateNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStateScrollingNode::setScrollableAreaSize(const FloatSize& size)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -139,7 +139,7 @@
ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -58,10 +58,10 @@
return adoptRef(*new ScrollingStateStickyNode(*this, adoptiveTree));
}
-void ScrollingStateStickyNode::setAllPropertiesChanged()
+void ScrollingStateStickyNode::setPropertyChangedBitsAfterReattach()
{
setPropertyChangedBit(ViewportConstraints);
- ScrollingStateNode::setAllPropertiesChanged();
+ ScrollingStateNode::setPropertyChangedBitsAfterReattach();
}
void ScrollingStateStickyNode::updateConstraints(const StickyPositionViewportConstraints& constraints)
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateStickyNode.h 2019-06-19 17:21:11 UTC (rev 246593)
@@ -55,7 +55,7 @@
ScrollingStateStickyNode(ScrollingStateTree&, ScrollingNodeID);
ScrollingStateStickyNode(const ScrollingStateStickyNode&, ScrollingStateTree&);
- void setAllPropertiesChanged() override;
+ void setPropertyChangedBitsAfterReattach() override;
void reconcileLayerPositionForViewportRect(const LayoutRect& viewportRect, ScrollingLayerPositionAction) override;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp (246592 => 246593)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp 2019-06-19 17:13:25 UTC (rev 246592)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateTree.cpp 2019-06-19 17:21:11 UTC (rev 246593)
@@ -274,7 +274,7 @@
void ScrollingStateTree::nodeWasReattachedRecursive(ScrollingStateNode& node)
{
// When a node is re-attached, the ScrollingTree is recreating the ScrollingNode from scratch, so we need to set all the dirty bits.
- node.setAllPropertiesChanged();
+ node.setPropertyChangedBitsAfterReattach();
if (auto* children = node.children()) {
for (auto& child : *children)