Title: [280906] releases/WebKitGTK/webkit-2.32/Source/WebCore
- Revision
- 280906
- Author
- [email protected]
- Date
- 2021-08-11 04:24:34 -0700 (Wed, 11 Aug 2021)
Log Message
Merge r275126 - [RenderTreeBuilder] No need to update the counters when the renderer is moved internally
https://bugs.webkit.org/show_bug.cgi?id=223801
<rdar://75835208>
Reviewed by Ryosuke Niwa.
When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
are moved "one level" up), we don't need to re-compute the counters. Their state should not be any different after this re-parenting.
* rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::attachToRenderElementInternal):
(WebCore::RenderTreeBuilder::move):
* rendering/updating/RenderTreeBuilder.h:
Modified Paths
Diff
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog (280905 => 280906)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog 2021-08-11 11:24:27 UTC (rev 280905)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/ChangeLog 2021-08-11 11:24:34 UTC (rev 280906)
@@ -1,3 +1,19 @@
+2021-03-26 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] No need to update the counters when the renderer is moved internally
+ https://bugs.webkit.org/show_bug.cgi?id=223801
+ <rdar://75835208>
+
+ Reviewed by Ryosuke Niwa.
+
+ When the renderer re-parenting is initiated by an "internal move" (e.g. anonymous block parent is not needed anymore so all the descendants
+ are moved "one level" up), we don't need to re-compute the counters. Their state should not be any different after this re-parenting.
+
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
+ (WebCore::RenderTreeBuilder::move):
+ * rendering/updating/RenderTreeBuilder.h:
+
2021-03-23 Frédéric Wang <[email protected]>
Nullptr crash in HTMLConverter::convert
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (280905 => 280906)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2021-08-11 11:24:27 UTC (rev 280905)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2021-08-11 11:24:34 UTC (rev 280906)
@@ -425,7 +425,7 @@
parent.didAttachChild(newChild, beforeChild);
}
-void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+void RenderTreeBuilder::attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild, ReinsertAfterMove reinsertAfterMove)
{
RELEASE_ASSERT_WITH_MESSAGE(!parent.view().frameView().layoutContext().layoutState(), "Layout must not mutate render tree");
ASSERT(parent.canHaveChildren() || parent.canHaveGeneratedChildren());
@@ -449,7 +449,9 @@
if (is<RenderMultiColumnFlow>(fragmentedFlow))
multiColumnBuilder().multiColumnDescendantInserted(downcast<RenderMultiColumnFlow>(*fragmentedFlow), *newChild);
- if (is<RenderElement>(*newChild))
+ // FIXME: needsStateReset could probably be used for multicolumn as well.
+ auto needsStateReset = reinsertAfterMove == ReinsertAfterMove::No;
+ if (needsStateReset && is<RenderElement>(*newChild))
RenderCounter::rendererSubtreeAttached(downcast<RenderElement>(*newChild));
}
@@ -480,7 +482,7 @@
attach(to, WTFMove(childToMove), beforeChild);
} else {
auto childToMove = detachFromRenderElement(from, child);
- attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild);
+ attachToRenderElementInternal(to, WTFMove(childToMove), beforeChild, ReinsertAfterMove::Yes);
}
}
Modified: releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.h (280905 => 280906)
--- releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2021-08-11 11:24:27 UTC (rev 280905)
+++ releases/WebKitGTK/webkit-2.32/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2021-08-11 11:24:34 UTC (rev 280906)
@@ -70,7 +70,8 @@
void attachIgnoringContinuation(RenderElement& parent, RenderPtr<RenderObject>, RenderObject* beforeChild = nullptr);
void attachToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void attachToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
- void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
+ enum class ReinsertAfterMove { No, Yes };
+ void attachToRenderElementInternal(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr, ReinsertAfterMove = ReinsertAfterMove::No);
enum class WillBeDestroyed { No, Yes };
RenderPtr<RenderObject> detachFromRenderElement(RenderElement& parent, RenderObject& child, WillBeDestroyed = WillBeDestroyed::Yes) WARN_UNUSED_RETURN;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes