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

Reply via email to