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

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: Simplify DOMWindowProperty for Oilpan + other review improvements 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
« no previous file with comments | « Source/web/WebLocalFrameImpl.h ('k') | Source/web/WebPagePopupImpl.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebLocalFrameImpl.cpp
diff --git a/Source/web/WebLocalFrameImpl.cpp b/Source/web/WebLocalFrameImpl.cpp
index 89c0f95edc455d40617cc63c39af7815041e7215..f3b1cda077d12fbc2536a409af88240540119d61 100644
--- a/Source/web/WebLocalFrameImpl.cpp
+++ b/Source/web/WebLocalFrameImpl.cpp
@@ -498,7 +498,15 @@ void WebLocalFrameImpl::close()
{
m_client = 0;
+ if (m_frame)
+ m_frame->setHasBeenClosed();
+
+#if ENABLE(OILPAN)
+ if (m_frame && m_frame->isMainFrame() && viewImpl())
dcheng 2014/09/17 10:58:08 I'm a little concerned about how it's much harder
+ viewImpl()->clearMainFrame(this);
+#else
deref(); // Balances ref() acquired in WebFrame::create
+#endif
}
WebString WebLocalFrameImpl::uniqueName() const
@@ -1527,7 +1535,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)
@@ -1550,7 +1563,18 @@ WebLocalFrameImpl::~WebLocalFrameImpl()
cancelPendingScopingEffort();
}
-void WebLocalFrameImpl::setCoreFrame(PassRefPtr<LocalFrame> frame)
+void WebLocalFrameImpl::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+ visitor->trace(m_frame);
+ visitor->trace(m_printContext);
+ visitor->trace(m_geolocationClientProxy);
+
+ WebFrame::traceChildren(visitor, this);
+#endif
+}
+
+void WebLocalFrameImpl::setCoreFrame(PassRefPtrWillBeRawPtr<LocalFrame> frame)
{
m_frame = frame;
@@ -1573,9 +1597,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
@@ -1585,7 +1609,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()));
@@ -1596,7 +1620,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())
« no previous file with comments | « Source/web/WebLocalFrameImpl.h ('k') | Source/web/WebPagePopupImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698