commit 851bdfa462e005b31daf3a0362c177223acc648c
parent 3b2e6d4c9496baf70224198b3317715de6dbc721
Author: Andreas Farre <farre@mozilla.com>
Date: Thu, 18 Dec 2025 07:52:37 +0000
Bug 2005571 - Make sure to always set mTriggeringNavigationType. r=smaug,avandolder
Differential Revision: https://phabricator.services.mozilla.com/D276030
Diffstat:
3 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/docshell/base/CanonicalBrowsingContext.cpp b/docshell/base/CanonicalBrowsingContext.cpp
@@ -682,7 +682,11 @@ CanonicalBrowsingContext::CreateLoadingSessionHistoryEntryForLoad(
.map([](auto& entry) { return &entry; })
.valueOr(nullptr)));
- loadingInfo->mTriggeringNavigationType = navigationType;
+ if (!existingLoadingInfo ||
+ !existingLoadingInfo->mTriggeringNavigationType) {
+ loadingInfo->mTriggeringNavigationType = navigationType;
+ }
+
MOZ_LOG_FMT(gNavigationAPILog, LogLevel::Verbose,
"Triggering navigation type was {}.", *navigationType);
@@ -790,11 +794,13 @@ void CanonicalBrowsingContext::GetContiguousEntriesForLoad(
targetURI, uri, false, false));
if (aEntry->isInList() ||
(mActiveEntry && mActiveEntry->isInList() && sameOrigin)) {
+ MOZ_DIAGNOSTIC_ASSERT(aLoadingInfo.mTriggeringNavigationType);
+ NavigationType navigationType =
+ aLoadingInfo.mTriggeringNavigationType.valueOr(NavigationType::Push);
nsSHistory::WalkContiguousEntriesInOrder(
aEntry->isInList() ? aEntry : mActiveEntry,
[activeEntry = mActiveEntry, entries = &aLoadingInfo.mContiguousEntries,
- navigationType =
- *aLoadingInfo.mTriggeringNavigationType](auto* aEntry) {
+ navigationType](auto* aEntry) {
nsCOMPtr<SessionHistoryEntry> entry = do_QueryObject(aEntry);
MOZ_ASSERT(entry);
if (navigationType == NavigationType::Replace &&
@@ -1395,12 +1401,13 @@ void CanonicalBrowsingContext::SessionHistoryCommit(
}
already_AddRefed<nsDocShellLoadState> CanonicalBrowsingContext::CreateLoadInfo(
- SessionHistoryEntry* aEntry) {
+ SessionHistoryEntry* aEntry, NavigationType aNavigationType) {
const SessionHistoryInfo& info = aEntry->Info();
RefPtr<nsDocShellLoadState> loadState(new nsDocShellLoadState(info.GetURI()));
info.FillLoadInfo(*loadState);
UniquePtr<LoadingSessionHistoryInfo> loadingInfo;
loadingInfo = MakeUnique<LoadingSessionHistoryInfo>(aEntry);
+ loadingInfo->mTriggeringNavigationType = Some(aNavigationType);
mLoadingEntries.AppendElement(
LoadingSessionHistoryEntry{loadingInfo->mLoadId, aEntry});
loadState->SetLoadingSessionHistoryInfo(std::move(loadingInfo));
@@ -1424,7 +1431,8 @@ void CanonicalBrowsingContext::NotifyOnHistoryReload(
}
if (mActiveEntry) {
- aLoadState.emplace(WrapMovingNotNull(RefPtr{CreateLoadInfo(mActiveEntry)}));
+ aLoadState.emplace(WrapMovingNotNull(
+ RefPtr{CreateLoadInfo(mActiveEntry, NavigationType::Reload)}));
aReloadActiveEntry.emplace(true);
if (aForceReload) {
shistory->RemoveFrameEntries(mActiveEntry);
@@ -1433,8 +1441,8 @@ void CanonicalBrowsingContext::NotifyOnHistoryReload(
const LoadingSessionHistoryEntry& loadingEntry =
mLoadingEntries.LastElement();
uint64_t loadId = loadingEntry.mLoadId;
- aLoadState.emplace(
- WrapMovingNotNull(RefPtr{CreateLoadInfo(loadingEntry.mEntry)}));
+ aLoadState.emplace(WrapMovingNotNull(
+ RefPtr{CreateLoadInfo(loadingEntry.mEntry, NavigationType::Reload)}));
aReloadActiveEntry.emplace(false);
if (aForceReload) {
SessionHistoryEntry::LoadingEntry* entry =
diff --git a/docshell/base/CanonicalBrowsingContext.h b/docshell/base/CanonicalBrowsingContext.h
@@ -598,7 +598,7 @@ class CanonicalBrowsingContext final : public BrowsingContext {
}
already_AddRefed<nsDocShellLoadState> CreateLoadInfo(
- SessionHistoryEntry* aEntry);
+ SessionHistoryEntry* aEntry, NavigationType aNavigationType);
void GetContiguousEntriesForLoad(LoadingSessionHistoryInfo& aLoadingInfo,
const RefPtr<SessionHistoryEntry>& aEntry);
diff --git a/docshell/base/nsDocShellLoadState.cpp b/docshell/base/nsDocShellLoadState.cpp
@@ -782,6 +782,9 @@ void nsDocShellLoadState::SetSHEntry(nsISHEntry* aSHEntry) {
nsCOMPtr<SessionHistoryEntry> she = do_QueryInterface(aSHEntry);
if (she) {
mLoadingSessionHistoryInfo = MakeUnique<LoadingSessionHistoryInfo>(she);
+ mLoadingSessionHistoryInfo->mTriggeringNavigationType =
+ NavigationUtils::NavigationTypeFromLoadType(LoadType());
+ MOZ_ASSERT(mLoadingSessionHistoryInfo->mTriggeringNavigationType);
} else {
mLoadingSessionHistoryInfo = nullptr;
}