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