Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2767)

Unified Diff: Source/web/WebLocalFrameImpl.cpp

Issue 517043003: Move Frame to the Oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase past r181764 Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/web/WebLocalFrameImpl.cpp
diff --git a/Source/web/WebLocalFrameImpl.cpp b/Source/web/WebLocalFrameImpl.cpp
index b6ef238c9be76972384ef84e5eae066b8fe9f76e..61693ef41a2d7d596b4c23c26f8c07a18f59f806 100644
--- a/Source/web/WebLocalFrameImpl.cpp
+++ b/Source/web/WebLocalFrameImpl.cpp
@@ -497,7 +497,12 @@ void WebLocalFrameImpl::close()
{
m_client = 0;
+ if (m_frame)
+ m_frame->setHasBeenClosed();
+
+#if !ENABLE(OILPAN)
deref(); // Balances ref() acquired in WebFrame::create
+#endif
}
WebString WebLocalFrameImpl::uniqueName() const
@@ -1519,7 +1524,12 @@ WebLocalFrame* WebLocalFrame::create(WebFrameClient* client)
WebLocalFrameImpl* WebLocalFrameImpl::create(WebFrameClient* client)
{
- return adoptRef(new WebLocalFrameImpl(client)).leakRef();
+ WebLocalFrameImpl* frame = new WebLocalFrameImpl(client);
+#if ENABLE(OILPAN)
+ return frame;
+#else
+ return adoptRef(frame).leakRef();
+#endif
}
WebLocalFrameImpl::WebLocalFrameImpl(WebFrameClient* client)
@@ -1542,7 +1552,16 @@ WebLocalFrameImpl::~WebLocalFrameImpl()
cancelPendingScopingEffort();
}
-void WebLocalFrameImpl::setCoreFrame(PassRefPtr<LocalFrame> frame)
+void WebLocalFrameImpl::trace(Visitor* visitor)
+{
+ visitor->trace(m_frame);
+ visitor->trace(m_printContext);
+ visitor->trace(m_geolocationClientProxy);
+
+ WebFrame::trace(visitor, this);
+}
+
+void WebLocalFrameImpl::setCoreFrame(PassRefPtrWillBeRawPtr<LocalFrame> frame)
{
m_frame = frame;
@@ -1565,9 +1584,9 @@ void WebLocalFrameImpl::setCoreFrame(PassRefPtr<LocalFrame> frame)
}
}
-PassRefPtr<LocalFrame> WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fallbackName)
+PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fallbackName)
{
- RefPtr<LocalFrame> frame = LocalFrame::create(&m_frameLoaderClientImpl, host, owner);
+ RefPtrWillBeRawPtr<LocalFrame> frame = LocalFrame::create(&m_frameLoaderClientImpl, host, owner);
setCoreFrame(frame);
frame->tree().setName(name, fallbackName);
// We must call init() after m_frame is assigned because it is referenced
@@ -1577,7 +1596,7 @@ PassRefPtr<LocalFrame> WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, F
return frame;
}
-PassRefPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const FrameLoadRequest& request, HTMLFrameOwnerElement* ownerElement)
+PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const FrameLoadRequest& request, HTMLFrameOwnerElement* ownerElement)
{
ASSERT(m_client);
WebLocalFrameImpl* webframeChild = toWebLocalFrameImpl(m_client->createChildFrame(this, request.frameName()));
@@ -1588,7 +1607,7 @@ PassRefPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const FrameLoadReques
// solution. subResourceAttributeName returns just one attribute name. The
// element might not have the attribute, and there might be other attributes
// which can identify the element.
- RefPtr<LocalFrame> child = webframeChild->initializeCoreFrame(frame()->host(), ownerElement, request.frameName(), ownerElement->getAttribute(ownerElement->subResourceAttributeName()));
+ RefPtrWillBeRawPtr<LocalFrame> child = webframeChild->initializeCoreFrame(frame()->host(), ownerElement, request.frameName(), ownerElement->getAttribute(ownerElement->subResourceAttributeName()));
// Initializing the core frame may cause the new child to be detached, since
// it may dispatch a load event in the parent.
if (!child->tree().parent())

Powered by Google App Engine
This is Rietveld 408576698