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:
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;