Diff
Modified: trunk/Source/WebCore/ChangeLog (222652 => 222653)
--- trunk/Source/WebCore/ChangeLog 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/ChangeLog 2017-09-29 17:50:59 UTC (rev 222653)
@@ -1,3 +1,36 @@
+2017-09-29 Zalan Bujtas <[email protected]>
+
+ Add WeakPtr support to RenderObject.
+ https://bugs.webkit.org/show_bug.cgi?id=177429
+ <rdar://problem/34625212>
+
+ Reviewed by Dean Jackson.
+
+ This is in preparation to start using weak pointers extensively in rendering.
+
+ No change in functionality.
+
+ * loader/SubframeLoader.cpp:
+ (WebCore::SubframeLoader::loadPlugin):
+ * page/FrameView.cpp:
+ (WebCore::FrameView::updateEmbeddedObject):
+ * rendering/RenderMultiColumnFlow.cpp:
+ (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted):
+ * rendering/RenderMultiColumnSpannerPlaceholder.h:
+ * rendering/RenderObject.cpp:
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::createWeakPtr):
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
+ (WebCore::RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator):
+ * rendering/RenderView.h:
+ * rendering/RenderWidget.cpp:
+ (WebCore::RenderWidget::setWidgetGeometry):
+ (WebCore::RenderWidget::setWidget):
+ (WebCore::RenderWidget::updateWidgetPosition):
+ * rendering/RenderWidget.h:
+ (WebCore::RenderWidget::createWeakPtr): Deleted.
+
2017-09-29 Enrique Ocaña González <[email protected]>
[GStreamer] Refactor media player to use MediaTime consistently
Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (222652 => 222653)
--- trunk/Source/WebCore/loader/SubframeLoader.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -411,7 +411,7 @@
loadManually = false;
#endif
- auto weakRenderer = renderer->createWeakPtr();
+ auto weakRenderer = renderer->createWeakPtr<RenderEmbeddedObject>();
auto widget = m_frame.loader().client().createPlugin(contentSize, pluginElement, url, paramNames, paramValues, mimeType, loadManually);
Modified: trunk/Source/WebCore/page/FrameView.cpp (222652 => 222653)
--- trunk/Source/WebCore/page/FrameView.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/page/FrameView.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -3441,7 +3441,7 @@
return;
}
- auto weakRenderer = embeddedObject.createWeakPtr();
+ auto weakRenderer = embeddedObject.createWeakPtr<RenderEmbeddedObject>();
// FIXME: This could turn into a real virtual dispatch if we defined
// updateWidget(PluginCreationOption) on HTMLElement.
Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -438,7 +438,7 @@
}
ASSERT(!m_spannerMap.get(placeholder.spanner()));
- m_spannerMap.add(placeholder.spanner(), placeholder.createWeakPtr());
+ m_spannerMap.add(placeholder.spanner(), placeholder.createWeakPtr<RenderMultiColumnSpannerPlaceholder>());
ASSERT(!placeholder.firstChild()); // There should be no children here, but if there are, we ought to skip them.
continue;
}
Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSpannerPlaceholder.h 2017-09-29 17:50:59 UTC (rev 222653)
@@ -31,8 +31,6 @@
#include "RenderBox.h"
-#include <wtf/WeakPtr.h>
-
namespace WebCore {
class RenderMultiColumnFlow;
@@ -43,7 +41,6 @@
RenderBox* spanner() const { return m_spanner; }
RenderMultiColumnFlow* fragmentedFlow() const { return m_fragmentedFlow; }
- WeakPtr<RenderMultiColumnSpannerPlaceholder> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
private:
RenderMultiColumnSpannerPlaceholder(RenderMultiColumnFlow*, RenderBox& spanner, RenderStyle&&);
@@ -55,7 +52,6 @@
RenderBox* m_spanner;
RenderMultiColumnFlow* m_fragmentedFlow;
- WeakPtrFactory<RenderMultiColumnSpannerPlaceholder> m_weakPtrFactory;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -97,7 +97,7 @@
struct SameSizeAsRenderObject {
virtual ~SameSizeAsRenderObject() { } // Allocate vtable pointer.
- void* pointers[4];
+ void* pointers[5];
#ifndef NDEBUG
unsigned m_debugBitfields : 2;
#endif
Modified: trunk/Source/WebCore/rendering/RenderObject.h (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderObject.h 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2017-09-29 17:50:59 UTC (rev 222653)
@@ -36,6 +36,7 @@
#include "ScrollAlignment.h"
#include "StyleImage.h"
#include "TextAffinity.h"
+#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -108,6 +109,9 @@
explicit RenderObject(Node&);
virtual ~RenderObject();
+ template<typename T>
+ WeakPtr<T> createWeakPtr() { return m_weakFactory.createWeakPtr<T>(*this); }
+
RenderTheme& theme() const;
virtual const char* renderName() const = 0;
@@ -834,6 +838,8 @@
RenderObject* m_previous;
RenderObject* m_next;
+ WeakPtrFactory<RenderObject> m_weakFactory;
+
#ifndef NDEBUG
bool m_hasAXObject : 1;
bool m_setNeedsLayoutForbidden : 1;
Modified: trunk/Source/WebCore/rendering/RenderView.cpp (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -1288,19 +1288,19 @@
if (!rootRenderView)
return;
- m_rootView = rootRenderView->createWeakPtr();
- m_wasAccumulatingRepaintRegion = !!m_rootView->m_accumulatedRepaintRegion;
+ m_wasAccumulatingRepaintRegion = !!rootRenderView->m_accumulatedRepaintRegion;
if (!m_wasAccumulatingRepaintRegion)
- m_rootView->m_accumulatedRepaintRegion = std::make_unique<Region>();
+ rootRenderView->m_accumulatedRepaintRegion = std::make_unique<Region>();
+ m_rootView = rootRenderView->createWeakPtr<RenderView>();
}
RenderView::RepaintRegionAccumulator::~RepaintRegionAccumulator()
{
+ if (m_wasAccumulatingRepaintRegion)
+ return;
if (!m_rootView)
return;
- if (m_wasAccumulatingRepaintRegion)
- return;
- m_rootView->flushAccumulatedRepaintRegion();
+ m_rootView.get()->flushAccumulatedRepaintRegion();
}
unsigned RenderView::pageNumberForBlockProgressionOffset(int offset) const
Modified: trunk/Source/WebCore/rendering/RenderView.h (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderView.h 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderView.h 2017-09-29 17:50:59 UTC (rev 222653)
@@ -233,8 +233,6 @@
bool m_wasAccumulatingRepaintRegion;
};
- WeakPtr<RenderView> createWeakPtr() { return m_weakFactory.createWeakPtr(*this); }
-
void scheduleLazyRepaint(RenderBox&);
void unscheduleLazyRepaint(RenderBox&);
@@ -322,7 +320,6 @@
private:
FrameView& m_frameView;
- WeakPtrFactory<RenderView> m_weakFactory;
RenderObject* m_selectionUnsplitStart { nullptr };
RenderObject* m_selectionUnsplitEnd { nullptr };
std::optional<unsigned> m_selectionUnsplitStartPos;
Modified: trunk/Source/WebCore/rendering/RenderWidget.cpp (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderWidget.cpp 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderWidget.cpp 2017-09-29 17:50:59 UTC (rev 222653)
@@ -128,7 +128,7 @@
m_clipRect = clipRect;
- WeakPtr<RenderWidget> weakThis = createWeakPtr();
+ auto weakThis = createWeakPtr<RenderWidget>();
// 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()) {
- WeakPtr<RenderWidget> weakThis = createWeakPtr();
+ auto weakThis = createWeakPtr<RenderWidget>();
updateWidgetGeometry();
if (!weakThis)
return;
@@ -322,7 +322,7 @@
if (!m_widget)
return ChildWidgetState::Destroyed;
- WeakPtr<RenderWidget> weakThis = createWeakPtr();
+ auto weakThis = createWeakPtr<RenderWidget>();
bool widgetSizeChanged = updateWidgetGeometry();
if (!weakThis || !m_widget)
return ChildWidgetState::Destroyed;
Modified: trunk/Source/WebCore/rendering/RenderWidget.h (222652 => 222653)
--- trunk/Source/WebCore/rendering/RenderWidget.h 2017-09-29 17:05:37 UTC (rev 222652)
+++ trunk/Source/WebCore/rendering/RenderWidget.h 2017-09-29 17:50:59 UTC (rev 222653)
@@ -25,7 +25,6 @@
#include "OverlapTestRequestClient.h"
#include "RenderReplaced.h"
#include "Widget.h"
-#include <wtf/WeakPtr.h>
namespace WebCore {
@@ -71,8 +70,6 @@
bool requiresAcceleratedCompositing() const;
- WeakPtr<RenderWidget> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(*this); }
-
void ref() { ++m_refCount; }
void deref();
@@ -101,7 +98,6 @@
bool setWidgetGeometry(const LayoutRect&);
bool updateWidgetGeometry();
- WeakPtrFactory<RenderWidget> m_weakPtrFactory;
RefPtr<Widget> m_widget;
IntRect m_clipRect; // The rectangle needs to remain correct after scrolling, so it is stored in content view coordinates, and not clipped to window.
unsigned m_refCount { 1 };