| Index: Source/web/WebFrame.cpp
|
| diff --git a/Source/web/WebFrame.cpp b/Source/web/WebFrame.cpp
|
| index c11f2e11122518e8ec0030f07e42c33a4bc5db89..112978a8d26b922d067355bf4d12e215e7dd8b54 100644
|
| --- a/Source/web/WebFrame.cpp
|
| +++ b/Source/web/WebFrame.cpp
|
| @@ -41,10 +41,6 @@ bool WebFrame::swap(WebFrame* frame)
|
| if (!oldFrame->host())
|
| return false;
|
|
|
| - // The frame being swapped in should not have a Frame associated
|
| - // with it yet.
|
| - ASSERT(!toCoreFrame(frame));
|
| -
|
| if (m_parent) {
|
| if (m_parent->m_firstChild == this)
|
| m_parent->m_firstChild = frame;
|
| @@ -78,7 +74,13 @@ bool WebFrame::swap(WebFrame* frame)
|
| // increments of connected subframes.
|
| FrameOwner* owner = oldFrame->owner();
|
| oldFrame->disconnectOwnerElement();
|
| - if (frame->isWebLocalFrame()) {
|
| + if (toCoreFrame(frame)) {
|
| + FrameOwner* oldOwner = toCoreFrame(frame)->owner();
|
| + toCoreFrame(frame)->setOwner(owner);
|
| + if (owner->isLocal())
|
| + toHTMLFrameOwnerElement(owner)->setContentFrame(*toCoreFrame(frame));
|
| + delete oldOwner;
|
| + } else if (frame->isWebLocalFrame()) {
|
| toWebLocalFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name(), nullAtom);
|
| } else {
|
| toWebRemoteFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name());
|
| @@ -143,6 +145,11 @@ void WebFrame::removeChild(WebFrame* child)
|
| toCoreFrame(this)->tree().invalidateScopedChildCount();
|
| }
|
|
|
| +void WebFrame::setParent(WebFrame* parent)
|
| +{
|
| + m_parent = parent;
|
| +}
|
| +
|
| WebFrame* WebFrame::parent() const
|
| {
|
| return m_parent;
|
|
|