Diff
Modified: trunk/Source/WebCore/ChangeLog (242358 => 242359)
--- trunk/Source/WebCore/ChangeLog 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/ChangeLog 2019-03-04 16:57:38 UTC (rev 242359)
@@ -1,3 +1,82 @@
+2019-03-04 Simon Fraser <simon.fra...@apple.com>
+
+ Share more code between overflow and frame scrolling nodes, fixing overflow scrollbar display
+ https://bugs.webkit.org/show_bug.cgi?id=195258
+
+ Reviewed by Antti Koivisto.
+
+ This patch moves management of scrollbar layers and scrollbar painters ("NSScrollerImp") down to
+ ScrollingStateScrollingNode to be shared between frame and overflow nodes, allowing for
+ scrolling thread updates of overflow scrollbars. It also moves some scrolling tree-side code
+ to ScrollingTreeScrollingNodeDelegateMac to be shared between the "tree" nodes for overflow and frames.
+
+ Layers for scrollbars are given to scrolling state nodes via setNodeLayers() now, and
+ RenderLayerCompositor::updateScrollingNodeLayers() is added to provide a bottleneck to call that.
+ At some point AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() should be relieved
+ of the responsibility of pushing scrollbar layers (but the scrolling state tree needs to hold
+ references to GraphicsLayers before that becomes safe).
+
+ The actual fix that allows overflow scrollbars to show is the change in
+ AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() that calls scrollableArea.*ScrollbarLayerDidChange()
+ for all ScrollableAreas. This ensures that the CALayer is pushed onto the NSScrollerImp.
+
+ * SourcesCocoa.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * page/scrolling/AsyncScrollingCoordinator.cpp:
+ (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
+ (WebCore::AsyncScrollingCoordinator::setNodeLayers):
+ (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
+ (WebCore::AsyncScrollingCoordinator::setScrollingNodeScrollableAreaGeometry):
+ * page/scrolling/ScrollingCoordinator.h:
+ * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
+ (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
+ (WebCore::ScrollingStateFrameScrollingNode::setAllPropertiesChanged):
+ (WebCore::ScrollingStateFrameScrollingNode::setVerticalScrollbarLayer): Deleted.
+ (WebCore::ScrollingStateFrameScrollingNode::setHorizontalScrollbarLayer): Deleted.
+ (WebCore::ScrollingStateFrameScrollingNode::setScrollerImpsFromScrollbars): Deleted.
+ * page/scrolling/ScrollingStateFrameScrollingNode.h:
+ * page/scrolling/ScrollingStateScrollingNode.cpp:
+ (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
+ (WebCore::ScrollingStateScrollingNode::setAllPropertiesChanged):
+ (WebCore::ScrollingStateScrollingNode::setHorizontalScrollbarLayer):
+ (WebCore::ScrollingStateScrollingNode::setVerticalScrollbarLayer):
+ (WebCore::ScrollingStateScrollingNode::setScrollerImpsFromScrollbars):
+ * page/scrolling/ScrollingStateScrollingNode.h:
+ (WebCore::ScrollingStateScrollingNode::horizontalScrollbarLayer const):
+ (WebCore::ScrollingStateScrollingNode::verticalScrollbarLayer const):
+ (WebCore::ScrollingStateScrollingNode::verticalScrollerImp const):
+ (WebCore::ScrollingStateScrollingNode::horizontalScrollerImp const):
+ * page/scrolling/ScrollingTree.cpp:
+ (WebCore::ScrollingTree::setOrClearLatchedNode):
+ (WebCore::ScrollingTree::handleWheelEvent):
+ * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm: Renamed from Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm.
+ (WebCore::ScrollingStateScrollingNode::setScrollerImpsFromScrollbars):
+ * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
+ * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
+ (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
+ (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
+ (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers):
+ (WebCore::ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac): Deleted.
+ (WebCore::ScrollingTreeFrameScrollingNodeMac::releaseReferencesToScrollerImpsOnTheMainThread): Deleted.
+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
+ * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren):
+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
+ (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionRelatedLayers):
+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
+ * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::~ScrollingTreeScrollingNodeDelegateMac):
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode):
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters):
+ (WebCore::ScrollingTreeScrollingNodeDelegateMac::releaseReferencesToScrollerImpsOnTheMainThread):
+ * platform/ScrollbarThemeComposite.h:
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::didChangePlatformLayerForLayer):
+ (WebCore::RenderLayerCompositor::updateScrollingNodeLayers):
+ (WebCore::RenderLayerCompositor::updateScrollingNodeForScrollingRole):
+ * rendering/RenderLayerCompositor.h:
+
2019-03-04 Jer Noble <jer.no...@apple.com>
Remove HEVC as a codec requiring hardware support.
Modified: trunk/Source/WebCore/SourcesCocoa.txt (242358 => 242359)
--- trunk/Source/WebCore/SourcesCocoa.txt 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/SourcesCocoa.txt 2019-03-04 16:57:38 UTC (rev 242359)
@@ -152,7 +152,7 @@
page/scrolling/mac/ScrollingCoordinatorMac.mm
page/scrolling/mac/ScrollingMomentumCalculatorMac.mm
-page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm
+page/scrolling/mac/ScrollingStateScrollingNodeMac.mm
page/scrolling/mac/ScrollingThreadMac.mm
page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm
page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (242358 => 242359)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2019-03-04 16:57:38 UTC (rev 242359)
@@ -354,6 +354,7 @@
0F60F32B1DFBB10700416D6C /* CommonVM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F60F32A1DFBB10400416D6C /* CommonVM.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F6383DE18615B29003E5DB5 /* ThreadedScrollingTree.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6383DC18615B29003E5DB5 /* ThreadedScrollingTree.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F6A12BE1A00923700C6DE72 /* DebugPageOverlays.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F6A12BC1A00923700C6DE72 /* DebugPageOverlays.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 0F73B769222B3A0C00805316 /* ScrollingTreeOverflowScrollingNodeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FC0516A219B5EBE0031C39E /* ScrollingTreeOverflowScrollingNodeMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F7D07331884C56C00B4AF86 /* PlatformTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 072847E216EBC5B00043CFA4 /* PlatformTextTrack.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F850FE31ED7C18300FB77A7 /* PerformanceLoggingClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F850FE21ED7C18300FB77A7 /* PerformanceLoggingClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F8716701C869D83004FF0DE /* LengthPoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F87166E1C869D83004FF0DE /* LengthPoint.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5785,6 +5786,7 @@
0F6A12BB1A00923700C6DE72 /* DebugPageOverlays.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DebugPageOverlays.cpp; sourceTree = "<group>"; };
0F6A12BC1A00923700C6DE72 /* DebugPageOverlays.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugPageOverlays.h; sourceTree = "<group>"; };
0F70495D211B524200369968 /* ActivityState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ActivityState.cpp; sourceTree = "<group>"; };
+ 0F73B765222B327F00805316 /* ScrollingStateScrollingNodeMac.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingStateScrollingNodeMac.mm; sourceTree = "<group>"; };
0F7DF1471E2BF1A60095951B /* WebCoreJSClientData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebCoreJSClientData.cpp; sourceTree = "<group>"; };
0F850FE21ED7C18300FB77A7 /* PerformanceLoggingClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceLoggingClient.h; sourceTree = "<group>"; };
0F87166D1C869D83004FF0DE /* LengthPoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LengthPoint.cpp; sourceTree = "<group>"; };
@@ -5804,7 +5806,6 @@
0FA0852B1E6FB55A00975FDD /* CSSProperties.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = CSSProperties.json; sourceTree = "<group>"; };
0FA24D77162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GraphicsLayerUpdater.cpp; sourceTree = "<group>"; };
0FA24D78162DF91900A3F4C0 /* GraphicsLayerUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsLayerUpdater.h; sourceTree = "<group>"; };
- 0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ScrollingStateFrameScrollingNodeMac.mm; sourceTree = "<group>"; };
0FB6252C18DE1B1500A07C05 /* GeometryUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GeometryUtilities.cpp; sourceTree = "<group>"; };
0FB6252D18DE1B1500A07C05 /* GeometryUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryUtilities.h; sourceTree = "<group>"; };
0FB8890C167D30160010CDA5 /* ScrollingStateStickyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingStateStickyNode.cpp; sourceTree = "<group>"; };
@@ -16985,7 +16986,7 @@
1AF62EE314DA22A70041556C /* ScrollingCoordinatorMac.mm */,
517DEEE71DE94B0800B91644 /* ScrollingMomentumCalculatorMac.h */,
517DEEE31DE94ADC00B91644 /* ScrollingMomentumCalculatorMac.mm */,
- 0FA88EBC16A8D1BD00F99984 /* ScrollingStateFrameScrollingNodeMac.mm */,
+ 0F73B765222B327F00805316 /* ScrollingStateScrollingNodeMac.mm */,
1AF62F2314DAFE910041556C /* ScrollingThreadMac.mm */,
93C4A4131629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.h */,
93C4A4141629DF5A00C3EB6E /* ScrollingTreeFrameScrollingNodeMac.mm */,
@@ -31503,6 +31504,7 @@
0FE5806419327A6200DE32EB /* ScrollingTreeMac.h in Headers */,
1AAADDE414DC8C8F00AF64B3 /* ScrollingTreeNode.h in Headers */,
0FEA3E80191B3169000F1B55 /* ScrollingTreeOverflowScrollingNode.h in Headers */,
+ 0F73B769222B3A0C00805316 /* ScrollingTreeOverflowScrollingNodeMac.h in Headers */,
9391A99D1629D70000297330 /* ScrollingTreeScrollingNode.h in Headers */,
A6D5A99D1629D70000297330 /* ScrollingTreeScrollingNodeDelegate.h in Headers */,
0F37F0852202BF9800A89C0B /* ScrollingTreeScrollingNodeDelegateMac.h in Headers */,
Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -456,8 +456,8 @@
ASSERT(m_page);
auto* node = m_scrollingStateTree->stateNodeForID(scrollableArea.scrollingNodeID());
- if (is<ScrollingStateFrameScrollingNode>(node)) {
- auto& scrollingNode = downcast<ScrollingStateFrameScrollingNode>(*node);
+ if (is<ScrollingStateScrollingNode>(node)) {
+ auto& scrollingNode = downcast<ScrollingStateScrollingNode>(*node);
if (orientation == VerticalScrollbar)
scrollingNode.setVerticalScrollbarLayer(scrollableArea.layerForVerticalScrollbar());
else
@@ -464,12 +464,10 @@
scrollingNode.setHorizontalScrollbarLayer(scrollableArea.layerForHorizontalScrollbar());
}
- if (&scrollableArea == m_page->mainFrame().view()) {
- if (orientation == VerticalScrollbar)
- scrollableArea.verticalScrollbarLayerDidChange();
- else
- scrollableArea.horizontalScrollbarLayerDidChange();
- }
+ if (orientation == VerticalScrollbar)
+ scrollableArea.verticalScrollbarLayerDidChange();
+ else
+ scrollableArea.horizontalScrollbarLayerDidChange();
}
ScrollingNodeID AsyncScrollingCoordinator::createNode(ScrollingNodeType nodeType, ScrollingNodeID newNodeID)
@@ -567,6 +565,8 @@
auto& scrollingNode = downcast<ScrollingStateScrollingNode>(*node);
scrollingNode.setScrollContainerLayer(nodeLayers.scrollContainerLayer);
scrollingNode.setScrolledContentsLayer(nodeLayers.scrolledContentsLayer);
+ scrollingNode.setHorizontalScrollbarLayer(nodeLayers.horizontalScrollbarLayer);
+ scrollingNode.setVerticalScrollbarLayer(nodeLayers.verticalScrollbarLayer);
if (is<ScrollingStateFrameScrollingNode>(node)) {
auto& frameScrollingNode = downcast<ScrollingStateFrameScrollingNode>(*node);
@@ -605,10 +605,6 @@
auto& frameScrollingNode = downcast<ScrollingStateFrameScrollingNode>(*stateNode);
- auto* verticalScrollbar = frameView.verticalScrollbar();
- auto* horizontalScrollbar = frameView.horizontalScrollbar();
- frameScrollingNode.setScrollerImpsFromScrollbars(verticalScrollbar, horizontalScrollbar);
-
frameScrollingNode.setFrameScaleFactor(frameView.frame().frameScaleFactor());
frameScrollingNode.setHeaderHeight(frameView.headerHeight());
frameScrollingNode.setFooterHeight(frameView.footerHeight());
@@ -631,6 +627,11 @@
return;
auto& scrollingNode = downcast<ScrollingStateScrollingNode>(*stateNode);
+
+ auto* verticalScrollbar = scrollableArea.verticalScrollbar();
+ auto* horizontalScrollbar = scrollableArea.horizontalScrollbar();
+ scrollingNode.setScrollerImpsFromScrollbars(verticalScrollbar, horizontalScrollbar);
+
scrollingNode.setScrollOrigin(scrollableArea.scrollOrigin());
scrollingNode.setScrollPosition(scrollableArea.scrollPosition());
scrollingNode.setTotalContentsSize(scrollableArea.totalContentsSize());
@@ -637,9 +638,6 @@
scrollingNode.setReachableContentsSize(scrollableArea.reachableTotalContentsSize());
scrollingNode.setScrollableAreaSize(scrollableArea.visibleSize());
- auto* verticalScrollbar = scrollableArea.verticalScrollbar();
- auto* horizontalScrollbar = scrollableArea.horizontalScrollbar();
-
ScrollableAreaParameters scrollParameters;
scrollParameters.horizontalScrollElasticity = scrollableArea.horizontalScrollElasticity();
scrollParameters.verticalScrollElasticity = scrollableArea.verticalScrollElasticity();
Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -136,6 +136,8 @@
GraphicsLayer* counterScrollingLayer { nullptr };
GraphicsLayer* insetClipLayer { nullptr };
GraphicsLayer* rootContentsLayer { nullptr };
+ GraphicsLayer* horizontalScrollbarLayer { nullptr };
+ GraphicsLayer* verticalScrollbarLayer { nullptr };
};
virtual void setNodeLayers(ScrollingNodeID, const NodeLayers&) { }
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -46,10 +46,6 @@
ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode(const ScrollingStateFrameScrollingNode& stateNode, ScrollingStateTree& adoptiveTree)
: ScrollingStateScrollingNode(stateNode, adoptiveTree)
-#if PLATFORM(MAC)
- , m_verticalScrollerImp(stateNode.verticalScrollerImp())
- , m_horizontalScrollerImp(stateNode.horizontalScrollerImp())
-#endif
, m_eventTrackingRegions(stateNode.eventTrackingRegions())
, m_requestedScrollPosition(stateNode.requestedScrollPosition())
, m_layoutViewport(stateNode.layoutViewport())
@@ -82,12 +78,6 @@
if (hasChangedProperty(FooterLayer))
setFooterLayer(stateNode.footerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
- if (hasChangedProperty(VerticalScrollbarLayer))
- setVerticalScrollbarLayer(stateNode.verticalScrollbarLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
-
- if (hasChangedProperty(HorizontalScrollbarLayer))
- setHorizontalScrollbarLayer(stateNode.horizontalScrollbarLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
}
ScrollingStateFrameScrollingNode::~ScrollingStateFrameScrollingNode() = default;
@@ -111,9 +101,6 @@
setPropertyChangedBit(FooterHeight);
setPropertyChangedBit(HeaderLayer);
setPropertyChangedBit(FooterLayer);
- setPropertyChangedBit(VerticalScrollbarLayer);
- setPropertyChangedBit(HorizontalScrollbarLayer);
- setPropertyChangedBit(PainterForScrollbar);
setPropertyChangedBit(BehaviorForFixedElements);
setPropertyChangedBit(TopContentInset);
setPropertyChangedBit(FixedElementsLayoutRelativeToFrame);
@@ -270,24 +257,6 @@
setPropertyChanged(FooterLayer);
}
-void ScrollingStateFrameScrollingNode::setVerticalScrollbarLayer(const LayerRepresentation& layer)
-{
- if (layer == m_verticalScrollbarLayer)
- return;
-
- m_verticalScrollbarLayer = layer;
- setPropertyChanged(VerticalScrollbarLayer);
-}
-
-void ScrollingStateFrameScrollingNode::setHorizontalScrollbarLayer(const LayerRepresentation& layer)
-{
- if (layer == m_horizontalScrollbarLayer)
- return;
-
- m_horizontalScrollbarLayer = layer;
- setPropertyChanged(HorizontalScrollbarLayer);
-}
-
void ScrollingStateFrameScrollingNode::setFixedElementsLayoutRelativeToFrame(bool fixedElementsLayoutRelativeToFrame)
{
if (fixedElementsLayoutRelativeToFrame == m_fixedElementsLayoutRelativeToFrame)
@@ -306,12 +275,6 @@
setPropertyChanged(AsyncFrameOrOverflowScrollingEnabled);
}
-#if !PLATFORM(MAC)
-void ScrollingStateFrameScrollingNode::setScrollerImpsFromScrollbars(Scrollbar*, Scrollbar*)
-{
-}
-#endif
-
void ScrollingStateFrameScrollingNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const
{
ts << "Frame scrolling node";
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateFrameScrollingNode.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -58,9 +58,6 @@
FooterHeight,
HeaderLayer,
FooterLayer,
- VerticalScrollbarLayer,
- HorizontalScrollbarLayer,
- PainterForScrollbar,
BehaviorForFixedElements,
TopContentInset,
FixedElementsLayoutRelativeToFrame,
@@ -125,12 +122,6 @@
const LayerRepresentation& footerLayer() const { return m_footerLayer; }
WEBCORE_EXPORT void setFooterLayer(const LayerRepresentation&);
- const LayerRepresentation& verticalScrollbarLayer() const { return m_verticalScrollbarLayer; }
- WEBCORE_EXPORT void setVerticalScrollbarLayer(const LayerRepresentation&);
-
- const LayerRepresentation& horizontalScrollbarLayer() const { return m_horizontalScrollbarLayer; }
- WEBCORE_EXPORT void setHorizontalScrollbarLayer(const LayerRepresentation&);
-
// These are more like Settings, and should probably move to the Scrolling{State}Tree itself.
bool fixedElementsLayoutRelativeToFrame() const { return m_fixedElementsLayoutRelativeToFrame; }
WEBCORE_EXPORT void setFixedElementsLayoutRelativeToFrame(bool);
@@ -138,12 +129,6 @@
bool asyncFrameOrOverflowScrollingEnabled() const { return m_asyncFrameOrOverflowScrollingEnabled; }
void setAsyncFrameOrOverflowScrollingEnabled(bool);
-#if PLATFORM(MAC)
- NSScrollerImp *verticalScrollerImp() const { return m_verticalScrollerImp.get(); }
- NSScrollerImp *horizontalScrollerImp() const { return m_horizontalScrollerImp.get(); }
-#endif
- void setScrollerImpsFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
-
void dumpProperties(WTF::TextStream&, ScrollingStateTreeAsTextBehavior) const override;
private:
@@ -158,14 +143,7 @@
LayerRepresentation m_contentShadowLayer;
LayerRepresentation m_headerLayer;
LayerRepresentation m_footerLayer;
- LayerRepresentation m_verticalScrollbarLayer;
- LayerRepresentation m_horizontalScrollbarLayer;
-#if PLATFORM(MAC)
- RetainPtr<NSScrollerImp> m_verticalScrollerImp;
- RetainPtr<NSScrollerImp> m_horizontalScrollerImp;
-#endif
-
EventTrackingRegions m_eventTrackingRegions;
FloatPoint m_requestedScrollPosition;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -50,6 +50,10 @@
#if ENABLE(CSS_SCROLL_SNAP)
, m_snapOffsetsInfo(stateNode.m_snapOffsetsInfo)
#endif
+#if PLATFORM(MAC)
+ , m_verticalScrollerImp(stateNode.verticalScrollerImp())
+ , m_horizontalScrollerImp(stateNode.horizontalScrollerImp())
+#endif
, m_scrollableAreaParameters(stateNode.scrollableAreaParameters())
, m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll())
, m_expectsWheelEventTestTrigger(stateNode.expectsWheelEventTestTrigger())
@@ -56,8 +60,15 @@
{
if (hasChangedProperty(ScrollContainerLayer))
setScrollContainerLayer(stateNode.scrollContainerLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
if (hasChangedProperty(ScrolledContentsLayer))
setScrolledContentsLayer(stateNode.scrolledContentsLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+ if (hasChangedProperty(VerticalScrollbarLayer))
+ setVerticalScrollbarLayer(stateNode.verticalScrollbarLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
+ if (hasChangedProperty(HorizontalScrollbarLayer))
+ setHorizontalScrollbarLayer(stateNode.horizontalScrollbarLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
}
ScrollingStateScrollingNode::~ScrollingStateScrollingNode() = default;
@@ -83,6 +94,9 @@
setPropertyChangedBit(ExpectsWheelEventTestTrigger);
setPropertyChangedBit(ScrollContainerLayer);
setPropertyChangedBit(ScrolledContentsLayer);
+ setPropertyChangedBit(HorizontalScrollbarLayer);
+ setPropertyChangedBit(VerticalScrollbarLayer);
+ setPropertyChangedBit(PainterForScrollbar);
ScrollingStateNode::setAllPropertiesChanged();
}
@@ -240,6 +254,30 @@
setPropertyChanged(ScrolledContentsLayer);
}
+void ScrollingStateScrollingNode::setHorizontalScrollbarLayer(const LayerRepresentation& layer)
+{
+ if (layer == m_horizontalScrollbarLayer)
+ return;
+
+ m_horizontalScrollbarLayer = layer;
+ setPropertyChanged(HorizontalScrollbarLayer);
+}
+
+void ScrollingStateScrollingNode::setVerticalScrollbarLayer(const LayerRepresentation& layer)
+{
+ if (layer == m_verticalScrollbarLayer)
+ return;
+
+ m_verticalScrollbarLayer = layer;
+ setPropertyChanged(VerticalScrollbarLayer);
+}
+
+#if !PLATFORM(MAC)
+void ScrollingStateScrollingNode::setScrollerImpsFromScrollbars(Scrollbar*, Scrollbar*)
+{
+}
+#endif
+
void ScrollingStateScrollingNode::dumpProperties(TextStream& ts, ScrollingStateTreeAsTextBehavior behavior) const
{
ScrollingStateNode::dumpProperties(ts, behavior);
Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -32,6 +32,10 @@
#include "ScrollingCoordinator.h"
#include "ScrollingStateNode.h"
+#if PLATFORM(COCOA)
+OBJC_CLASS NSScrollerImp;
+#endif
+
namespace WebCore {
class ScrollingStateScrollingNode : public ScrollingStateNode {
@@ -58,6 +62,9 @@
ExpectsWheelEventTestTrigger,
ScrollContainerLayer,
ScrolledContentsLayer,
+ HorizontalScrollbarLayer,
+ VerticalScrollbarLayer,
+ PainterForScrollbar,
NumScrollingStateNodeBits // This must remain at the last position.
};
@@ -116,6 +123,18 @@
const LayerRepresentation& scrolledContentsLayer() const { return m_scrolledContentsLayer; }
WEBCORE_EXPORT void setScrolledContentsLayer(const LayerRepresentation&);
+ const LayerRepresentation& horizontalScrollbarLayer() const { return m_horizontalScrollbarLayer; }
+ WEBCORE_EXPORT void setHorizontalScrollbarLayer(const LayerRepresentation&);
+
+ const LayerRepresentation& verticalScrollbarLayer() const { return m_verticalScrollbarLayer; }
+ WEBCORE_EXPORT void setVerticalScrollbarLayer(const LayerRepresentation&);
+
+#if PLATFORM(MAC)
+ NSScrollerImp *verticalScrollerImp() const { return m_verticalScrollerImp.get(); }
+ NSScrollerImp *horizontalScrollerImp() const { return m_horizontalScrollerImp.get(); }
+#endif
+ void setScrollerImpsFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar);
+
protected:
ScrollingStateScrollingNode(ScrollingStateTree&, ScrollingNodeType, ScrollingNodeID);
ScrollingStateScrollingNode(const ScrollingStateScrollingNode&, ScrollingStateTree&);
@@ -132,14 +151,25 @@
FloatPoint m_scrollPosition;
FloatPoint m_requestedScrollPosition;
IntPoint m_scrollOrigin;
+
#if ENABLE(CSS_SCROLL_SNAP)
ScrollSnapOffsetsInfo<float> m_snapOffsetsInfo;
unsigned m_currentHorizontalSnapPointIndex { 0 };
unsigned m_currentVerticalSnapPointIndex { 0 };
#endif
- ScrollableAreaParameters m_scrollableAreaParameters;
+
LayerRepresentation m_scrollContainerLayer;
LayerRepresentation m_scrolledContentsLayer;
+ LayerRepresentation m_horizontalScrollbarLayer;
+ LayerRepresentation m_verticalScrollbarLayer;
+
+#if PLATFORM(MAC)
+ RetainPtr<NSScrollerImp> m_verticalScrollerImp;
+ RetainPtr<NSScrollerImp> m_horizontalScrollerImp;
+#endif
+
+ ScrollableAreaParameters m_scrollableAreaParameters;
+
bool m_requestedScrollPositionRepresentsProgrammaticScroll { false };
bool m_expectsWheelEventTestTrigger { false };
};
Modified: trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/ScrollingTree.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -80,10 +80,13 @@
void ScrollingTree::setOrClearLatchedNode(const PlatformWheelEvent& wheelEvent, ScrollingNodeID nodeID)
{
- if (wheelEvent.shouldConsiderLatching())
+ if (wheelEvent.shouldConsiderLatching()) {
+ LOG_WITH_STREAM(Scrolling, stream << "ScrollingTree " << this << " setOrClearLatchedNode: setting latched node " << nodeID);
setLatchedNode(nodeID);
- else if (wheelEvent.shouldResetLatching())
+ } else if (wheelEvent.shouldResetLatching()) {
+ LOG_WITH_STREAM(Scrolling, stream << "ScrollingTree " << this << " setOrClearLatchedNode: clearing latched node (was " << latchedNode() << ")");
clearLatchedNode();
+ }
}
ScrollingEventResult ScrollingTree::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
@@ -97,6 +100,7 @@
}
if (hasLatchedNode()) {
+ LOG_WITH_STREAM(Scrolling, stream << " has latched node " << latchedNode());
auto* node = nodeForID(latchedNode());
if (is<ScrollingTreeScrollingNode>(node))
return downcast<ScrollingTreeScrollingNode>(*node).handleWheelEvent(wheelEvent);
Deleted: trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm 2019-03-04 16:57:38 UTC (rev 242359)
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "ScrollingStateFrameScrollingNode.h"
-
-#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
-
-#include "GraphicsLayer.h"
-#include "Scrollbar.h"
-#include "ScrollbarThemeMac.h"
-#include "ScrollingStateTree.h"
-
-namespace WebCore {
-
-void ScrollingStateFrameScrollingNode::setScrollerImpsFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar)
-{
- ScrollbarTheme& scrollbarTheme = ScrollbarTheme::theme();
- if (scrollbarTheme.isMockTheme())
- return;
- ScrollbarThemeMac& macTheme = static_cast<ScrollbarThemeMac&>(scrollbarTheme);
-
- NSScrollerImp *verticalPainter = verticalScrollbar && verticalScrollbar->supportsUpdateOnSecondaryThread()
- ? macTheme.painterForScrollbar(*verticalScrollbar) : nullptr;
- NSScrollerImp *horizontalPainter = horizontalScrollbar && horizontalScrollbar->supportsUpdateOnSecondaryThread()
- ? macTheme.painterForScrollbar(*horizontalScrollbar) : nullptr;
-
- if (m_verticalScrollerImp == verticalPainter && m_horizontalScrollerImp == horizontalPainter)
- return;
-
- m_verticalScrollerImp = verticalPainter;
- m_horizontalScrollerImp = horizontalPainter;
-
- setPropertyChanged(PainterForScrollbar);
-}
-
-} // namespace WebCore
-
-#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
Copied: trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm (from rev 242358, trunk/Source/WebCore/page/scrolling/mac/ScrollingStateFrameScrollingNodeMac.mm) (0 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm (rev 0)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingStateScrollingNodeMac.mm 2019-03-04 16:57:38 UTC (rev 242359)
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ScrollingStateScrollingNode.h"
+
+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
+
+#include "GraphicsLayer.h"
+#include "Scrollbar.h"
+#include "ScrollbarThemeMac.h"
+#include "ScrollingStateTree.h"
+
+namespace WebCore {
+
+void ScrollingStateScrollingNode::setScrollerImpsFromScrollbars(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar)
+{
+ ScrollbarTheme& scrollbarTheme = ScrollbarTheme::theme();
+ if (scrollbarTheme.isMockTheme())
+ return;
+ ScrollbarThemeMac& macTheme = static_cast<ScrollbarThemeMac&>(scrollbarTheme);
+
+ NSScrollerImp *verticalPainter = verticalScrollbar && verticalScrollbar->supportsUpdateOnSecondaryThread()
+ ? macTheme.painterForScrollbar(*verticalScrollbar) : nullptr;
+ NSScrollerImp *horizontalPainter = horizontalScrollbar && horizontalScrollbar->supportsUpdateOnSecondaryThread()
+ ? macTheme.painterForScrollbar(*horizontalScrollbar) : nullptr;
+
+ if (m_verticalScrollerImp == verticalPainter && m_horizontalScrollerImp == horizontalPainter)
+ return;
+
+ m_verticalScrollerImp = verticalPainter;
+ m_horizontalScrollerImp = horizontalPainter;
+
+ setPropertyChanged(PainterForScrollbar);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -45,8 +45,6 @@
protected:
ScrollingTreeFrameScrollingNodeMac(ScrollingTree&, ScrollingNodeType, ScrollingNodeID);
- void releaseReferencesToScrollerImpsOnTheMainThread();
-
// ScrollingTreeNode member functions.
void commitStateBeforeChildren(const ScrollingStateNode&) override;
void commitStateAfterChildren(const ScrollingStateNode&) override;
@@ -68,6 +66,8 @@
void currentScrollPositionChanged() override;
void repositionScrollingLayers() override;
+ ScrollingTreeScrollingNodeDelegateMac m_delegate;
+
RetainPtr<CALayer> m_rootContentsLayer;
RetainPtr<CALayer> m_counterScrollingLayer;
RetainPtr<CALayer> m_insetClipLayer;
@@ -74,10 +74,6 @@
RetainPtr<CALayer> m_contentShadowLayer;
RetainPtr<CALayer> m_headerLayer;
RetainPtr<CALayer> m_footerLayer;
- RetainPtr<NSScrollerImp> m_verticalScrollerImp;
- RetainPtr<NSScrollerImp> m_horizontalScrollerImp;
-
- ScrollingTreeScrollingNodeDelegateMac m_delegate;
bool m_lastScrollHadUnfilledPixels { false };
bool m_hadFirstUpdate { false };
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm 2019-03-04 16:57:38 UTC (rev 242359)
@@ -38,12 +38,10 @@
#import "ScrollingTree.h"
#import "TileController.h"
#import "WebLayer.h"
-#import <pal/spi/mac/NSScrollerImpSPI.h>
-#import <wtf/text/TextStream.h>
-
#import <QuartzCore/QuartzCore.h>
#import <wtf/Deque.h>
#import <wtf/text/CString.h>
+#import <wtf/text/TextStream.h>
namespace WebCore {
@@ -58,21 +56,8 @@
{
}
-ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac()
-{
- releaseReferencesToScrollerImpsOnTheMainThread();
-}
+ScrollingTreeFrameScrollingNodeMac::~ScrollingTreeFrameScrollingNodeMac() = default;
-void ScrollingTreeFrameScrollingNodeMac::releaseReferencesToScrollerImpsOnTheMainThread()
-{
- if (m_verticalScrollerImp || m_horizontalScrollerImp) {
- // FIXME: This is a workaround in place for the time being since NSScrollerImps cannot be deallocated
- // on a non-main thread. rdar://problem/24535055
- WTF::callOnMainThread([verticalScrollerImp = WTFMove(m_verticalScrollerImp), horizontalScrollerImp = WTFMove(m_horizontalScrollerImp)] {
- });
- }
-}
-
#if ENABLE(CSS_SCROLL_SNAP)
static inline Vector<LayoutUnit> convertToLayoutUnits(const Vector<float>& snapOffsetsAsFloat)
{
@@ -118,12 +103,6 @@
if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
m_footerLayer = scrollingStateNode.footerLayer();
- if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::PainterForScrollbar)) {
- releaseReferencesToScrollerImpsOnTheMainThread();
- m_verticalScrollerImp = scrollingStateNode.verticalScrollerImp();
- m_horizontalScrollerImp = scrollingStateNode.horizontalScrollerImp();
- }
-
bool logScrollingMode = !m_hadFirstUpdate;
if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::ReasonsForSynchronousScrolling))
logScrollingMode = true;
@@ -131,7 +110,10 @@
if (logScrollingMode && isRootNode() && scrollingTree().scrollingPerformanceLoggingEnabled())
scrollingTree().reportSynchronousScrollingReasonsChanged(MonotonicTime::now(), synchronousScrollingReasons());
+ m_delegate.updateFromStateNode(scrollingStateNode);
+
#if ENABLE(CSS_SCROLL_SNAP)
+ // FIXME: this should move to the delegate and be shared with overflow.
if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalSnapOffsets) || scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalSnapOffsetRanges))
m_delegate.updateScrollSnapPoints(ScrollEventAxis::Horizontal, convertToLayoutUnits(scrollingStateNode.horizontalSnapOffsets()), convertToLayoutUnits(scrollingStateNode.horizontalSnapOffsetRanges()));
@@ -170,24 +152,6 @@
if (!canHaveScrollbars())
return ScrollingEventResult::DidNotHandleEvent;
- if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseBegan) {
- [m_verticalScrollerImp setUsePresentationValue:YES];
- [m_horizontalScrollerImp setUsePresentationValue:YES];
- }
- if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseEnded || wheelEvent.momentumPhase() == PlatformWheelEventPhaseCancelled) {
- [m_verticalScrollerImp setUsePresentationValue:NO];
- [m_horizontalScrollerImp setUsePresentationValue:NO];
- }
-
-#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
- if (expectsWheelEventTestTrigger()) {
- if (scrollingTree().shouldHandleWheelEventSynchronously(wheelEvent))
- m_delegate.removeTestDeferralForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
- else
- m_delegate.deferTestsForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
- }
-#endif
-
m_delegate.handleWheelEvent(wheelEvent);
#if ENABLE(CSS_SCROLL_SNAP)
@@ -266,27 +230,7 @@
m_footerLayer.get().position = FloatPoint(horizontalScrollOffsetForBanner, FrameView::yPositionForFooterLayer(scrollPosition, topContentInset, totalContentsSize().height(), footerHeight()));
}
- if (m_verticalScrollerImp || m_horizontalScrollerImp) {
- [CATransaction begin];
- [CATransaction lock];
-
- if ([m_verticalScrollerImp shouldUsePresentationValue]) {
- float presentationValue;
- float overhangAmount;
- ScrollableArea::computeScrollbarValueAndOverhang(scrollPosition.y(), totalContentsSize().height(), visibleContentRect.height(), presentationValue, overhangAmount);
- [m_verticalScrollerImp setPresentationValue:presentationValue];
- }
-
- if ([m_horizontalScrollerImp shouldUsePresentationValue]) {
- float presentationValue;
- float overhangAmount;
- ScrollableArea::computeScrollbarValueAndOverhang(scrollPosition.x(), totalContentsSize().width(), visibleContentRect.width(), presentationValue, overhangAmount);
- [m_horizontalScrollerImp setPresentationValue:presentationValue];
- }
-
- [CATransaction unlock];
- [CATransaction commit];
- }
+ m_delegate.updateScrollbarPainters();
}
FloatPoint ScrollingTreeFrameScrollingNodeMac::minimumScrollPosition() const
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -34,12 +34,12 @@
namespace WebCore {
-class ScrollingTreeOverflowScrollingNodeMac : public ScrollingTreeOverflowScrollingNode {
+class WEBCORE_EXPORT ScrollingTreeOverflowScrollingNodeMac : public ScrollingTreeOverflowScrollingNode {
public:
static Ref<ScrollingTreeOverflowScrollingNodeMac> create(ScrollingTree&, ScrollingNodeID);
virtual ~ScrollingTreeOverflowScrollingNodeMac();
-private:
+protected:
ScrollingTreeOverflowScrollingNodeMac(ScrollingTree&, ScrollingNodeID);
void commitStateBeforeChildren(const ScrollingStateNode&) override;
@@ -48,9 +48,11 @@
FloatPoint adjustedScrollPosition(const FloatPoint&, ScrollPositionClamp) const override;
void repositionScrollingLayers() override;
+ void repositionRelatedLayers() override;
ScrollingEventResult handleWheelEvent(const PlatformWheelEvent&) override;
+private:
ScrollingTreeScrollingNodeDelegateMac m_delegate;
};
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm 2019-03-04 16:57:38 UTC (rev 242359)
@@ -51,9 +51,7 @@
void ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren(const ScrollingStateNode& stateNode)
{
ScrollingTreeOverflowScrollingNode::commitStateBeforeChildren(stateNode);
- const auto& scrollingStateNode = downcast<ScrollingStateOverflowScrollingNode>(stateNode);
- UNUSED_PARAM(scrollingStateNode);
- // FIXME: Scroll snap data.
+ m_delegate.updateFromStateNode(downcast<ScrollingStateOverflowScrollingNode>(stateNode));
}
void ScrollingTreeOverflowScrollingNodeMac::commitStateAfterChildren(const ScrollingStateNode& stateNode)
@@ -68,16 +66,6 @@
if (!canHaveScrollbars())
return ScrollingEventResult::DidNotHandleEvent;
-
-#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
- if (expectsWheelEventTestTrigger()) {
- if (scrollingTree().shouldHandleWheelEventSynchronously(wheelEvent))
- m_delegate.removeTestDeferralForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
- else
- m_delegate.deferTestsForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
- }
-#endif
-
m_delegate.handleWheelEvent(wheelEvent);
// FIXME: Scroll snap
@@ -101,6 +89,11 @@
scrolledContentsLayer().position = -scrollPosition;
}
+void ScrollingTreeOverflowScrollingNodeMac::repositionRelatedLayers()
+{
+ m_delegate.updateScrollbarPainters();
+}
+
} // namespace WebCore
#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -31,11 +31,14 @@
#include "ScrollController.h"
+OBJC_CLASS NSScrollerImp;
+
namespace WebCore {
class FloatPoint;
class FloatSize;
class IntPoint;
+class ScrollingStateScrollingNode;
class ScrollingTreeScrollingNode;
class ScrollingTree;
@@ -54,6 +57,9 @@
bool isScrollSnapInProgress() const;
#endif
+ void updateFromStateNode(const ScrollingStateScrollingNode&);
+ void updateScrollbarPainters();
+
void deferTestsForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const override;
void removeTestDeferralForReason(WheelEventTestTrigger::ScrollableAreaIdentifier, WheelEventTestTrigger::DeferTestTriggerReason) const override;
@@ -83,7 +89,12 @@
FloatSize viewportSize() const override;
#endif
+ void releaseReferencesToScrollerImpsOnTheMainThread();
+
ScrollController m_scrollController;
+
+ RetainPtr<NSScrollerImp> m_verticalScrollerImp;
+ RetainPtr<NSScrollerImp> m_horizontalScrollerImp;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm (242358 => 242359)
--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm 2019-03-04 16:57:38 UTC (rev 242359)
@@ -29,9 +29,12 @@
#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
#import "Logging.h"
+#import "ScrollingStateScrollingNode.h"
#import "ScrollingTree.h"
#import "ScrollingTreeFrameScrollingNode.h"
#import "ScrollingTreeScrollingNode.h"
+#import <QuartzCore/QuartzCore.h>
+#import <pal/spi/mac/NSScrollerImpSPI.h>
namespace WebCore {
@@ -41,8 +44,20 @@
{
}
-ScrollingTreeScrollingNodeDelegateMac::~ScrollingTreeScrollingNodeDelegateMac() = default;
+ScrollingTreeScrollingNodeDelegateMac::~ScrollingTreeScrollingNodeDelegateMac()
+{
+ releaseReferencesToScrollerImpsOnTheMainThread();
+}
+void ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode(const ScrollingStateScrollingNode& scrollingStateNode)
+{
+ if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::PainterForScrollbar)) {
+ releaseReferencesToScrollerImpsOnTheMainThread();
+ m_verticalScrollerImp = scrollingStateNode.verticalScrollerImp();
+ m_horizontalScrollerImp = scrollingStateNode.horizontalScrollerImp();
+ }
+}
+
void ScrollingTreeScrollingNodeDelegateMac::updateScrollSnapPoints(ScrollEventAxis axis, const Vector<LayoutUnit>& snapOffsets, const Vector<ScrollOffsetRange<LayoutUnit>>& snapRanges)
{
m_scrollController.updateScrollSnapPoints(axis, snapOffsets, snapRanges);
@@ -65,6 +80,24 @@
bool ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
{
+ if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseBegan) {
+ [m_verticalScrollerImp setUsePresentationValue:YES];
+ [m_horizontalScrollerImp setUsePresentationValue:YES];
+ }
+ if (wheelEvent.momentumPhase() == PlatformWheelEventPhaseEnded || wheelEvent.momentumPhase() == PlatformWheelEventPhaseCancelled) {
+ [m_verticalScrollerImp setUsePresentationValue:NO];
+ [m_horizontalScrollerImp setUsePresentationValue:NO];
+ }
+
+#if ENABLE(CSS_SCROLL_SNAP) || ENABLE(RUBBER_BANDING)
+ if (scrollingNode().expectsWheelEventTestTrigger()) {
+ if (scrollingTree().shouldHandleWheelEventSynchronously(wheelEvent))
+ removeTestDeferralForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNode().scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
+ else
+ deferTestsForReason(reinterpret_cast<WheelEventTestTrigger::ScrollableAreaIdentifier>(scrollingNode().scrollingNodeID()), WheelEventTestTrigger::ScrollingThreadSyncNeeded);
+ }
+#endif
+
return m_scrollController.handleWheelEvent(wheelEvent);
}
@@ -291,6 +324,43 @@
scrollingTree().removeTestDeferralForReason(identifier, reason);
}
+void ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters()
+{
+ if (m_verticalScrollerImp || m_horizontalScrollerImp) {
+ auto scrollPosition = currentScrollPosition();
+
+ [CATransaction begin];
+ [CATransaction lock];
+
+ if ([m_verticalScrollerImp shouldUsePresentationValue]) {
+ float presentationValue;
+ float overhangAmount;
+ ScrollableArea::computeScrollbarValueAndOverhang(scrollPosition.y(), totalContentsSize().height(), scrollableAreaSize().height(), presentationValue, overhangAmount);
+ [m_verticalScrollerImp setPresentationValue:presentationValue];
+ }
+
+ if ([m_horizontalScrollerImp shouldUsePresentationValue]) {
+ float presentationValue;
+ float overhangAmount;
+ ScrollableArea::computeScrollbarValueAndOverhang(scrollPosition.x(), totalContentsSize().width(), scrollableAreaSize().width(), presentationValue, overhangAmount);
+ [m_horizontalScrollerImp setPresentationValue:presentationValue];
+ }
+
+ [CATransaction unlock];
+ [CATransaction commit];
+ }
+}
+
+void ScrollingTreeScrollingNodeDelegateMac::releaseReferencesToScrollerImpsOnTheMainThread()
+{
+ if (m_verticalScrollerImp || m_horizontalScrollerImp) {
+ // FIXME: This is a workaround in place for the time being since NSScrollerImps cannot be deallocated
+ // on a non-main thread. rdar://problem/24535055
+ WTF::callOnMainThread([verticalScrollerImp = WTFMove(m_verticalScrollerImp), horizontalScrollerImp = WTFMove(m_horizontalScrollerImp)] {
+ });
+ }
+}
+
} // namespace WebCore
#endif // PLATFORM(MAC) && ENABLE(ASYNC_SCROLLING)
Modified: trunk/Source/WebCore/platform/ScrollbarThemeComposite.h (242358 => 242359)
--- trunk/Source/WebCore/platform/ScrollbarThemeComposite.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/platform/ScrollbarThemeComposite.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -23,8 +23,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef ScrollbarThemeComposite_h
-#define ScrollbarThemeComposite_h
+#pragma once
#include "ScrollbarTheme.h"
@@ -71,4 +70,3 @@
};
}
-#endif
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (242358 => 242359)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -544,20 +544,12 @@
return;
auto* backing = layer.backing();
+ if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::Scrolling))
+ updateScrollingNodeLayers(nodeID, layer, *scrollingCoordinator);
+
if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::ViewportConstrained))
scrollingCoordinator->setNodeLayers(nodeID, { backing->graphicsLayer() });
- if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::Scrolling)) {
- // FIXME: would be nice to not have to special-case the root.
- ScrollingCoordinator::NodeLayers nodeLayers;
- if (layer.isRenderViewLayer())
- nodeLayers = { nullptr, scrollContainerLayer(), scrolledContentsLayer(), fixedRootBackgroundLayer(), clipLayer(), rootContentsLayer() };
- else
- nodeLayers = { layer.backing()->graphicsLayer(), backing->scrollContainerLayer(), backing->scrolledContentsLayer() };
-
- scrollingCoordinator->setNodeLayers(nodeID, nodeLayers);
- }
-
if (auto nodeID = backing->scrollingNodeIDForRole(ScrollCoordinationRole::FrameHosting))
scrollingCoordinator->setNodeLayers(nodeID, { backing->graphicsLayer() });
}
@@ -3969,6 +3961,22 @@
return scrollableRect;
}
+void RenderLayerCompositor::updateScrollingNodeLayers(ScrollingNodeID nodeID, RenderLayer& layer, ScrollingCoordinator& scrollingCoordinator)
+{
+ if (layer.isRenderViewLayer()) {
+ FrameView& frameView = m_renderView.frameView();
+ scrollingCoordinator.setNodeLayers(nodeID, { nullptr,
+ scrollContainerLayer(), scrolledContentsLayer(),
+ fixedRootBackgroundLayer(), clipLayer(), rootContentsLayer(),
+ frameView.layerForHorizontalScrollbar(), frameView.layerForVerticalScrollbar() });
+ } else {
+ scrollingCoordinator.setNodeLayers(nodeID, { layer.backing()->graphicsLayer(),
+ layer.backing()->scrollContainerLayer(), layer.backing()->scrolledContentsLayer(),
+ nullptr, nullptr, nullptr,
+ layer.layerForHorizontalScrollbar(), layer.layerForVerticalScrollbar() });
+ }
+}
+
ScrollingNodeID RenderLayerCompositor::updateScrollingNodeForScrollingRole(RenderLayer& layer, ScrollingTreeState& treeState, OptionSet<ScrollingNodeChangeFlags> changes)
{
auto* scrollingCoordinator = this->scrollingCoordinator();
@@ -3987,7 +3995,7 @@
}
if (changes & ScrollingNodeChangeFlags::Layer)
- scrollingCoordinator->setNodeLayers(newNodeID, { nullptr, scrollContainerLayer(), scrolledContentsLayer(), fixedRootBackgroundLayer(), clipLayer(), rootContentsLayer() });
+ updateScrollingNodeLayers(newNodeID, layer, *scrollingCoordinator);
if (changes & ScrollingNodeChangeFlags::LayerGeometry) {
scrollingCoordinator->setRectRelativeToParentNode(newNodeID, rootParentRelativeScrollableRect());
@@ -4002,7 +4010,7 @@
}
if (changes & ScrollingNodeChangeFlags::Layer)
- scrollingCoordinator->setNodeLayers(newNodeID, { layer.backing()->graphicsLayer(), layer.backing()->scrollContainerLayer(), layer.backing()->scrolledContentsLayer() });
+ updateScrollingNodeLayers(newNodeID, layer, *scrollingCoordinator);
if (changes & ScrollingNodeChangeFlags::LayerGeometry && treeState.parentNodeID) {
RenderLayer* scrollingAncestorLayer = m_scrollingNodeToLayerMap.get(treeState.parentNodeID.value());
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (242358 => 242359)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -492,6 +492,8 @@
ScrollingNodeID updateScrollingNodeForScrollingRole(RenderLayer&, struct ScrollingTreeState&, OptionSet<ScrollingNodeChangeFlags>);
ScrollingNodeID updateScrollingNodeForFrameHostingRole(RenderLayer&, struct ScrollingTreeState&, OptionSet<ScrollingNodeChangeFlags>);
+ void updateScrollingNodeLayers(ScrollingNodeID, RenderLayer&, ScrollingCoordinator&);
+
void detachScrollCoordinatedLayer(RenderLayer&, OptionSet<ScrollCoordinationRole>);
void detachScrollCoordinatedLayerWithRole(RenderLayer&, ScrollingCoordinator&, ScrollCoordinationRole);
Modified: trunk/Source/WebKit/ChangeLog (242358 => 242359)
--- trunk/Source/WebKit/ChangeLog 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/ChangeLog 2019-03-04 16:57:38 UTC (rev 242359)
@@ -1,3 +1,49 @@
+2019-03-04 Simon Fraser <simon.fra...@apple.com>
+
+ Share more code between overflow and frame scrolling nodes, fixing overflow scrollbar display
+ https://bugs.webkit.org/show_bug.cgi?id=195258
+
+ Reviewed by Antti Koivisto.
+
+ This patch moves management of scrollbar layers and scrollbar painters ("NSScrollerImp") down to
+ ScrollingStateScrollingNode to be shared between frame and overflow nodes, allowing for
+ scrolling thread updates of overflow scrollbars. It also moves some scrolling tree-side code
+ to ScrollingTreeScrollingNodeDelegateMac to be shared between the "tree" nodes for overflow and frames.
+
+ Layers for scrollbars are given to scrolling state nodes via setNodeLayers() now, and
+ RenderLayerCompositor::updateScrollingNodeLayers() is added to provide a bottleneck to call that.
+ At some point AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() should be relieved
+ of the responsibility of pushing scrollbar layers (but the scrolling state tree needs to hold
+ references to GraphicsLayers before that becomes safe).
+
+ The actual fix that allows overflow scrollbars to show is the change in
+ AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange() that calls scrollableArea.*ScrollbarLayerDidChange()
+ for all ScrollableAreas. This ensures that the CALayer is pushed onto the NSScrollerImp.
+
+ * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp:
+ (ArgumentCoder<ScrollingStateScrollingNode>::encode):
+ (ArgumentCoder<ScrollingStateFrameScrollingNode>::encode):
+ (ArgumentCoder<ScrollingStateScrollingNode>::decode):
+ (ArgumentCoder<ScrollingStateFrameScrollingNode>::decode):
+ * SourcesCocoa.txt:
+ * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
+ (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
+ * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp:
+ (WebKit::RemoteScrollingTree::createScrollingTreeNode):
+ * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp:
+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::commitStateBeforeChildren):
+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::repositionRelatedLayers):
+ (WebKit::ScrollingTreeFrameScrollingNodeRemoteMac::handleMouseEvent):
+ * UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp: Copied from Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp.
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::create):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::ScrollingTreeOverflowScrollingNodeRemoteMac):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::~ScrollingTreeOverflowScrollingNodeRemoteMac):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::commitStateBeforeChildren):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::repositionRelatedLayers):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::handleWheelEvent):
+ (WebKit::ScrollingTreeOverflowScrollingNodeRemoteMac::handleMouseEvent):
+ * WebKit.xcodeproj/project.pbxproj:
+
2019-03-04 Andy Estes <aes...@apple.com>
[Apple Pay] Move WebPaymentCoordinatorProxy from Source/WebKit/UIProcess to Source/WebKit/Shared
Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp (242358 => 242359)
--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -143,8 +143,15 @@
if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrollContainerLayer))
encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.scrollContainerLayer());
+
if (node.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.scrolledContentsLayer());
+
+ if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalScrollbarLayer))
+ encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.horizontalScrollbarLayer());
+
+ if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer))
+ encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.verticalScrollbarLayer());
}
void ArgumentCoder<ScrollingStateFrameScrollingNode>::encode(Encoder& encoder, const ScrollingStateFrameScrollingNode& node)
@@ -173,12 +180,6 @@
if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.contentShadowLayer());
- if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer))
- encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.verticalScrollbarLayer());
-
- if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalScrollbarLayer))
- encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.horizontalScrollbarLayer());
-
if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::RootContentsLayer))
encoder << static_cast<GraphicsLayer::PlatformLayerID>(node.rootContentsLayer());
}
@@ -256,6 +257,20 @@
node.setScrolledContentsLayer(layerID);
}
+ if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalScrollbarLayer)) {
+ GraphicsLayer::PlatformLayerID layerID;
+ if (!decoder.decode(layerID))
+ return false;
+ node.setHorizontalScrollbarLayer(layerID);
+ }
+
+ if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer)) {
+ GraphicsLayer::PlatformLayerID layerID;
+ if (!decoder.decode(layerID))
+ return false;
+ node.setVerticalScrollbarLayer(layerID);
+ }
+
return true;
}
@@ -298,20 +313,6 @@
node.setContentShadowLayer(layerID);
}
- if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer)) {
- GraphicsLayer::PlatformLayerID layerID;
- if (!decoder.decode(layerID))
- return false;
- node.setVerticalScrollbarLayer(layerID);
- }
-
- if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalScrollbarLayer)) {
- GraphicsLayer::PlatformLayerID layerID;
- if (!decoder.decode(layerID))
- return false;
- node.setHorizontalScrollbarLayer(layerID);
- }
-
if (node.hasChangedProperty(ScrollingStateFrameScrollingNode::RootContentsLayer)) {
GraphicsLayer::PlatformLayerID layerID;
if (!decoder.decode(layerID))
Modified: trunk/Source/WebKit/SourcesCocoa.txt (242358 => 242359)
--- trunk/Source/WebKit/SourcesCocoa.txt 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/SourcesCocoa.txt 2019-03-04 16:57:38 UTC (rev 242359)
@@ -453,6 +453,7 @@
UIProcess/RemoteLayerTree/mac/ScrollerMac.mm
UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm
UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp
+UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp
UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm
UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp (242358 => 242359)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -146,6 +146,12 @@
if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
scrollingStateNode.setScrolledContentsLayer(layerTreeHost.layerForID(scrollingStateNode.scrolledContentsLayer()));
+
+ if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer))
+ scrollingStateNode.setVerticalScrollbarLayer(layerTreeHost.layerForID(scrollingStateNode.verticalScrollbarLayer()));
+
+ if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::HorizontalScrollbarLayer))
+ scrollingStateNode.setHorizontalScrollbarLayer(layerTreeHost.layerForID(scrollingStateNode.horizontalScrollbarLayer()));
break;
}
case ScrollingNodeType::FrameHosting:
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp (242358 => 242359)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -39,6 +39,7 @@
#include "ScrollingTreeOverflowScrollingNodeIOS.h"
#else
#include "ScrollingTreeFrameScrollingNodeRemoteMac.h"
+#include "ScrollingTreeOverflowScrollingNodeRemoteMac.h"
#endif
namespace WebKit {
@@ -125,8 +126,7 @@
#if PLATFORM(IOS_FAMILY)
return ScrollingTreeOverflowScrollingNodeIOS::create(*this, nodeID);
#else
- ASSERT_NOT_REACHED();
- break;
+ return ScrollingTreeOverflowScrollingNodeRemoteMac::create(*this, nodeID);
#endif
case ScrollingNodeType::Fixed:
return ScrollingTreeFixedNode::create(*this, nodeID);
Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp (242358 => 242359)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -54,6 +54,7 @@
ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren(stateNode);
const auto& scrollingStateNode = downcast<ScrollingStateFrameScrollingNode>(stateNode);
+ // FIXME: Push to ScrollingTreeScrollingNodeDelegateMac?
if (scrollingStateNode.hasChangedProperty(ScrollingStateFrameScrollingNode::VerticalScrollbarLayer))
m_scrollerPair->verticalScroller().setHostLayer(scrollingStateNode.verticalScrollbarLayer());
@@ -67,7 +68,8 @@
{
ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers();
- m_scrollerPair->updateValues();
+ if (m_scrollerPair)
+ m_scrollerPair->updateValues();
}
ScrollingEventResult ScrollingTreeFrameScrollingNodeRemoteMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
@@ -79,6 +81,8 @@
bool ScrollingTreeFrameScrollingNodeRemoteMac::handleMouseEvent(const PlatformMouseEvent& mouseEvent)
{
+ if (!m_scrollerPair)
+ return false;
return m_scrollerPair->handleMouseEvent(mouseEvent);
}
Copied: trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp (from rev 242358, trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp) (0 => 242359)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp (rev 0)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.cpp 2019-03-04 16:57:38 UTC (rev 242359)
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ScrollingTreeOverflowScrollingNodeRemoteMac.h"
+
+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
+
+#include "RemoteScrollingTree.h"
+#include "ScrollerPairMac.h"
+
+namespace WebKit {
+using namespace WebCore;
+
+Ref<ScrollingTreeOverflowScrollingNodeRemoteMac> ScrollingTreeOverflowScrollingNodeRemoteMac::create(ScrollingTree& tree, ScrollingNodeID nodeID)
+{
+ return adoptRef(*new ScrollingTreeOverflowScrollingNodeRemoteMac(tree, nodeID));
+}
+
+ScrollingTreeOverflowScrollingNodeRemoteMac::ScrollingTreeOverflowScrollingNodeRemoteMac(ScrollingTree& tree, ScrollingNodeID nodeID)
+ : ScrollingTreeOverflowScrollingNodeMac(tree, nodeID)
+ , m_scrollerPair(std::make_unique<ScrollerPairMac>(*this))
+{
+}
+
+ScrollingTreeOverflowScrollingNodeRemoteMac::~ScrollingTreeOverflowScrollingNodeRemoteMac()
+{
+}
+
+void ScrollingTreeOverflowScrollingNodeRemoteMac::commitStateBeforeChildren(const ScrollingStateNode& stateNode)
+{
+ ScrollingTreeOverflowScrollingNodeMac::commitStateBeforeChildren(stateNode);
+ const auto& scrollingStateNode = downcast<ScrollingStateOverflowScrollingNode>(stateNode);
+
+ // FIXME: Push to ScrollingTreeScrollingNodeDelegateMac?
+ if (scrollingStateNode.hasChangedProperty(ScrollingStateOverflowScrollingNode::VerticalScrollbarLayer))
+ m_scrollerPair->verticalScroller().setHostLayer(scrollingStateNode.verticalScrollbarLayer());
+
+ if (scrollingStateNode.hasChangedProperty(ScrollingStateOverflowScrollingNode::HorizontalScrollbarLayer))
+ m_scrollerPair->horizontalScroller().setHostLayer(scrollingStateNode.horizontalScrollbarLayer());
+
+ m_scrollerPair->updateValues();
+}
+
+void ScrollingTreeOverflowScrollingNodeRemoteMac::repositionRelatedLayers()
+{
+ ScrollingTreeOverflowScrollingNodeMac::repositionRelatedLayers();
+
+ m_scrollerPair->updateValues();
+}
+
+ScrollingEventResult ScrollingTreeOverflowScrollingNodeRemoteMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
+{
+ ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent(wheelEvent);
+
+ return m_scrollerPair->handleWheelEvent(wheelEvent) ? ScrollingEventResult::DidHandleEvent : ScrollingEventResult::DidNotHandleEvent;
+}
+
+bool ScrollingTreeOverflowScrollingNodeRemoteMac::handleMouseEvent(const PlatformMouseEvent& mouseEvent)
+{
+ return m_scrollerPair->handleMouseEvent(mouseEvent);
+}
+
+}
+
+#endif
Copied: trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.h (from rev 242358, trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h) (0 => 242359)
--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/mac/ScrollingTreeOverflowScrollingNodeRemoteMac.h 2019-03-04 16:57:38 UTC (rev 242359)
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
+
+#include <WebCore/ScrollingTreeOverflowScrollingNodeMac.h>
+
+namespace WebKit {
+
+class ScrollerPairMac;
+
+class ScrollingTreeOverflowScrollingNodeRemoteMac : public WebCore::ScrollingTreeOverflowScrollingNodeMac {
+public:
+ WEBCORE_EXPORT static Ref<ScrollingTreeOverflowScrollingNodeRemoteMac> create(WebCore::ScrollingTree&, WebCore::ScrollingNodeID);
+ virtual ~ScrollingTreeOverflowScrollingNodeRemoteMac();
+
+ bool handleMouseEvent(const WebCore::PlatformMouseEvent&);
+
+private:
+ ScrollingTreeOverflowScrollingNodeRemoteMac(WebCore::ScrollingTree&, WebCore::ScrollingNodeID);
+
+ void commitStateBeforeChildren(const WebCore::ScrollingStateNode&) override;
+ WebCore::ScrollingEventResult handleWheelEvent(const WebCore::PlatformWheelEvent&) override;
+ void repositionRelatedLayers() override;
+
+ std::unique_ptr<ScrollerPairMac> m_scrollerPair;
+};
+
+}
+
+#endif // ENABLE(ASYNC_SCROLLING) && PLATFORM(MAC)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (242358 => 242359)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-04 16:57:05 UTC (rev 242358)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-04 16:57:38 UTC (rev 242359)
@@ -1889,6 +1889,8 @@
0F5E200218E77051003EC3E5 /* PlatformCAAnimationRemote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformCAAnimationRemote.h; sourceTree = "<group>"; };
0F707C771A1FEE8300DA7A45 /* RemoteLayerTreeScrollingPerformanceData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RemoteLayerTreeScrollingPerformanceData.mm; sourceTree = "<group>"; };
0F707C791A1FEEA300DA7A45 /* RemoteLayerTreeScrollingPerformanceData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteLayerTreeScrollingPerformanceData.h; sourceTree = "<group>"; };
+ 0F73B767222B38C600805316 /* ScrollingTreeOverflowScrollingNodeRemoteMac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingTreeOverflowScrollingNodeRemoteMac.cpp; sourceTree = "<group>"; };
+ 0F73B768222B38C600805316 /* ScrollingTreeOverflowScrollingNodeRemoteMac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeOverflowScrollingNodeRemoteMac.h; sourceTree = "<group>"; };
0F850FE41ED7C39F00FB77A7 /* WebPerformanceLoggingClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPerformanceLoggingClient.cpp; sourceTree = "<group>"; };
0F850FE51ED7C39F00FB77A7 /* WebPerformanceLoggingClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebPerformanceLoggingClient.h; sourceTree = "<group>"; };
0F931C1A18C5711900DBA7C3 /* ScrollingTreeOverflowScrollingNodeIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeOverflowScrollingNodeIOS.h; sourceTree = "<group>"; };
@@ -8766,6 +8768,8 @@
E404907221DE65F70037F0DB /* ScrollerPairMac.mm */,
E404907121DE65F70037F0DB /* ScrollingTreeFrameScrollingNodeRemoteMac.cpp */,
E404907321DE65F70037F0DB /* ScrollingTreeFrameScrollingNodeRemoteMac.h */,
+ 0F73B767222B38C600805316 /* ScrollingTreeOverflowScrollingNodeRemoteMac.cpp */,
+ 0F73B768222B38C600805316 /* ScrollingTreeOverflowScrollingNodeRemoteMac.h */,
);
path = mac;
sourceTree = "<group>";