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