Title: [231735] trunk/Source/WebCore
- Revision
- 231735
- Author
- [email protected]
- Date
- 2018-05-12 10:10:30 -0700 (Sat, 12 May 2018)
Log Message
Use WeakPtr for m_enclosingPaginationLayer in RenderLayer
https://bugs.webkit.org/show_bug.cgi?id=185566
<rdar://problem/36486052>
Reviewed by Simon Fraser.
Since RenderLayer does not own the enclosing pagination layout, it should
construct a weak pointer instead of holding on to a raw pointer.
Unable to create a reliably reproducible test case.
* page/mac/EventHandlerMac.mm:
(WebCore::scrollableAreaForEventTarget):
(WebCore::scrollableAreaForContainerNode):
(WebCore::EventHandler::platformPrepareForWheelEvents):
* platform/ScrollableArea.h:
(WebCore::ScrollableArea::weakPtrFactory const):
(WebCore::ScrollableArea::createWeakPtr): Deleted.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::updatePagination):
* rendering/RenderLayer.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (231734 => 231735)
--- trunk/Source/WebCore/ChangeLog 2018-05-12 04:36:46 UTC (rev 231734)
+++ trunk/Source/WebCore/ChangeLog 2018-05-12 17:10:30 UTC (rev 231735)
@@ -1,3 +1,28 @@
+2018-05-12 Zalan Bujtas <[email protected]>
+
+ Use WeakPtr for m_enclosingPaginationLayer in RenderLayer
+ https://bugs.webkit.org/show_bug.cgi?id=185566
+ <rdar://problem/36486052>
+
+ Reviewed by Simon Fraser.
+
+ Since RenderLayer does not own the enclosing pagination layout, it should
+ construct a weak pointer instead of holding on to a raw pointer.
+
+ Unable to create a reliably reproducible test case.
+
+ * page/mac/EventHandlerMac.mm:
+ (WebCore::scrollableAreaForEventTarget):
+ (WebCore::scrollableAreaForContainerNode):
+ (WebCore::EventHandler::platformPrepareForWheelEvents):
+ * platform/ScrollableArea.h:
+ (WebCore::ScrollableArea::weakPtrFactory const):
+ (WebCore::ScrollableArea::createWeakPtr): Deleted.
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::RenderLayer):
+ (WebCore::RenderLayer::updatePagination):
+ * rendering/RenderLayer.h:
+
2018-05-11 Daniel Bates <[email protected]>
X-Frame-Options: SAMEORIGIN needs to check all ancestor frames
Modified: trunk/Source/WebCore/page/mac/EventHandlerMac.mm (231734 => 231735)
--- trunk/Source/WebCore/page/mac/EventHandlerMac.mm 2018-05-12 04:36:46 UTC (rev 231734)
+++ trunk/Source/WebCore/page/mac/EventHandlerMac.mm 2018-05-12 17:10:30 UTC (rev 231735)
@@ -845,7 +845,7 @@
if (!widget || !widget->isScrollView())
return { };
- return static_cast<ScrollableArea*>(static_cast<ScrollView*>(widget))->createWeakPtr();
+ return makeWeakPtr(static_cast<ScrollableArea&>(static_cast<ScrollView&>(*widget)));
}
static bool eventTargetIsPlatformWidget(Element* eventTarget)
@@ -904,7 +904,7 @@
if (!scrollableAreaPtr)
return { };
- return scrollableAreaPtr->createWeakPtr();
+ return makeWeakPtr(*scrollableAreaPtr);
}
static bool latchedToFrameOrBody(ContainerNode& container)
@@ -956,7 +956,7 @@
scrollableArea = scrollableAreaForContainerNode(*scrollableContainer);
else {
scrollableContainer = view->frame().document()->bodyOrFrameset();
- scrollableArea = static_cast<ScrollableArea*>(view)->createWeakPtr();
+ scrollableArea = makeWeakPtr(static_cast<ScrollableArea&>(*view));
}
}
}
Modified: trunk/Source/WebCore/platform/ScrollableArea.h (231734 => 231735)
--- trunk/Source/WebCore/platform/ScrollableArea.h 2018-05-12 04:36:46 UTC (rev 231734)
+++ trunk/Source/WebCore/platform/ScrollableArea.h 2018-05-12 17:10:30 UTC (rev 231735)
@@ -65,7 +65,7 @@
WEBCORE_EXPORT bool handleWheelEvent(const PlatformWheelEvent&);
- WeakPtr<ScrollableArea> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
+ auto& weakPtrFactory() const { return m_weakPtrFactory; }
#if ENABLE(CSS_SCROLL_SNAP)
WEBCORE_EXPORT const Vector<LayoutUnit>* horizontalSnapOffsets() const;
@@ -338,6 +338,8 @@
bool hasLayerForScrollCorner() const;
+ WeakPtrFactory<ScrollableArea> m_weakPtrFactory;
+
private:
WEBCORE_EXPORT virtual IntRect visibleContentRectInternal(VisibleContentRectIncludesScrollbars, VisibleContentRectBehavior) const;
void scrollPositionChanged(const ScrollPosition&);
@@ -353,8 +355,6 @@
mutable std::unique_ptr<ScrollAnimator> m_scrollAnimator;
- WeakPtrFactory<ScrollableArea> m_weakPtrFactory;
-
#if ENABLE(CSS_SCROLL_SNAP)
std::unique_ptr<ScrollSnapOffsetsInfo<LayoutUnit>> m_snapOffsetsInfo;
unsigned m_currentHorizontalSnapPointIndex { 0 };
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (231734 => 231735)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2018-05-12 04:36:46 UTC (rev 231734)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2018-05-12 17:10:30 UTC (rev 231735)
@@ -325,7 +325,6 @@
, m_last(nullptr)
, m_staticInlinePosition(0)
, m_staticBlockPosition(0)
- , m_enclosingPaginationLayer(nullptr)
{
m_isNormalFlowOnly = shouldBeNormalFlowOnly();
m_isSelfPaintingLayer = shouldBeSelfPaintingLayer();
@@ -1110,7 +1109,7 @@
// layers). We track an enclosingPaginationLayer instead of using a simple bit, since we want to be able to get back
// to that layer easily.
if (renderer().isInFlowRenderFragmentedFlow()) {
- m_enclosingPaginationLayer = this;
+ m_enclosingPaginationLayer = makeWeakPtr(*this);
return;
}
@@ -1121,7 +1120,7 @@
if (parent()->hasTransform())
m_enclosingPaginationLayer = nullptr;
else
- m_enclosingPaginationLayer = parent()->enclosingPaginationLayer(IncludeCompositedPaginatedLayers);
+ m_enclosingPaginationLayer = makeWeakPtr(parent()->enclosingPaginationLayer(IncludeCompositedPaginatedLayers));
return;
}
@@ -1135,7 +1134,7 @@
if (containingBlock->layer()->hasTransform())
m_enclosingPaginationLayer = nullptr;
else
- m_enclosingPaginationLayer = containingBlock->layer()->enclosingPaginationLayer(IncludeCompositedPaginatedLayers);
+ m_enclosingPaginationLayer = makeWeakPtr(containingBlock->layer()->enclosingPaginationLayer(IncludeCompositedPaginatedLayers));
return;
}
}
Modified: trunk/Source/WebCore/rendering/RenderLayer.h (231734 => 231735)
--- trunk/Source/WebCore/rendering/RenderLayer.h 2018-05-12 04:36:46 UTC (rev 231734)
+++ trunk/Source/WebCore/rendering/RenderLayer.h 2018-05-12 17:10:30 UTC (rev 231735)
@@ -52,6 +52,7 @@
#include "RenderPtr.h"
#include "ScrollableArea.h"
#include <memory>
+#include <wtf/WeakPtr.h>
namespace WTF {
class TextStream;
@@ -324,7 +325,7 @@
{
if (mode == ExcludeCompositedPaginatedLayers && hasCompositedLayerInEnclosingPaginationChain())
return nullptr;
- return m_enclosingPaginationLayer;
+ return m_enclosingPaginationLayer.get();
}
void updateTransform();
@@ -1163,7 +1164,7 @@
RenderPtr<RenderScrollbarPart> m_resizer;
// Pointer to the enclosing RenderLayer that caused us to be paginated. It is 0 if we are not paginated.
- RenderLayer* m_enclosingPaginationLayer;
+ WeakPtr<RenderLayer> m_enclosingPaginationLayer;
IntRect m_blockSelectionGapsBounds;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes