Title: [222682] trunk/Source
Revision
222682
Author
[email protected]
Date
2017-09-30 06:44:04 -0700 (Sat, 30 Sep 2017)

Log Message

Add makeWeakPtr for easier WeakPtr construction
https://bugs.webkit.org/show_bug.cgi?id=177706

Reviewed by Sam Weinig.

Source/WebCore:

Use it in render tree.

* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::loadPlugin):
* page/FrameView.cpp:
(WebCore::FrameView::updateEmbeddedObject):
* rendering/RenderMultiColumnFlow.cpp:
(WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
* rendering/RenderObject.h:
(WebCore::RenderObject::weakFactory const):
(WebCore::RenderObject::createWeakPtr): Deleted.
* rendering/RenderView.cpp:
(WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
* rendering/RenderWidget.cpp:
(WebCore::RenderWidget::setWidgetGeometry):
(WebCore::RenderWidget::setWidget):
(WebCore::RenderWidget::updateWidgetPosition):

Source/WTF:

Standalone makeWeakPtr() returns a WeakPtr of the same type as the argument.

For this to work the argument type needs to expose a (possibly base type) WeakPtrFactory
as a public weakPtrFactory() member function.

* wtf/WeakPtr.h:
(WTF::WeakPtr::operator-> const):
(WTF::WeakPtr::operator* const): Also add operator*.
(WTF::makeWeakPtr):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (222681 => 222682)


--- trunk/Source/WTF/ChangeLog	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WTF/ChangeLog	2017-09-30 13:44:04 UTC (rev 222682)
@@ -1,3 +1,20 @@
+2017-09-30  Antti Koivisto  <[email protected]>
+
+        Add makeWeakPtr for easier WeakPtr construction
+        https://bugs.webkit.org/show_bug.cgi?id=177706
+
+        Reviewed by Sam Weinig.
+
+        Standalone makeWeakPtr() returns a WeakPtr of the same type as the argument.
+
+        For this to work the argument type needs to expose a (possibly base type) WeakPtrFactory
+        as a public weakPtrFactory() member function.
+
+        * wtf/WeakPtr.h:
+        (WTF::WeakPtr::operator-> const):
+        (WTF::WeakPtr::operator* const): Also add operator*.
+        (WTF::makeWeakPtr):
+
 2017-09-28  Jiewen Tan  <[email protected]>
 
         WeakPtrFactory should allow downcasting

Modified: trunk/Source/WTF/wtf/WeakPtr.h (222681 => 222682)


--- trunk/Source/WTF/wtf/WeakPtr.h	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WTF/wtf/WeakPtr.h	2017-09-30 13:44:04 UTC (rev 222682)
@@ -76,7 +76,8 @@
     WeakPtr& operator=(const WeakPtr& o) { m_ref = o.m_ref.copyRef(); return *this; }
     WeakPtr& operator=(std::nullptr_t) { m_ref = WeakReference<T>::create(nullptr); return *this; }
 
-    T* operator->() const { return m_ref->get(); }
+    T* operator->() const { return get(); }
+    T& operator*() const { return *get(); }
 
     void clear() { m_ref = WeakReference<T>::create(nullptr); }
 
@@ -120,6 +121,11 @@
     mutable RefPtr<WeakReference<T>> m_ref;
 };
 
+template <typename T> inline WeakPtr<T> makeWeakPtr(T& ref)
+{
+    return ref.weakPtrFactory().template createWeakPtr<T>(ref);
+}
+
 template<typename T, typename U> inline bool operator==(const WeakPtr<T>& a, const WeakPtr<U>& b)
 {
     return a.get() == b.get();
@@ -155,5 +161,6 @@
 using WTF::WeakPtr;
 using WTF::WeakPtrFactory;
 using WTF::WeakReference;
+using WTF::makeWeakPtr;
 
 #endif

Modified: trunk/Source/WebCore/ChangeLog (222681 => 222682)


--- trunk/Source/WebCore/ChangeLog	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/ChangeLog	2017-09-30 13:44:04 UTC (rev 222682)
@@ -1,3 +1,28 @@
+2017-09-30  Antti Koivisto  <[email protected]>
+
+        Add makeWeakPtr for easier WeakPtr construction
+        https://bugs.webkit.org/show_bug.cgi?id=177706
+
+        Reviewed by Sam Weinig.
+
+        Use it in render tree.
+
+        * loader/SubframeLoader.cpp:
+        (WebCore::SubframeLoader::loadPlugin):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateEmbeddedObject):
+        * rendering/RenderMultiColumnFlow.cpp:
+        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::weakFactory const):
+        (WebCore::RenderObject::createWeakPtr): Deleted.
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
+        * rendering/RenderWidget.cpp:
+        (WebCore::RenderWidget::setWidgetGeometry):
+        (WebCore::RenderWidget::setWidget):
+        (WebCore::RenderWidget::updateWidgetPosition):
+
 2017-09-30  Ryosuke Niwa  <[email protected]>
 
         Share more pasteboard code between iOS and macOS and remove dependency on Settings

Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (222681 => 222682)


