| Index: Source/core/frame/LocalFrame.cpp
|
| diff --git a/Source/core/frame/LocalFrame.cpp b/Source/core/frame/LocalFrame.cpp
|
| index ab38e41fd122edc120dce6897b9a266dae0e3406..90d84f49e8ba0793fad6195eb565eedefdf9d3bb 100644
|
| --- a/Source/core/frame/LocalFrame.cpp
|
| +++ b/Source/core/frame/LocalFrame.cpp
|
| @@ -132,16 +132,9 @@ PassRefPtrWillBeRawPtr<LocalFrame> LocalFrame::create(FrameLoaderClient* client,
|
| void LocalFrame::setView(PassRefPtrWillBeRawPtr<FrameView> view)
|
| {
|
| ASSERT(!m_view || m_view != view);
|
| - detachView();
|
| -
|
| - // Prepare for destruction now, so any unload event handlers get run and the LocalDOMWindow is
|
| - // notified. If we wait until the view is destroyed, then things won't be hooked up enough for
|
| - // these calls to work.
|
| - if (!view && document() && document()->isActive()) {
|
| - // FIXME: We don't call willRemove here. Why is that OK?
|
| - document()->prepareForDestruction();
|
| - }
|
| + ASSERT(!document() || !document()->isActive());
|
|
|
| + detachView();
|
| eventHandler().clear();
|
|
|
| m_view = view;
|
| @@ -267,6 +260,8 @@ void LocalFrame::detach()
|
| // handlers might start a new subresource load in this frame.
|
| m_loader.stopAllLoaders();
|
| m_loader.detach();
|
| + document()->prepareForDestruction();
|
| + m_loader.clear();
|
| if (!client())
|
| return;
|
|
|
| @@ -279,10 +274,6 @@ void LocalFrame::detach()
|
| willDetachFrameHost();
|
| InspectorInstrumentation::frameDetachedFromParent(this);
|
| Frame::detach();
|
| - // Clear the FrameLoader right here rather than during
|
| - // finalization. Too late to access various heap objects at that
|
| - // stage.
|
| - m_loader.clear();
|
|
|
| // Signal frame destruction here rather than in the destructor.
|
| // Main motivation is to avoid being dependent on its exact timing (Oilpan.)
|
|
|