Title: [222936] trunk/Source/WebCore
Revision
222936
Author
[email protected]
Date
2017-10-05 15:40:05 -0700 (Thu, 05 Oct 2017)

Log Message

RenderListItem should not hold raw pointers to RenderListMarker.
https://bugs.webkit.org/show_bug.cgi?id=177968
<rdar://problem/34842943>

Reviewed by Antti Koivisto.

Now we don't need to unregister the marker from the list item explicitly.

Covered by existing tests.

* rendering/RenderListItem.cpp:
(WebCore::RenderListItem::RenderListItem):
(WebCore::RenderListItem::willBeDestroyed):
(WebCore::RenderListItem::positionListMarker):
* rendering/RenderListItem.h:
* rendering/RenderListMarker.cpp:
(WebCore::RenderListMarker::willBeDestroyed):
* style/RenderTreeUpdaterListItem.cpp:
(WebCore::RenderTreeUpdater::ListItem::updateMarker):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (222935 => 222936)


--- trunk/Source/WebCore/ChangeLog	2017-10-05 22:32:55 UTC (rev 222935)
+++ trunk/Source/WebCore/ChangeLog	2017-10-05 22:40:05 UTC (rev 222936)
@@ -1,3 +1,25 @@
+2017-10-05  Zalan Bujtas  <[email protected]>
+
+        RenderListItem should not hold raw pointers to RenderListMarker.
+        https://bugs.webkit.org/show_bug.cgi?id=177968
+        <rdar://problem/34842943>
+
+        Reviewed by Antti Koivisto.
+
+        Now we don't need to unregister the marker from the list item explicitly.
+
+        Covered by existing tests.
+
+        * rendering/RenderListItem.cpp:
+        (WebCore::RenderListItem::RenderListItem):
+        (WebCore::RenderListItem::willBeDestroyed):
+        (WebCore::RenderListItem::positionListMarker):
+        * rendering/RenderListItem.h:
+        * rendering/RenderListMarker.cpp:
+        (WebCore::RenderListMarker::willBeDestroyed):
+        * style/RenderTreeUpdaterListItem.cpp:
+        (WebCore::RenderTreeUpdater::ListItem::updateMarker):
+
 2017-10-05  Said Abou-Hallawa  <[email protected]>
 
         RenderSVGRoot should check the renderers inside its visualOverflowRect for hit testing if the overflow is visible

Modified: trunk/Source/WebCore/rendering/RenderListItem.cpp (222935 => 222936)


--- trunk/Source/WebCore/rendering/RenderListItem.cpp	2017-10-05 22:32:55 UTC (rev 222935)
+++ trunk/Source/WebCore/rendering/RenderListItem.cpp	2017-10-05 22:40:05 UTC (rev 222936)
@@ -48,7 +48,6 @@
 
 RenderListItem::RenderListItem(Element& element, RenderStyle&& style)
     : RenderBlockFlow(element, WTFMove(style))
-    , m_marker(nullptr)
     , m_hasExplicitValue(false)
     , m_isValueUpToDate(false)
     , m_notInList(false)
@@ -63,10 +62,8 @@
 
 void RenderListItem::willBeDestroyed()
 {
-    if (m_marker) {
-        m_marker->destroy();
-        ASSERT(!m_marker);
-    }
+    if (m_marker)
+        m_marker->removeFromParentAndDestroy();
     RenderBlockFlow::willBeDestroyed();
 }
 
@@ -332,25 +329,25 @@
         LayoutRect markerRect(markerLogicalLeft + lineOffset, blockOffset, m_marker->width(), m_marker->height());
         if (!style().isHorizontalWritingMode())
             markerRect = markerRect.transposedRect();
