| Index: Source/web/WebFrame.cpp
|
| diff --git a/Source/web/WebFrame.cpp b/Source/web/WebFrame.cpp
|
| index 62d8960918986b4871c7dfca6561e753754cecf4..64e4450f0252dca1b340ba690efa514c037fe54e 100644
|
| --- a/Source/web/WebFrame.cpp
|
| +++ b/Source/web/WebFrame.cpp
|
| @@ -226,20 +226,44 @@ WebFrame::~WebFrame()
|
| m_openedFrameTracker.reset(0);
|
| }
|
|
|
| -void WebFrame::traceChildren(Visitor* visitor, WebFrame* frame)
|
| -{
|
| #if ENABLE(OILPAN)
|
| - // Trace the children frames.
|
| - WebFrame* child = frame ? frame->firstChild() : 0;
|
| - while (child) {
|
| - if (child->isWebLocalFrame())
|
| - visitor->trace(toWebLocalFrameImpl(child));
|
| - else
|
| - visitor->trace(toWebRemoteFrameImpl(child));
|
| -
|
| - child = child->nextSibling();
|
| - }
|
| -#endif
|
| +void WebFrame::traceFrame(Visitor* visitor, WebFrame* frame)
|
| +{
|
| + if (!frame)
|
| + return;
|
| +
|
| + if (frame->isWebLocalFrame())
|
| + visitor->trace(toWebLocalFrameImpl(frame));
|
| + else
|
| + visitor->trace(toWebRemoteFrameImpl(frame));
|
| +}
|
| +
|
| +void WebFrame::traceFrames(Visitor* visitor, WebFrame* frame)
|
| +{
|
| + ASSERT(frame);
|
| + traceFrame(visitor, frame->m_parent);
|
| + for (WebFrame* child = frame->firstChild(); child; child = child->nextSibling())
|
| + traceFrame(visitor, child);
|
| + // m_opener is a weak reference.
|
| + frame->m_openedFrameTracker->traceFrames(visitor);
|
| }
|
|
|
| +bool WebFrame::isAlive(Visitor* visitor, WebFrame* frame)
|
| +{
|
| + if (!frame)
|
| + return true;
|
| +
|
| + if (frame->isWebLocalFrame())
|
| + return visitor->isAlive(toWebLocalFrameImpl(frame));
|
| +
|
| + return visitor->isAlive(toWebRemoteFrameImpl(frame));
|
| +}
|
| +
|
| +void WebFrame::clearWeakFrames(Visitor* visitor)
|
| +{
|
| + if (!isAlive(visitor, m_opener))
|
| + m_opener = nullptr;
|
| +}
|
| +#endif
|
| +
|
| } // namespace blink
|
|
|