Index: Source/web/WebFrame.cpp |
diff --git a/Source/web/WebFrame.cpp b/Source/web/WebFrame.cpp |
index 9371cffe9ecd4b93bc45e5e75c0a583046667ea3..3ea39a30aaec41bfac9b2ce26ca073a0aed4fb3c 100644 |
--- a/Source/web/WebFrame.cpp |
+++ b/Source/web/WebFrame.cpp |
@@ -7,8 +7,10 @@ |
#include "core/frame/FrameHost.h" |
#include "core/frame/FrameView.h" |
+#include "core/frame/LocalFrame.h" |
#include "core/frame/RemoteFrame.h" |
#include "core/html/HTMLFrameOwnerElement.h" |
+#include "core/page/Page.h" |
#include "platform/UserGestureIndicator.h" |
#include "platform/heap/Handle.h" |
#include "web/OpenedFrameTracker.h" |
@@ -81,16 +83,16 @@ bool WebFrame::swap(WebFrame* frame) |
// increments of connected subframes. |
FrameOwner* owner = oldFrame->owner(); |
oldFrame->disconnectOwnerElement(); |
- if (Frame* newFrame = toCoreFrame(frame)) { |
- ASSERT(owner == newFrame->owner()); |
- if (owner->isLocal()) { |
+ if (frame->isWebLocalFrame()) { |
+ LocalFrame& localFrame = *toWebLocalFrameImpl(frame)->frame(); |
+ ASSERT(owner == localFrame.owner()); |
+ if (owner && owner->isLocal()) { |
HTMLFrameOwnerElement* ownerElement = toHTMLFrameOwnerElement(owner); |
- ownerElement->setContentFrame(*newFrame); |
- if (newFrame->isLocalFrame()) |
- ownerElement->setWidget(toLocalFrame(newFrame)->view()); |
+ ownerElement->setContentFrame(localFrame); |
+ ownerElement->setWidget(localFrame.view()); |
+ } else { |
+ localFrame.page()->setMainFrame(&localFrame); |
} |
- } else if (frame->isWebLocalFrame()) { |
- toWebLocalFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name(), nullAtom); |
} else { |
toWebRemoteFrameImpl(frame)->initializeCoreFrame(oldFrame->host(), owner, oldFrame->tree().name()); |
} |