Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
index 960bd1483826cb4ab9eb6983fa2f08140d4a4510..90574479069ec7ec4aac7639d9ba9f2424b14b97 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
@@ -374,6 +374,9 @@ void FrameLoader::clearProvisionalHistoryItem() |
void FrameLoader::setHistoryItemStateForCommit(FrameLoadType loadType, HistoryCommitType historyCommitType, HistoryNavigationType navigationType) |
{ |
+ if (m_frame->settings()->historyEntryRequiresUserGesture() && historyCommitType == StandardCommit) |
+ UserGestureIndicator::clearProcessedUserGestureSinceLoad(); |
+ |
HistoryItem* oldItem = m_currentItem; |
if (isBackForwardLoadType(loadType) && m_provisionalItem) |
m_currentItem = m_provisionalItem.release(); |
@@ -725,6 +728,8 @@ void FrameLoader::updateForSameDocumentNavigation(const KURL& newURL, SameDocume |
HistoryCommitType historyCommitType = loadTypeToCommitType(type); |
if (!m_currentItem) |
historyCommitType = HistoryInertCommit; |
+ if (m_frame->settings()->historyEntryRequiresUserGesture() && !UserGestureIndicator::processedUserGestureSinceLoad() && initiatingDocument) |
+ historyCommitType = HistoryInertCommit; |
setHistoryItemStateForCommit(type, historyCommitType, sameDocumentNavigationSource == SameDocumentNavigationHistoryApi ? HistoryNavigationType::HistoryApi : HistoryNavigationType::Fragment); |
if (sameDocumentNavigationSource == SameDocumentNavigationHistoryApi) { |
@@ -838,6 +843,10 @@ FrameLoadType FrameLoader::determineFrameLoadType(const FrameLoadRequest& reques |
if (request.substituteData().failingURL() == m_documentLoader->urlForHistory() && m_loadType == FrameLoadTypeReload) |
return FrameLoadTypeReload; |
+ |
+ if (m_frame->settings()->historyEntryRequiresUserGesture() && !UserGestureIndicator::processedUserGestureSinceLoad() && request.originDocument()) |
+ return FrameLoadTypeReplaceCurrentItem; |
+ |
return FrameLoadTypeStandard; |
} |