| Index: Source/core/frame/FrameView.h
|
| diff --git a/Source/core/frame/FrameView.h b/Source/core/frame/FrameView.h
|
| index f3488f75d79d43e26f9854532e42ac37ef0739d1..f842000a64c7733d94d9bf0aee2733f5b6185a62 100644
|
| --- a/Source/core/frame/FrameView.h
|
| +++ b/Source/core/frame/FrameView.h
|
| @@ -57,14 +57,13 @@ struct CompositedSelectionBound;
|
|
|
| typedef unsigned long long DOMTimeStamp;
|
|
|
| -// FIXME: Oilpan: move Widget (and thereby FrameView) to the heap.
|
| class FrameView final : public ScrollView {
|
| public:
|
| friend class RenderView;
|
| friend class Internals;
|
|
|
| - static PassRefPtr<FrameView> create(LocalFrame*);
|
| - static PassRefPtr<FrameView> create(LocalFrame*, const IntSize& initialSize);
|
| + static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*);
|
| + static PassRefPtrWillBeRawPtr<FrameView> create(LocalFrame*, const IntSize& initialSize);
|
|
|
| virtual ~FrameView();
|
|
|
| @@ -85,7 +84,7 @@ public:
|
|
|
| virtual void setCanHaveScrollbars(bool) override;
|
|
|
| - virtual PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation) override;
|
| + virtual PassRefPtrWillBeRawPtr<Scrollbar> createScrollbar(ScrollbarOrientation) override;
|
|
|
| virtual void setContentsSize(const IntSize&) override;
|
| IntPoint clampOffsetAtScale(const IntPoint& offset, float scale) const;
|
| @@ -225,7 +224,7 @@ public:
|
| void incrementVisuallyNonEmptyPixelCount(const IntSize&);
|
| void setIsVisuallyNonEmpty() { m_isVisuallyNonEmpty = true; }
|
| void enableAutoSizeMode(const IntSize& minSize, const IntSize& maxSize);
|
| - void disableAutoSizeMode() { m_autoSizeInfo.clear(); }
|
| + void disableAutoSizeMode() { disposeAutoSizeInfo(); }
|
|
|
| void forceLayout(bool allowSubtree = false);
|
| void forceLayoutForPagination(const FloatSize& pageSize, const FloatSize& originalPageSize, float maximumShrinkFactor);
|
| @@ -332,6 +331,8 @@ public:
|
| virtual GraphicsLayer* layerForVerticalScrollbar() const override;
|
| virtual GraphicsLayer* layerForScrollCorner() const override;
|
|
|
| + virtual void trace(Visitor*) override;
|
| +
|
| protected:
|
| virtual bool scrollContentsFastPath(const IntSize& scrollDelta) override;
|
| virtual void scrollContentsSlowPath(const IntRect& updateRect) override;
|
| @@ -346,6 +347,7 @@ protected:
|
| private:
|
| explicit FrameView(LocalFrame*);
|
|
|
| + void dispose();
|
| void reset();
|
| void init();
|
|
|
| @@ -417,6 +419,8 @@ private:
|
|
|
| void setLayoutSizeInternal(const IntSize&);
|
|
|
| + void disposeAutoSizeInfo();
|
| +
|
| bool paintInvalidationIsAllowed() const
|
| {
|
| return !isInPerformLayout() || canInvalidatePaintDuringPerformLayout();
|
| @@ -428,18 +432,20 @@ private:
|
| LayoutSize m_size;
|
|
|
| typedef WillBeHeapHashSet<RefPtrWillBeMember<RenderEmbeddedObject> > EmbeddedObjectSet;
|
| - WillBePersistentHeapHashSet<RefPtrWillBeMember<RenderEmbeddedObject> > m_widgetUpdateSet;
|
| + WillBeHeapHashSet<RefPtrWillBeMember<RenderEmbeddedObject> > m_widgetUpdateSet;
|
|
|
| // FIXME: These are just "children" of the FrameView and should be RefPtr<Widget> instead.
|
| - WillBePersistentHeapHashSet<RefPtrWillBeMember<RenderWidget> > m_widgets;
|
| + WillBeHeapHashSet<RefPtrWillBeMember<RenderWidget> > m_widgets;
|
|
|
| - // Oilpan: the use of a persistent back reference 'emulates' the
|
| - // RefPtr-cycle that is kept between the two objects non-Oilpan.
|
| + // The RefPtr cycle between LocalFrame and FrameView is broken
|
| + // when a LocalFrame is detached by FrameLoader::detachFromParent().
|
| + // It clears the LocalFrame's m_view reference via setView(nullptr).
|
| //
|
| - // That cycle is broken when a LocalFrame is detached by
|
| - // FrameLoader::detachFromParent(), it then clears its
|
| - // FrameView's m_frame reference by calling setView(nullptr).
|
| - RefPtrWillBePersistent<LocalFrame> m_frame;
|
| + // For Oilpan, Member reference cycles pose no problem, but
|
| + // LocalFrame's FrameView is also cleared by setView(). This additionally
|
| + // triggers FrameView::dispose(), which performs the operations
|
| + // that cannot be delayed until finalization time.
|
| + RefPtrWillBeMember<LocalFrame> m_frame;
|
|
|
| bool m_doFullPaintInvalidation;
|
|
|
| @@ -482,7 +488,7 @@ private:
|
| bool m_isTrackingPaintInvalidations; // Used for testing.
|
| Vector<IntRect> m_trackedPaintInvalidationRects;
|
|
|
| - RefPtrWillBePersistent<Node> m_nodeToDraw;
|
| + RefPtrWillBeMember<Node> m_nodeToDraw;
|
| PaintBehavior m_paintBehavior;
|
| bool m_isPainting;
|
|
|
| @@ -491,15 +497,15 @@ private:
|
| bool m_isVisuallyNonEmpty;
|
| bool m_firstVisuallyNonEmptyLayoutCallbackPending;
|
|
|
| - RefPtrWillBePersistent<Node> m_maintainScrollPositionAnchor;
|
| + RefPtrWillBeMember<Node> m_maintainScrollPositionAnchor;
|
|
|
| // Renderer to hold our custom scroll corner.
|
| - RawPtrWillBePersistent<RenderScrollbarPart> m_scrollCorner;
|
| + RawPtrWillBeMember<RenderScrollbarPart> m_scrollCorner;
|
|
|
| OwnPtr<ScrollableAreaSet> m_scrollableAreas;
|
| OwnPtr<ResizerAreaSet> m_resizerAreas;
|
| OwnPtr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects;
|
| - OwnPtr<FrameViewAutoSizeInfo> m_autoSizeInfo;
|
| + OwnPtrWillBeMember<FrameViewAutoSizeInfo> m_autoSizeInfo;
|
|
|
| float m_visibleContentScaleFactor;
|
| IntSize m_inputEventsOffsetForEmulation;
|
| @@ -512,8 +518,13 @@ private:
|
|
|
| Vector<IntRect> m_tickmarks;
|
|
|
| - bool m_needsUpdateWidgetPositions;
|
| float m_topControlsViewportAdjustment;
|
| + bool m_needsUpdateWidgetPositions;
|
| +
|
| +#if ENABLE(OILPAN) && ENABLE(ASSERT)
|
| + // Verified when finalizing.
|
| + bool m_hasBeenDisposed;
|
| +#endif
|
| };
|
|
|
| inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count)
|
| @@ -542,6 +553,7 @@ inline void FrameView::incrementVisuallyNonEmptyPixelCount(const IntSize& size)
|
| DEFINE_TYPE_CASTS(FrameView, Widget, widget, widget->isFrameView(), widget.isFrameView());
|
|
|
| class AllowPaintInvalidationScope {
|
| + STACK_ALLOCATED();
|
| public:
|
| explicit AllowPaintInvalidationScope(FrameView* view)
|
| : m_view(view)
|
| @@ -560,8 +572,9 @@ public:
|
|
|
| m_view->setCanInvalidatePaintDuringPerformLayout(m_originalValue);
|
| }
|
| +
|
| private:
|
| - FrameView* m_view;
|
| + RawPtrWillBeMember<FrameView> m_view;
|
| bool m_originalValue;
|
| };
|
|
|
|
|