Title: [222691] trunk/Source/WebCore
- Revision
- 222691
- Author
- an...@apple.com
- Date
- 2017-10-01 14:24:56 -0700 (Sun, 01 Oct 2017)
Log Message
Use WeakPtr for first-letter memory management
https://bugs.webkit.org/show_bug.cgi?id=177716
Reviewed by Darin Adler.
* rendering/RenderElement.cpp:
(WebCore::RenderElement::destroyLeftoverChildren):
Remove first-letter special case.
Use removeAndDestroyChild instead of calling destroy() directly. The latter should
eventually stop calling takeChild and assert that the renderer is not in the tree.
* rendering/RenderTextFragment.cpp:
(WebCore::RenderTextFragment::willBeDestroyed):
(WebCore::RenderTextFragment::setText):
* rendering/RenderTextFragment.h:
Use WeakPtr.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (222690 => 222691)
--- trunk/Source/WebCore/ChangeLog 2017-10-01 21:12:48 UTC (rev 222690)
+++ trunk/Source/WebCore/ChangeLog 2017-10-01 21:24:56 UTC (rev 222691)
@@ -1,3 +1,24 @@
+2017-10-01 Antti Koivisto <an...@apple.com>
+
+ Use WeakPtr for first-letter memory management
+ https://bugs.webkit.org/show_bug.cgi?id=177716
+
+ Reviewed by Darin Adler.
+
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::destroyLeftoverChildren):
+
+ Remove first-letter special case.
+ Use removeAndDestroyChild instead of calling destroy() directly. The latter should
+ eventually stop calling takeChild and assert that the renderer is not in the tree.
+
+ * rendering/RenderTextFragment.cpp:
+ (WebCore::RenderTextFragment::willBeDestroyed):
+ (WebCore::RenderTextFragment::setText):
+ * rendering/RenderTextFragment.h:
+
+ Use WeakPtr.
+
2017-10-01 Sam Weinig <s...@webkit.org>
XMLHttpRequest's responseXML should be annotated with [Exposed=Window]
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (222690 => 222691)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2017-10-01 21:12:48 UTC (rev 222690)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2017-10-01 21:24:56 UTC (rev 222691)
@@ -503,17 +503,9 @@
void RenderElement::destroyLeftoverChildren()
{
while (m_firstChild) {
- if (m_firstChild->style().styleType() == FIRST_LETTER && !m_firstChild->isText()) {
- // FIXME: Memory management.
- auto firstLetter = takeChild(*m_firstChild); // :first-letter fragment renderers are destroyed by their remaining text fragment.
- auto* leakedPtr = firstLetter.leakPtr();
- UNUSED_PARAM(leakedPtr);
- } else {
- // Destroy any anonymous children remaining in the render tree, as well as implicit (shadow) DOM elements like those used in the engine-based text fields.
- if (m_firstChild->node())
- m_firstChild->node()->setRenderer(nullptr);
- m_firstChild->destroy();
- }
+ if (auto* node = m_firstChild->node())
+ node->setRenderer(nullptr);
+ removeAndDestroyChild(*m_firstChild);
}
}
Modified: trunk/Source/WebCore/rendering/RenderTextFragment.cpp (222690 => 222691)
--- trunk/Source/WebCore/rendering/RenderTextFragment.cpp 2017-10-01 21:12:48 UTC (rev 222690)
+++ trunk/Source/WebCore/rendering/RenderTextFragment.cpp 2017-10-01 21:24:56 UTC (rev 222691)
@@ -75,7 +75,7 @@
void RenderTextFragment::willBeDestroyed()
{
if (m_firstLetter)
- m_firstLetter->destroy();
+ m_firstLetter->removeFromParentAndDestroy();
RenderText::willBeDestroyed();
}
@@ -87,8 +87,8 @@
m_end = textLength();
if (!m_firstLetter)
return;
- m_firstLetter->destroy();
- m_firstLetter = 0;
+ m_firstLetter->removeFromParentAndDestroy();
+ ASSERT(!m_firstLetter);
if (!textNode())
return;
ASSERT(!textNode()->renderer());
Modified: trunk/Source/WebCore/rendering/RenderTextFragment.h (222690 => 222691)
--- trunk/Source/WebCore/rendering/RenderTextFragment.h 2017-10-01 21:12:48 UTC (rev 222690)
+++ trunk/Source/WebCore/rendering/RenderTextFragment.h 2017-10-01 21:24:56 UTC (rev 222691)
@@ -43,8 +43,8 @@
unsigned start() const { return m_start; }
unsigned end() const { return m_end; }
- RenderBoxModelObject* firstLetter() const { return m_firstLetter; }
- void setFirstLetter(RenderBoxModelObject& firstLetter) { m_firstLetter = &firstLetter; }
+ RenderBoxModelObject* firstLetter() const { return m_firstLetter.get(); }
+ void setFirstLetter(RenderBoxModelObject& firstLetter) { m_firstLetter = makeWeakPtr(firstLetter); }
RenderBlock* blockForAccompanyingFirstLetter();
@@ -68,7 +68,7 @@
// Alternative description that can be used for accessibility instead of the native text.
String m_altText;
String m_contentString;
- RenderBoxModelObject* m_firstLetter;
+ WeakPtr<RenderBoxModelObject> m_firstLetter;
};
} // namespace WebCore
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes