Skip to content

Commit

Permalink
Make window.open understand seamless navigation.
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Barth authored and eseidel committed Apr 12, 2012
1 parent df0e71f commit a0d8b7d
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
FAIL frames[0].document.body.textContent should be DONE
. Was Waiting...


.
PASS frames[0].document.body.textContent is "DONE\n"

2 changes: 1 addition & 1 deletion Source/WebCore/WebCore.exp.in
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ __ZN7WebCore11FrameLoader16detachFromParentEv
__ZN7WebCore11FrameLoader16loadFrameRequestERKNS_16FrameLoadRequestEbbN3WTF10PassRefPtrINS_5EventEEENS5_INS_9FormStateEEENS_18ShouldSendReferrerE
__ZN7WebCore11FrameLoader17stopForUserCancelEb
__ZN7WebCore11FrameLoader21loadURLIntoChildFrameERKNS_4KURLERKN3WTF6StringEPNS_5FrameE
__ZN7WebCore11FrameLoader22findFrameForNavigationERKN3WTF12AtomicStringE
__ZN7WebCore11FrameLoader22findFrameForNavigationERKN3WTF12AtomicStringEPNS_8DocumentE
__ZN7WebCore11FrameLoader23timeOfLastCompletedLoadEv
__ZN7WebCore11FrameLoader26reloadWithOverrideEncodingERKN3WTF6StringE
__ZN7WebCore11FrameLoader32setOriginalURLForDownloadRequestERNS_15ResourceRequestE
Expand Down
19 changes: 11 additions & 8 deletions Source/WebCore/loader/FrameLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2995,7 +2995,7 @@ static bool isDisplayingSeamlesslyWithParent(Frame* frame)
return owner && owner->hasTagName(iframeTag) && static_cast<HTMLIFrameElement*>(owner)->shouldDisplaySeamlessly();
}

Frame* FrameLoader::findFrameForNavigation(const AtomicString& name)
Frame* FrameLoader::findFrameForNavigation(const AtomicString& name, Document* activeDocument)
{
Frame* frame = m_frame->tree()->find(name);

Expand All @@ -3018,11 +3018,15 @@ Frame* FrameLoader::findFrameForNavigation(const AtomicString& name)
ASSERT(frame != m_frame);
}

// FIXME: We should be calling canNavigate on the Document that's requesting
// the navigation, not based on the document that happens to be displayed in
// this Frame.
if (!m_frame->document()->canNavigate(frame))
return 0;
if (activeDocument) {
if (!activeDocument->canNavigate(frame))
return 0;
} else {
// FIXME: Eventually all callers should supply the actual activeDocument
// so we can call canNavigate with the right document.
if (!m_frame->document()->canNavigate(frame))
return 0;
}
return frame;
}

Expand Down Expand Up @@ -3274,8 +3278,7 @@ Frame* createWindow(Frame* openerFrame, Frame* lookupFrame, const FrameLoadReque
ASSERT(!features.dialog || request.frameName().isEmpty());

if (!request.frameName().isEmpty() && request.frameName() != "_blank") {
Frame* frame = lookupFrame->tree()->find(request.frameName());
if (frame && openerFrame->document()->canNavigate(frame)) {
if (Frame* frame = lookupFrame->loader()->findFrameForNavigation(request.frameName(), openerFrame->document())) {
if (Page* page = frame->page())
page->chrome()->focus();
created = false;
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/loader/FrameLoader.h
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ class FrameLoader {

FrameLoaderStateMachine* stateMachine() const { return &m_stateMachine; }

Frame* findFrameForNavigation(const AtomicString& name);
Frame* findFrameForNavigation(const AtomicString& name, Document* activeDocument = 0);

void applyUserAgent(ResourceRequest&);

Expand Down

0 comments on commit a0d8b7d

Please sign in to comment.