2009-03-30 Darin Adler <darin@apple.com>
Reviewed by Adam Roben.
Bug 24916: REGRESSION: NavigationAction policy dispatch broken
https://bugs.webkit.org/show_bug.cgi?id=24916
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::loadURL): Rearrange the code so that the "event" PassRefPtr
is not used twice. This also optimizes the case where a frame name is specified,
but it's the name of the frame being loaded. Also called release in all the final
uses of FormState.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@42108 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/loader/FrameLoader.cpp b/WebCore/loader/FrameLoader.cpp
index 3240b9d..c943d98 100644
--- a/WebCore/loader/FrameLoader.cpp
+++ b/WebCore/loader/FrameLoader.cpp
@@ -2208,13 +2208,16 @@
ASSERT(newLoadType != FrameLoadTypeSame);
+ Frame* targetFrame = findFrameForNavigation(frameName);
+ if (targetFrame && targetFrame != m_frame) {
+ targetFrame->loader()->loadURL(newURL, referrer, String(), lockHistory, newLoadType, event, formState.release());
+ return;
+ }
+
NavigationAction action(newURL, newLoadType, isFormSubmission, event);
- if (!frameName.isEmpty()) {
- if (Frame* targetFrame = findFrameForNavigation(frameName))
- targetFrame->loader()->loadURL(newURL, referrer, String(), lockHistory, newLoadType, event, formState);
- else
- checkNewWindowPolicy(action, request, formState, frameName);
+ if (!targetFrame && !frameName.isEmpty()) {
+ checkNewWindowPolicy(action, request, formState.release(), frameName);
return;
}
@@ -2228,12 +2231,12 @@
if (shouldScrollToAnchor(isFormSubmission, newLoadType, newURL)) {
oldDocumentLoader->setTriggeringAction(action);
stopPolicyCheck();
- checkNavigationPolicy(request, oldDocumentLoader.get(), formState,
+ checkNavigationPolicy(request, oldDocumentLoader.get(), formState.release(),
callContinueFragmentScrollAfterNavigationPolicy, this);
} else {
// must grab this now, since this load may stop the previous load and clear this flag
bool isRedirect = m_quickRedirectComing;
- loadWithNavigationAction(request, action, lockHistory, newLoadType, formState);
+ loadWithNavigationAction(request, action, lockHistory, newLoadType, formState.release());
if (isRedirect) {
m_quickRedirectComing = false;
if (m_provisionalDocumentLoader)