Index: Source/core/frame/LocalFrame.cpp |
diff --git a/Source/core/frame/LocalFrame.cpp b/Source/core/frame/LocalFrame.cpp |
index 94a5d12e52729f9b52217b2c695faf5249daa7ce..b506953acb953b0032a56d1b1f057e9ab8fca5d5 100644 |
--- a/Source/core/frame/LocalFrame.cpp |
+++ b/Source/core/frame/LocalFrame.cpp |
@@ -106,30 +106,57 @@ inline LocalFrame::LocalFrame(FrameLoaderClient* client, FrameHost* host, FrameO |
{ |
} |
-PassRefPtr<LocalFrame> LocalFrame::create(FrameLoaderClient* client, FrameHost* host, FrameOwner* owner) |
+PassRefPtrWillBeRawPtr<LocalFrame> LocalFrame::create(FrameLoaderClient* client, FrameHost* host, FrameOwner* owner) |
{ |
- RefPtr<LocalFrame> frame = adoptRef(new LocalFrame(client, host, owner)); |
+ RefPtrWillBeRawPtr<LocalFrame> frame = adoptRefWillBeNoop(new LocalFrame(client, host, owner)); |
InspectorInstrumentation::frameAttachedToParent(frame.get()); |
return frame.release(); |
} |
LocalFrame::~LocalFrame() |
{ |
- setView(nullptr); |
- loader().clear(); |
- setDOMWindow(nullptr); |
+ dispose(); |
+} |
+ |
+void LocalFrame::trace(Visitor* visitor) |
+{ |
+#if ENABLE(OILPAN) |
+ visitor->trace(m_destructionObservers); |
+#endif |
+ visitor->trace(m_loader); |
+ visitor->trace(m_navigationScheduler); |
+ visitor->trace(m_pagePopupOwner); |
+ visitor->trace(m_editor); |
+ visitor->trace(m_spellChecker); |
+ visitor->trace(m_selection); |
+ visitor->trace(m_eventHandler); |
+ visitor->trace(m_console); |
+ visitor->trace(m_inputMethodController); |
+ Frame::trace(visitor); |
+ WillBeHeapSupplementable<LocalFrame>::trace(visitor); |
+} |
- // FIXME: What to do here... some of this is redundant with ~Frame. |
- HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end(); |
- for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it) |
+void LocalFrame::dispose() |
+{ |
+#if !ENABLE(OILPAN) |
+ setView(nullptr); |
+ loader().dispose(FrameLoader::DoDisposeFrameContents); |
+#else |
+ loader().dispose(FrameLoader::DoNotDisposeFrameContents); |
+#endif |
+ |
+#if !ENABLE(OILPAN) |
+ HashSet<RawPtr<FrameDestructionObserver> >::iterator stop = m_destructionObservers.end(); |
+ for (HashSet<RawPtr<FrameDestructionObserver> >::iterator it = m_destructionObservers.begin(); it != stop; ++it) |
(*it)->frameDestroyed(); |
+#endif |
} |
void LocalFrame::detach() |
{ |
// A lot of the following steps can result in the current frame being |
// detached, so protect a reference to it. |
- RefPtr<LocalFrame> protect(this); |
+ RefPtrWillBeRawPtr<LocalFrame> protect(this); |
m_loader.stopAllLoaders(); |
m_loader.closeURL(); |
detachChildren(); |
@@ -199,7 +226,7 @@ void LocalFrame::setPrinting(bool printing, const FloatSize& pageSize, const Flo |
} |
// Subframes of the one we're printing don't lay out to the page size. |
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
if (child->isLocalFrame()) |
toLocalFrame(child.get())->setPrinting(printing, FloatSize(), FloatSize(), 0); |
} |
@@ -234,6 +261,10 @@ FloatSize LocalFrame::resizePageRectsKeepingRatio(const FloatSize& originalSize, |
void LocalFrame::setDOMWindow(PassRefPtrWillBeRawPtr<LocalDOMWindow> domWindow) |
{ |
+ // FIXME: Oilpan: the objects that keep the LocalDOMWindow references |
+ // that's cleared here non-Oilpan will have to clear out and reset |
+ // themselves. Or deemed to die at the same time as this frame, hence |
+ // the clearing isn't required. |
if (m_domWindow) { |
console().messageStorage()->frameWindowDiscarded(m_domWindow.get()); |
InspectorInstrumentation::frameWindowDiscarded(this, m_domWindow.get()); |
@@ -248,7 +279,7 @@ void LocalFrame::didChangeVisibilityState() |
if (document()) |
document()->didChangeVisibilityState(); |
- Vector<RefPtr<LocalFrame> > childFrames; |
+ WillBeHeapVector<RefPtrWillBeMember<LocalFrame> > childFrames; |
for (Frame* child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
if (child->isLocalFrame()) |
childFrames.append(toLocalFrame(child)); |
@@ -277,8 +308,8 @@ void LocalFrame::willDetachFrameHost() |
if (parent && parent->isLocalFrame()) |
toLocalFrame(parent)->loader().checkLoadComplete(); |
- HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end(); |
- for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it) |
+ WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator stop = m_destructionObservers.end(); |
+ for (WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator it = m_destructionObservers.begin(); it != stop; ++it) |
(*it)->willDetachFrameHost(); |
// FIXME: Page should take care of updating focus/scrolling instead of Frame. |
@@ -294,9 +325,9 @@ void LocalFrame::willDetachFrameHost() |
void LocalFrame::detachFromFrameHost() |
{ |
- // We should never be detatching the page during a Layout. |
+ // We should never be detaching the page during a Layout. |
RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout()); |
- m_host = 0; |
+ m_host = nullptr; |
} |
String LocalFrame::documentTypeString() const |
@@ -513,7 +544,7 @@ void LocalFrame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomF |
m_pageZoomFactor = pageZoomFactor; |
m_textZoomFactor = textZoomFactor; |
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
if (child->isLocalFrame()) |
toLocalFrame(child.get())->setPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor); |
} |
@@ -525,7 +556,7 @@ void LocalFrame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomF |
void LocalFrame::deviceOrPageScaleFactorChanged() |
{ |
document()->mediaQueryAffectingValueChanged(); |
- for (RefPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
+ for (RefPtrWillBeRawPtr<Frame> child = tree().firstChild(); child; child = child->tree().nextSibling()) { |
if (child->isLocalFrame()) |
toLocalFrame(child.get())->deviceOrPageScaleFactorChanged(); |
} |