| Index: Source/core/frame/LocalFrame.cpp
|
| diff --git a/Source/core/frame/LocalFrame.cpp b/Source/core/frame/LocalFrame.cpp
|
| index 7c852b36fb9cea1ed03e8351197e60cb2319737b..0746d10b746230de5bdfc9bf79518acb44dc629e 100644
|
| --- a/Source/core/frame/LocalFrame.cpp
|
| +++ b/Source/core/frame/LocalFrame.cpp
|
| @@ -193,7 +193,16 @@ void LocalFrame::detach()
|
| // will trigger the unload event handlers of any child frames, and those event
|
| // handlers might start a new subresource load in this frame.
|
| m_loader.stopAllLoaders();
|
| - m_loader.detachFromParent();
|
| + if (!client())
|
| + return;
|
| + m_loader.detach();
|
| + setView(nullptr);
|
| + willDetachFrameHost();
|
| + // Notify ScriptController that the frame is closing, since its cleanup ends up calling
|
| + // back to FrameLoaderClient via WindowProxy.
|
| + script().clearForClose();
|
| + InspectorInstrumentation::frameDetachedFromParent(this);
|
| + Frame::detach();
|
| }
|
|
|
| bool LocalFrame::inScope(TreeScope* scope) const
|
| @@ -344,12 +353,6 @@ void LocalFrame::removeDestructionObserver(FrameDestructionObserver* observer)
|
|
|
| void LocalFrame::willDetachFrameHost()
|
| {
|
| - // We should never be detatching the page during a Layout.
|
| - RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout());
|
| -
|
| - Frame* parent = tree().parent();
|
| - if (parent && parent->isLocalFrame())
|
| - toLocalFrame(parent)->loader().checkLoadComplete();
|
|
|
| WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator stop = m_destructionObservers.end();
|
| for (WillBeHeapHashSet<RawPtrWillBeWeakMember<FrameDestructionObserver> >::iterator it = m_destructionObservers.begin(); it != stop; ++it)
|
| @@ -366,13 +369,6 @@ void LocalFrame::willDetachFrameHost()
|
| page()->scrollingCoordinator()->willDestroyScrollableArea(m_view.get());
|
| }
|
|
|
| -void LocalFrame::detachFromFrameHost()
|
| -{
|
| - // We should never be detaching the page during a Layout.
|
| - RELEASE_ASSERT(!m_view || !m_view->isInPerformLayout());
|
| - m_host = nullptr;
|
| -}
|
| -
|
| String LocalFrame::documentTypeString() const
|
| {
|
| if (DocumentType* doctype = document()->doctype())
|
| @@ -609,7 +605,7 @@ bool LocalFrame::isURLAllowed(const KURL& url) const
|
| {
|
| // We allow one level of self-reference because some sites depend on that,
|
| // but we don't allow more than one.
|
| - if (page()->subframeCount() >= Page::maxNumberOfFrames)
|
| + if (host()->subframeCount() >= FrameHost::maxNumberOfFrames)
|
| return false;
|
| bool foundSelfReference = false;
|
| for (const Frame* frame = this; frame; frame = frame->tree().parent()) {
|
|
|