REGRESSION(r106388): Form state is restored to a wrong document.
https://bugs.webkit.org/show_bug.cgi?id=79206
Reviewed by Brady Eidson.
Source/WebCore:
In some cases, the URL of the current HistoryItem and the document
URL are mismatched.
A form state should be restored only if the document was loaded
with a HistoryItem and the document is not loaded as a
redirection.
Test: fast/loader/form-state-restore-with-locked-back-forward-list.html
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::checkCompleted): Clear m_requestedHistoryItem.
(WebCore::FrameLoader::loadItem):
Save the requested HistoryItem for didLoadWithLodItem().
* loader/FrameLoader.h:
(WebCore::FrameLoader::requestedHistoryItem):
Added. Accessor for m_requestedHistoryItem.
* loader/HistoryController.cpp:
(WebCore::HistoryController::restoreDocumentState):
Restore a form state only if the current document was loaded with
FrameLoader::loadItem() and not redirection.
LayoutTests:
* fast/loader/form-state-restore-with-locked-back-forward-list-expected.txt: Added.
* fast/loader/form-state-restore-with-locked-back-forward-list.html: Added.
* fast/loader/resources/form-state-restore-with-locked-back-forward-list-2.html: Added.
* fast/loader/resources/form-state-restore-with-locked-back-forward-list-3.html: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@109480 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/loader/FrameLoader.h b/Source/WebCore/loader/FrameLoader.h
index 218028c..df357d6 100644
--- a/Source/WebCore/loader/FrameLoader.h
+++ b/Source/WebCore/loader/FrameLoader.h
@@ -119,6 +119,7 @@
void open(CachedFrameBase&);
void loadItem(HistoryItem*, FrameLoadType);
+ HistoryItem* requestedHistoryItem() const { return m_requestedHistoryItem.get(); }
static void reportLocalLoadFailed(Frame*, const String& url);
@@ -437,6 +438,7 @@
#endif
KURL m_previousUrl;
+ RefPtr<HistoryItem> m_requestedHistoryItem;
};
// This function is called by createWindow() in JSDOMWindowBase.cpp, for example, for