| Index: Source/core/html/HTMLFrameOwnerElement.cpp
|
| diff --git a/Source/core/html/HTMLFrameOwnerElement.cpp b/Source/core/html/HTMLFrameOwnerElement.cpp
|
| index 20774db3cc50b436864598b568014e034aa8c0d2..b5bc211f1161d5d34b8a22554825ffd0db4f320a 100644
|
| --- a/Source/core/html/HTMLFrameOwnerElement.cpp
|
| +++ b/Source/core/html/HTMLFrameOwnerElement.cpp
|
| @@ -89,8 +89,13 @@ void HTMLFrameOwnerElement::disconnectContentFrame()
|
|
|
| HTMLFrameOwnerElement::~HTMLFrameOwnerElement()
|
| {
|
| - if (m_contentFrame)
|
| + if (m_contentFrame) {
|
| + RenderObject* renderObject = renderer();
|
| + if (renderObject && renderObject->isWidget() && m_widget)
|
| + toRenderWidget(renderObject)->detachWidget(m_widget.get());
|
| +
|
| m_contentFrame->disconnectOwnerElement();
|
| + }
|
| }
|
|
|
| Document* HTMLFrameOwnerElement::contentDocument() const
|
| @@ -121,6 +126,27 @@ SVGDocument* HTMLFrameOwnerElement::getSVGDocument(ExceptionState& exceptionStat
|
| return 0;
|
| }
|
|
|
| +void HTMLFrameOwnerElement::setWidget(PassRefPtr<Widget> widget)
|
| +{
|
| + if (widget == m_widget)
|
| + return;
|
| +
|
| + RenderWidget* renderWidget = toRenderWidget(renderer());
|
| +
|
| + if (renderWidget)
|
| + renderWidget->detachWidget(m_widget.get());
|
| +
|
| + m_widget = widget;
|
| +
|
| + if (renderWidget)
|
| + renderWidget->attachWidget(m_widget.get());
|
| +}
|
| +
|
| +Widget* HTMLFrameOwnerElement::widget() const
|
| +{
|
| + return m_widget.get();
|
| +}
|
| +
|
| bool HTMLFrameOwnerElement::loadOrRedirectSubframe(const KURL& url, const AtomicString& frameName, bool lockBackForwardList)
|
| {
|
| RefPtr<Frame> parentFrame = document().frame();
|
| @@ -153,10 +179,9 @@ bool HTMLFrameOwnerElement::loadOrRedirectSubframe(const KURL& url, const Atomic
|
| // FIXME: Can we remove this entirely? m_isComplete normally gets set to false when a load is committed.
|
| childFrame->loader().started();
|
|
|
| - RenderObject* renderObject = renderer();
|
| FrameView* view = childFrame->view();
|
| - if (renderObject && renderObject->isWidget() && view)
|
| - toRenderWidget(renderObject)->setWidget(view);
|
| + if (view)
|
| + setWidget(view);
|
|
|
| // Some loads are performed synchronously (e.g., about:blank and loads
|
| // cancelled by returning a null ResourceRequest from requestFromDelegate).
|
|
|