Modified: branches/safari-613-branch/Source/WebCore/ChangeLog (294844 => 294845)
--- branches/safari-613-branch/Source/WebCore/ChangeLog 2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/ChangeLog 2022-05-25 23:49:59 UTC (rev 294845)
@@ -1,5 +1,49 @@
2022-05-19 Alan Coon <alanc...@apple.com>
+ Cherry-pick r292596. rdar://problem/88862115
+
+ Take top layers into account in addLayers/removeLayers
+ https://bugs.webkit.org/show_bug.cgi?id=238946
+
+ Patch by Rob Buis <rb...@igalia.com> on 2022-04-08
+ Reviewed by Simon Fraser.
+
+ Take top layers into account in addLayers/removeLayers, they
+ should use the RenderView layer as parent (emulating layerParent).
+
+ * rendering/RenderElement.cpp:
+ (WebCore::addLayers):
+ (WebCore::RenderElement::addLayers):
+ (WebCore::RenderElement::removeLayers):
+ (WebCore::RenderElement::willBeRemovedFromTree):
+ * rendering/RenderElement.h:
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::calculateClipRects const):
+
+ Canonical link: https://commits.webkit.org/249429@main
+ git-svn-id: https://svn.webkit.org/repository/webkit/trunk@292596 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+ 2022-04-08 Rob Buis <rb...@igalia.com>
+
+ Take top layers into account in addLayers/removeLayers
+ https://bugs.webkit.org/show_bug.cgi?id=238946
+
+ Reviewed by Simon Fraser.
+
+ Take top layers into account in addLayers/removeLayers, they
+ should use the RenderView layer as parent (emulating layerParent).
+
+ * rendering/RenderElement.cpp:
+ (WebCore::addLayers):
+ (WebCore::RenderElement::addLayers):
+ (WebCore::RenderElement::removeLayers):
+ (WebCore::RenderElement::willBeRemovedFromTree):
+ * rendering/RenderElement.h:
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::calculateClipRects const):
+
+2022-05-19 Alan Coon <alanc...@apple.com>
+
Cherry-pick r294234. rdar://problem/93602100
Web Inspector: Regression(r266885) Crash sometimes when rehydrating imported audit results
Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp (294844 => 294845)
--- branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp 2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderElement.cpp 2022-05-25 23:49:59 UTC (rev 294845)
@@ -683,18 +683,18 @@
return findNextLayer(*renderer.parent(), parentLayer, &renderer);
}
-static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer& parentLayer, std::optional<RenderLayer*>& beforeChild)
+static void addLayers(const RenderElement& addedRenderer, RenderElement& currentRenderer, RenderLayer* parentLayer)
{
if (currentRenderer.hasLayer()) {
- if (!beforeChild.has_value())
- beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, parentLayer);
-
- parentLayer.addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild.value());
+ if (isInTopLayerOrBackdrop(currentRenderer.style(), currentRenderer.element()))
+ parentLayer = addedRenderer.view().layer();
+ RenderLayer* beforeChild = layerNextSiblingRespectingTopLayer(addedRenderer, *parentLayer);
+ parentLayer->addChild(*downcast<RenderLayerModelObject>(currentRenderer).layer(), beforeChild);
return;
}
for (auto& child : childrenOfType<RenderElement>(currentRenderer))
- addLayers(addedRenderer, child, parentLayer, beforeChild);
+ addLayers(addedRenderer, child, parentLayer);
}
void RenderElement::addLayers(RenderLayer* parentLayer)
@@ -702,12 +702,12 @@
if (!parentLayer)
return;
- std::optional<RenderLayer*> beforeChild;
- WebCore::addLayers(*this, *this, *parentLayer, beforeChild);
+ WebCore::addLayers(*this, *this, parentLayer);
}
-void RenderElement::removeLayers(RenderLayer* parentLayer)
+void RenderElement::removeLayers()
{
+ RenderLayer* parentLayer = layerParent();
if (!parentLayer)
return;
@@ -717,7 +717,7 @@
}
for (auto& child : childrenOfType<RenderElement>(*this))
- child.removeLayers(parentLayer);
+ child.removeLayers();
}
void RenderElement::moveLayers(RenderLayer& newParent)
@@ -1022,10 +1022,8 @@
enclosingLayer->dirtyVisibleContentStatus();
}
// Keep our layer hierarchy updated.
- if (firstChild() || hasLayer()) {
- auto* parentLayer = layerParent();
- removeLayers(parentLayer);
- }
+ if (firstChild() || hasLayer())
+ removeLayers();
if (isOutOfFlowPositioned() && parent()->childrenInline())
parent()->dirtyLinesFromChangedChild(*this);
Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h (294844 => 294845)
--- branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h 2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderElement.h 2022-05-25 23:49:59 UTC (rev 294845)
@@ -110,8 +110,7 @@
RenderLayer* layerParent() const;
RenderLayer* layerNextSibling(RenderLayer& parentLayer) const;
void addLayers(RenderLayer* parentLayer);
- void removeLayers(RenderLayer* parentLayer);
- void moveLayers(RenderLayer& newParent);
+ void removeLayers();
virtual void dirtyLinesFromChangedChild(RenderObject&) { }
Modified: branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp (294844 => 294845)
--- branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp 2022-05-25 23:49:55 UTC (rev 294844)
+++ branches/safari-613-branch/Source/WebCore/rendering/RenderLayer.cpp 2022-05-25 23:49:59 UTC (rev 294845)
@@ -5441,8 +5441,10 @@
void RenderLayer::removeReflection()
{
- if (!m_reflection->renderTreeBeingDestroyed())
- m_reflection->removeLayers(this);
+ if (!m_reflection->renderTreeBeingDestroyed()) {
+ if (auto* layer = m_reflection->layer())
+ removeChild(*layer);
+ }
m_reflection->setParent(nullptr);
m_reflection = nullptr;