tor-browser

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

commit 15bece78c5e18aa98691c3b36c03d62ee75bb42f
parent 83beb3d15379b729a601198cf51cf18d9dc7bc9b
Author: Tooru Fujisawa <arai_a@mac.com>
Date:   Wed, 19 Nov 2025 01:45:54 +0000

Bug 1999649 - Part 1: Reflect ReferrerPolicy to the ScriptHashKey. r=bthrall

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

Diffstat:
Mdom/script/ScriptLoader.cpp | 6+++---
Mdom/script/SharedScriptCache.cpp | 11+++++++++--
Mdom/script/SharedScriptCache.h | 4++++
3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp @@ -1183,7 +1183,7 @@ void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy, // which constructs LoadedScript. // aRequest->FetchOptions() and aRequest->URI() are backed by // LoadedScript, and we cannot use them here. - ScriptHashKey key(this, aRequest, aFetchOptions, aURI); + ScriptHashKey key(this, aRequest, aReferrerPolicy, aFetchOptions, aURI); auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true); if (cacheResult.mState != CachedSubResourceState::Complete) { aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions, aURI); @@ -4104,8 +4104,8 @@ nsresult ScriptLoader::OnStreamComplete( if (aRequest->HasDirtyCache()) { // This request found a dirty cache. // Validate the cache with the response's cache ID. - ScriptHashKey key(this, aRequest, aRequest->FetchOptions(), - aRequest->URI()); + ScriptHashKey key(this, aRequest, aRequest->ReferrerPolicy(), + aRequest->FetchOptions(), aRequest->URI()); auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true); if (cacheResult.mState == CachedSubResourceState::Complete && cacheResult.mCompleteValue->CacheEntryId() == id) { diff --git a/dom/script/SharedScriptCache.cpp b/dom/script/SharedScriptCache.cpp @@ -24,12 +24,14 @@ namespace mozilla::dom { ScriptHashKey::ScriptHashKey( ScriptLoader* aLoader, const JS::loader::ScriptLoadRequest* aRequest, + mozilla::dom::ReferrerPolicy aReferrerPolicy, const JS::loader::ScriptFetchOptions* aFetchOptions, const nsCOMPtr<nsIURI> aURI) : PLDHashEntryHdr(), mKind(aRequest->mKind), mCORSMode(aFetchOptions->mCORSMode), mIsLinkRelPreload(aRequest->GetScriptLoadContext()->IsPreload()), + mReferrerPolicy(aReferrerPolicy), mURI(aURI), mLoaderPrincipal(aLoader->LoaderPrincipal()), mPartitionPrincipal(aLoader->PartitionedPrincipal()), @@ -47,8 +49,9 @@ ScriptHashKey::ScriptHashKey( ScriptHashKey::ScriptHashKey(ScriptLoader* aLoader, const JS::loader::ScriptLoadRequest* aRequest, const JS::loader::LoadedScript* aLoadedScript) - : ScriptHashKey(aLoader, aRequest, aLoadedScript->GetFetchOptions(), - aLoadedScript->GetURI()) {} + : ScriptHashKey(aLoader, aRequest, aLoadedScript->ReferrerPolicy(), + aLoadedScript->GetFetchOptions(), aLoadedScript->GetURI()) { +} ScriptHashKey::ScriptHashKey(const ScriptLoadData& aLoadData) : ScriptHashKey(aLoadData.CacheKey()) {} @@ -58,6 +61,10 @@ bool ScriptHashKey::KeyEquals(const ScriptHashKey& aKey) const { return false; } + if (mReferrerPolicy != aKey.mReferrerPolicy) { + return false; + } + { bool eq; if (NS_FAILED(mURI->Equals(aKey.mURI, &eq)) || !eq) { diff --git a/dom/script/SharedScriptCache.h b/dom/script/SharedScriptCache.h @@ -42,6 +42,7 @@ class ScriptHashKey : public PLDHashEntryHdr { mKind(aKey.mKind), mCORSMode(aKey.mCORSMode), mIsLinkRelPreload(aKey.mIsLinkRelPreload), + mReferrerPolicy(aKey.mReferrerPolicy), mURI(aKey.mURI), mLoaderPrincipal(aKey.mLoaderPrincipal), mPartitionPrincipal(aKey.mPartitionPrincipal), @@ -58,6 +59,7 @@ class ScriptHashKey : public PLDHashEntryHdr { mKind(std::move(aKey.mKind)), mCORSMode(std::move(aKey.mCORSMode)), mIsLinkRelPreload(std::move(aKey.mIsLinkRelPreload)), + mReferrerPolicy(std::move(aKey.mReferrerPolicy)), mURI(std::move(aKey.mURI)), mLoaderPrincipal(std::move(aKey.mLoaderPrincipal)), mPartitionPrincipal(std::move(aKey.mPartitionPrincipal)), @@ -72,6 +74,7 @@ class ScriptHashKey : public PLDHashEntryHdr { const JS::loader::LoadedScript* aLoadedScript); ScriptHashKey(ScriptLoader* aLoader, const JS::loader::ScriptLoadRequest* aRequest, + mozilla::dom::ReferrerPolicy aReferrerPolicy, const JS::loader::ScriptFetchOptions* aFetchOptions, const nsCOMPtr<nsIURI> aURI); explicit ScriptHashKey(const ScriptLoadData& aLoadData); @@ -103,6 +106,7 @@ class ScriptHashKey : public PLDHashEntryHdr { const JS::loader::ScriptKind mKind; const CORSMode mCORSMode; const bool mIsLinkRelPreload; + const mozilla::dom::ReferrerPolicy mReferrerPolicy; const nsCOMPtr<nsIURI> mURI; const nsCOMPtr<nsIPrincipal> mLoaderPrincipal;