Title: [288568] branches/safari-613-branch/Source/WebCore
- Revision
- 288568
- Author
- repst...@apple.com
- Date
- 2022-01-25 11:38:29 -0800 (Tue, 25 Jan 2022)
Log Message
Cherry-pick r288059. rdar://problem/87785288
Make a function that returns the ordered list of top layer RenderLayers
https://bugs.webkit.org/show_bug.cgi?id=235251
Reviewed by Alan Bujtas.
Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
top-layer RenderLayers into its own function.
Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
elements.
* dom/Document.h:
(WebCore::Document::hasTopLayerElement const):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::rebuildZOrderLists):
* rendering/RenderLayer.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@288059 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Modified Paths
Diff
Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (288567 => 288568)
--- branches/safari-613-branch/Source/WebCore/ChangeLog 2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog 2022-01-25 19:38:29 UTC (rev 288568)
@@ -1,5 +1,48 @@
2022-01-25 Alan Coon <alanc...@apple.com>
+ Cherry-pick r288059. rdar://problem/87785288
+
+ Make a function that returns the ordered list of top layer RenderLayers
+ https://bugs.webkit.org/show_bug.cgi?id=235251
+
+ Reviewed by Alan Bujtas.
+
+ Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
+ top-layer RenderLayers into its own function.
+
+ Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
+ elements.
+
+ * dom/Document.h:
+ (WebCore::Document::hasTopLayerElement const):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::rebuildZOrderLists):
+ * rendering/RenderLayer.h:
+
+
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@288059 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-01-15 Simon Fraser <simon.fra...@apple.com>
+
+ Make a function that returns the ordered list of top layer RenderLayers
+ https://bugs.webkit.org/show_bug.cgi?id=235251
+
+ Reviewed by Alan Bujtas.
+
+ Factor the code in RenderLayer::rebuildZOrderLists() that generates the list of
+ top-layer RenderLayers into its own function.
+
+ Add Document::hasTopLayerElement() to avoid calling it when there are no top layer
+ elements.
+
+ * dom/Document.h:
+ (WebCore::Document::hasTopLayerElement const):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::rebuildZOrderLists):
+ * rendering/RenderLayer.h:
+
+2022-01-25 Alan Coon <alanc...@apple.com>
+
Cherry-pick r287845. rdar://problem/87785288
REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown
Modified: branches/safari-613-branch/Source/WebCore/dom/Document.h (288567 => 288568)
--- branches/safari-613-branch/Source/WebCore/dom/Document.h 2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/dom/Document.h 2022-01-25 19:38:29 UTC (rev 288568)
@@ -1548,6 +1548,7 @@
void addTopLayerElement(Element&);
void removeTopLayerElement(Element&);
const ListHashSet<Ref<Element>>& topLayerElements() const { return m_topLayerElements; }
+ bool hasTopLayerElement() const { return !m_topLayerElements.isEmpty(); }
HTMLDialogElement* activeModalDialog() const;
Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp (288567 => 288568)
--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp 2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp 2022-01-25 19:38:29 UTC (rev 288568)
@@ -786,25 +786,13 @@
negZOrderList->shrinkToFit();
}
- if (isRenderViewLayer()) {
- auto topLayerElements = renderer().document().topLayerElements();
- for (auto& element : topLayerElements) {
- RenderElement* renderer = element->renderer();
- if (!renderer)
- continue;
- auto backdropRenderer = renderer->backdropRenderer();
- if (backdropRenderer && backdropRenderer->hasLayer()) {
- RenderLayer* layer = backdropRenderer->layer();
- if (!posZOrderList)
- posZOrderList = makeUnique<Vector<RenderLayer*>>();
- posZOrderList->append(layer);
- }
- if (renderer->hasLayer()) {
- RenderLayer* layer = downcast<RenderLayerModelObject>(*renderer).layer();
- if (!posZOrderList)
- posZOrderList = makeUnique<Vector<RenderLayer*>>();
- posZOrderList->append(layer);
- }
+ if (isRenderViewLayer() && renderer().document().hasTopLayerElement()) {
+ auto topLayerLayers = topLayerRenderLayers(renderer().view());
+ if (topLayerLayers.size()) {
+ if (!posZOrderList)
+ posZOrderList = makeUnique<Vector<RenderLayer*>>();
+
+ posZOrderList->appendVector(topLayerLayers);
}
}
}
@@ -3973,6 +3961,25 @@
return nullptr;
}
+Vector<RenderLayer*> RenderLayer::topLayerRenderLayers(RenderView& renderView)
+{
+ Vector<RenderLayer*> layers;
+ auto topLayerElements = renderView.document().topLayerElements();
+ for (auto& element : topLayerElements) {
+ auto* renderer = element->renderer();
+ if (!renderer)
+ continue;
+
+ auto backdropRenderer = renderer->backdropRenderer();
+ if (backdropRenderer && backdropRenderer->hasLayer())
+ layers.append(backdropRenderer->layer());
+
+ if (renderer->hasLayer())
+ layers.append(downcast<RenderLayerModelObject>(*renderer).layer());
+ }
+ return layers;
+}
+
bool RenderLayer::establishesTopLayer() const
{
return isInTopLayerOrBackdrop(renderer().style(), renderer().element());
Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h (288567 => 288568)
--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h 2022-01-25 19:38:24 UTC (rev 288567)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.h 2022-01-25 19:38:29 UTC (rev 288568)
@@ -818,6 +818,8 @@
Element* enclosingElement() const;
+ static Vector<RenderLayer*> topLayerRenderLayers(RenderView&);
+
bool establishesTopLayer() const;
void establishesTopLayerWillChange();
void establishesTopLayerDidChange();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes