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

Reply via email to