Index: Source/core/loader/FrameLoader.cpp |
diff --git a/Source/core/loader/FrameLoader.cpp b/Source/core/loader/FrameLoader.cpp |
index 751c2742e1f088b0eb8ff9f77d2dbb4d7414bc26..fbe3e888ed72877ffd5bf67ce9c7f18107e8f715 100644 |
--- a/Source/core/loader/FrameLoader.cpp |
+++ b/Source/core/loader/FrameLoader.cpp |
@@ -191,6 +191,9 @@ void FrameLoader::saveScrollState() |
if (needsHistoryItemRestore(m_loadType) && !m_frame->view()->wasScrolledByUser()) |
return; |
+ if (m_currentItem->isCreatedByHistoryAPI()) |
+ return; |
+ |
m_currentItem->setScrollPoint(m_frame->view()->scrollPosition()); |
if (m_frame->settings()->pinchVirtualViewportEnabled()) |
@@ -312,8 +315,10 @@ void FrameLoader::setHistoryItemStateForCommit(HistoryCommitType historyCommitTy |
m_currentItem->setURL(m_documentLoader->urlForHistory()); |
m_currentItem->setDocumentState(m_frame->document()->formElementsState()); |
m_currentItem->setTarget(m_frame->tree().uniqueName()); |
- if (isPushOrReplaceState) |
+ if (isPushOrReplaceState) { |
+ m_currentItem->setIsCreatedByHistoryAPI(true); |
m_currentItem->setStateObject(stateObject); |
+ } |
m_currentItem->setReferrer(SecurityPolicy::generateReferrer(m_documentLoader->request().referrerPolicy(), m_currentItem->url(), m_documentLoader->request().httpReferrer())); |
m_currentItem->setFormInfoFromRequest(m_documentLoader->request()); |
} |
@@ -1007,6 +1012,9 @@ void FrameLoader::restoreScrollPositionAndViewState() |
if (!needsHistoryItemRestore(m_loadType)) |
return; |
+ if (m_currentItem->isCreatedByHistoryAPI()) |
+ return; |
+ |
// This tries to balance 1. restoring as soon as possible, 2. detecting |
// clamping to avoid repeatedly popping the scroll position down as the |
// page height increases, 3. ignore clamp detection after load completes |