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;