tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit c0d9d01c327c8e9098961e0a5eacf19601f96671
parent 18b0d05db441fd56ec63739a6aeba51f441437f3
Author: Andreas Farre <farre@mozilla.com>
Date:   Wed, 17 Dec 2025 15:38:25 +0000

Bug 2005571 - Make sure to always set mTriggeringNavigationType. r=smaug,avandolder

Differential Revision: https://phabricator.services.mozilla.com/D276030

Diffstat:
Mdocshell/base/CanonicalBrowsingContext.cpp | 21++++++++++++++-------
Mdocshell/base/CanonicalBrowsingContext.h | 2+-
Mdocshell/base/nsDocShellLoadState.cpp | 3+++
3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/docshell/base/CanonicalBrowsingContext.cpp b/docshell/base/CanonicalBrowsingContext.cpp @@ -682,7 +682,10 @@ CanonicalBrowsingContext::CreateLoadingSessionHistoryEntryForLoad( .map([](auto& entry) { return &entry; }) .valueOr(nullptr))); - loadingInfo->mTriggeringNavigationType = navigationType; + if (!existingLoadingInfo) { + loadingInfo->mTriggeringNavigationType = navigationType; + } + MOZ_LOG_FMT(gNavigationAPILog, LogLevel::Verbose, "Triggering navigation type was {}.", *navigationType); @@ -790,11 +793,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 +1400,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 +1430,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 +1440,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; }