--- trunk/Source/WebCore/loader/SubframeLoader.cpp	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp	2017-09-30 13:44:04 UTC (rev 222682)
@@ -411,7 +411,7 @@
         loadManually = false;
 #endif
 
-    auto weakRenderer = renderer->createWeakPtr<RenderEmbeddedObject>();
+    auto weakRenderer = makeWeakPtr(*renderer);
 
     auto widget = m_frame.loader().client().createPlugin(contentSize, pluginElement, url, paramNames, paramValues, mimeType, loadManually);
 

Modified: trunk/Source/WebCore/page/FrameView.cpp (222681 => 222682)


--- trunk/Source/WebCore/page/FrameView.cpp	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/page/FrameView.cpp	2017-09-30 13:44:04 UTC (rev 222682)
@@ -3441,7 +3441,7 @@
         return;
     }
 
-    auto weakRenderer = embeddedObject.createWeakPtr<RenderEmbeddedObject>();
+    auto weakRenderer = makeWeakPtr(embeddedObject);
 
     // FIXME: This could turn into a real virtual dispatch if we defined
     // updateWidget(PluginCreationOption) on HTMLElement.

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp (222681 => 222682)


--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2017-09-30 13:44:04 UTC (rev 222682)
@@ -443,7 +443,7 @@
             }
             
             ASSERT(!m_spannerMap.get(placeholder.spanner()));
-            m_spannerMap.add(placeholder.spanner(), placeholder.createWeakPtr<RenderMultiColumnSpannerPlaceholder>());
+            m_spannerMap.add(placeholder.spanner(), makeWeakPtr(placeholder));
             ASSERT(!placeholder.firstChild()); // There should be no children here, but if there are, we ought to skip them.
             continue;
         }

Modified: trunk/Source/WebCore/rendering/RenderObject.h (222681 => 222682)


--- trunk/Source/WebCore/rendering/RenderObject.h	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2017-09-30 13:44:04 UTC (rev 222682)
@@ -109,8 +109,7 @@
     explicit RenderObject(Node&);
     virtual ~RenderObject();
 
-    template<typename T>
-    WeakPtr<T> createWeakPtr() { return m_weakFactory.createWeakPtr<T>(*this); }
+    auto& weakPtrFactory() const { return m_weakFactory; }
 
     RenderTheme& theme() const;
 

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (222681 => 222682)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2017-09-30 13:44:04 UTC (rev 222682)
@@ -1265,7 +1265,7 @@
     m_wasAccumulatingRepaintRegion = !!rootRenderView->m_accumulatedRepaintRegion;
     if (!m_wasAccumulatingRepaintRegion)
         rootRenderView->m_accumulatedRepaintRegion = std::make_unique<Region>();
-    m_rootView = rootRenderView->createWeakPtr<RenderView>();
+    m_rootView = makeWeakPtr(*rootRenderView);
 }
 
 RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator()

Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (222681 => 222682)


--- trunk/Source/WebCore/rendering/RenderWidget.cpp	2017-09-30 13:00:30 UTC (rev 222681)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp	2017-09-30 13:44:04 UTC (rev 222682)
@@ -128,7 +128,7 @@
 
     m_clipRect = clipRect;
 
-    auto weakThis = createWeakPtr<RenderWidget>();
+    auto weakThis = makeWeakPtr(*this);
     // These calls *may* cause this renderer to disappear from underneath...
     if (boundsChanged)
         m_widget->setFrameRect(newFrameRect);
@@ -178,7 +178,7 @@
         // widget immediately, but we have to have really been fully constructed.
         if (hasInitializedStyle()) {
             if (!needsLayout()) {
-                auto weakThis = createWeakPtr<RenderWidget>();
+                auto weakThis = makeWeakPtr(*this);
                 updateWidgetGeometry();
                 if (!weakThis)
                     return;
@@ -322,7 +322,7 @@
     if (!m_widget)
         return ChildWidgetState::Destroyed;
 
-    auto weakThis = createWeakPtr<RenderWidget>();
+    auto weakThis = makeWeakPtr(*this);
     bool widgetSizeChanged = updateWidgetGeometry();
     if (!weakThis || !m_widget)
         return ChildWidgetState::Destroyed;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to