Index: Source/web/WebFrame.cpp |
diff --git a/Source/web/WebFrame.cpp b/Source/web/WebFrame.cpp |
index d5498208d7dba748d3c4232433bc605c5315dd42..e5eb22bacb679fc1c1f139ebd6ea93b9d47fc6bf 100644 |
--- a/Source/web/WebFrame.cpp |
+++ b/Source/web/WebFrame.cpp |
@@ -42,10 +42,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; |
@@ -79,7 +75,11 @@ bool WebFrame::swap(WebFrame* frame) |
// increments of connected subframes. |
FrameOwner* owner = oldFrame->owner(); |
oldFrame->disconnectOwnerElement(); |
- if (frame->isWebLocalFrame()) { |
+ if (toCoreFrame(frame)) { |
+ ASSERT(owner == toCoreFrame(frame)->owner()); |
+ if (owner->isLocal()) |
+ toHTMLFrameOwnerElement(owner)->setContentFrame(*toCoreFrame(frame)); |
+ } else if (frame->isWebLocalFrame()) { |
toWebLocalFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name(), nullAtom); |
} else { |
toWebRemoteFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name()); |
@@ -146,6 +146,11 @@ void WebFrame::removeChild(WebFrame* child) |
toCoreFrame(this)->host()->decrementSubframeCount(); |
} |
+void WebFrame::setParent(WebFrame* parent) |
+{ |
+ m_parent = parent; |
+} |
+ |
WebFrame* WebFrame::parent() const |
{ |
return m_parent; |