-        RenderBox* o = m_marker;
+        RenderBox* markerAncestor = m_marker.get();
         bool propagateVisualOverflow = true;
         bool propagateLayoutOverflow = true;
         do {
-            o = o->parentBox();
-            if (o->hasOverflowClip())
+            markerAncestor = markerAncestor->parentBox();
+            if (markerAncestor->hasOverflowClip())
                 propagateVisualOverflow = false;
-            if (is<RenderBlock>(*o)) {
+            if (is<RenderBlock>(*markerAncestor)) {
                 if (propagateVisualOverflow)
-                    downcast<RenderBlock>(*o).addVisualOverflow(markerRect);
+                    downcast<RenderBlock>(*markerAncestor).addVisualOverflow(markerRect);
                 if (propagateLayoutOverflow)
-                    downcast<RenderBlock>(*o).addLayoutOverflow(markerRect);
+                    downcast<RenderBlock>(*markerAncestor).addLayoutOverflow(markerRect);
             }
-            if (o->hasOverflowClip())
+            if (markerAncestor->hasOverflowClip())
                 propagateLayoutOverflow = false;
-            if (o->hasSelfPaintingLayer())
+            if (markerAncestor->hasSelfPaintingLayer())
                 propagateVisualOverflow = false;
-            markerRect.moveBy(-o->location());
-        } while (o != this && propagateVisualOverflow && propagateLayoutOverflow);
+            markerRect.moveBy(-markerAncestor->location());
+        } while (markerAncestor != this && propagateVisualOverflow && propagateLayoutOverflow);
     }
 }
 

Modified: trunk/Source/WebCore/rendering/RenderListItem.h (222935 => 222936)


--- trunk/Source/WebCore/rendering/RenderListItem.h	2017-10-05 22:32:55 UTC (rev 222935)
+++ trunk/Source/WebCore/rendering/RenderListItem.h	2017-10-05 22:40:05 UTC (rev 222936)
@@ -23,11 +23,11 @@
 #pragma once
 
 #include "RenderBlockFlow.h"
+#include "RenderListMarker.h"
 
 namespace WebCore {
 
 class HTMLOListElement;
-class RenderListMarker;
 
 class RenderListItem final : public RenderBlockFlow {
 public:
@@ -56,8 +56,8 @@
 
     RenderStyle computeMarkerStyle() const;
 
-    RenderListMarker* markerRenderer() { return m_marker; }
-    void setMarkerRenderer(RenderListMarker* marker) { m_marker = marker; }
+    RenderListMarker* markerRenderer() const { return m_marker.get(); }
+    void setMarkerRenderer(RenderListMarker& marker) { m_marker = makeWeakPtr(marker); }
 
 #if !ASSERT_DISABLED
     bool inLayout() const { return m_inLayout; }
@@ -88,7 +88,7 @@
 
 
     int m_explicitValue;
-    RenderListMarker* m_marker;
+    WeakPtr<RenderListMarker> m_marker;
     mutable int m_value;
 #if !ASSERT_DISABLED
     bool m_inLayout { false };

Modified: trunk/Source/WebCore/rendering/RenderListMarker.cpp (222935 => 222936)


--- trunk/Source/WebCore/rendering/RenderListMarker.cpp	2017-10-05 22:32:55 UTC (rev 222935)
+++ trunk/Source/WebCore/rendering/RenderListMarker.cpp	2017-10-05 22:40:05 UTC (rev 222936)
@@ -1133,10 +1133,8 @@
 
 void RenderListMarker::willBeDestroyed()
 {
-    m_listItem.setMarkerRenderer(nullptr);
     if (m_image)
         m_image->removeClient(this);
-
     RenderBox::willBeDestroyed();
 }
 

Modified: trunk/Source/WebCore/style/RenderTreeUpdaterListItem.cpp (222935 => 222936)


--- trunk/Source/WebCore/style/RenderTreeUpdaterListItem.cpp	2017-10-05 22:32:55 UTC (rev 222935)
+++ trunk/Source/WebCore/style/RenderTreeUpdaterListItem.cpp	2017-10-05 22:40:05 UTC (rev 222936)
@@ -76,10 +76,8 @@
     auto& style = listItemRenderer.style();
 
     if (style.listStyleType() == NoneListStyle && (!style.listStyleImage() || style.listStyleImage()->errorOccurred())) {
-        if (listItemRenderer.markerRenderer()) {
-            listItemRenderer.markerRenderer()->destroy();
-            ASSERT(!listItemRenderer.markerRenderer());
-        }
+        if (auto* marker = listItemRenderer.markerRenderer())
+            marker->removeFromParentAndDestroy();
         return;
     }
 
@@ -92,7 +90,7 @@
         newMarkerRenderer = WebCore::createRenderer<RenderListMarker>(listItemRenderer, WTFMove(newStyle));
         newMarkerRenderer->initializeStyle();
         markerRenderer = newMarkerRenderer.get();
-        listItemRenderer.setMarkerRenderer(markerRenderer);
+        listItemRenderer.setMarkerRenderer(*markerRenderer);
     }
 
     RenderElement* currentParent = markerRenderer->parent();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to