import from custom branch of UXP: ported from mozilla: Bug 1460920 - Part 1 - Speculative loading script should take referrerpolicy attribute in script element into account r=hsivonen (045f98957a) (281e3f4d)

This commit is contained in:
2024-10-01 23:41:20 +08:00
parent 604e018f83
commit 58030fb217
5 changed files with 67 additions and 29 deletions
+29 -24
View File
@@ -917,12 +917,23 @@ nsHtml5TreeOpExecutor::ShouldPreloadURI(nsIURI *aURI)
return true;
}
net::ReferrerPolicy
nsHtml5TreeOpExecutor::GetPreloadReferrerPolicy(
const nsAString& aReferrerPolicy)
{
net::ReferrerPolicy referrerPolicy =
net::AttributeReferrerPolicyFromString(aReferrerPolicy);
return referrerPolicy != net::RP_Unset ? referrerPolicy :
mSpeculationReferrerPolicy;
}
void
nsHtml5TreeOpExecutor::PreloadScript(const nsAString& aURL,
const nsAString& aCharset,
const nsAString& aType,
const nsAString& aCrossOrigin,
const nsAString& aIntegrity,
net::ReferrerPolicy aReferrerPolicy,
bool aScriptFromHead,
bool aAsync,
bool aDefer,
@@ -932,10 +943,19 @@ nsHtml5TreeOpExecutor::PreloadScript(const nsAString& aURL,
if (!uri) {
return;
}
mDocument->ScriptLoader()->PreloadURI(uri, aCharset, aType, aCrossOrigin,
aIntegrity, aScriptFromHead, aAsync,
aDefer, aNoModule,
mSpeculationReferrerPolicy);
net::ReferrerPolicy referrerPolicy = aReferrerPolicy != net::RP_Unset ?
aReferrerPolicy : mSpeculationReferrerPolicy;
mDocument->ScriptLoader()
->PreloadURI(uri,
aCharset,
aType,
aCrossOrigin,
aIntegrity,
aScriptFromHead,
aAsync,
aDefer,
aNoModule,
referrerPolicy);
}
void
@@ -950,14 +970,7 @@ nsHtml5TreeOpExecutor::PreloadStyle(const nsAString& aURL,
return;
}
mozilla::net::ReferrerPolicy referrerPolicy = mSpeculationReferrerPolicy;
mozilla::net::ReferrerPolicy styleReferrerPolicy =
mozilla::net::AttributeReferrerPolicyFromString(aReferrerPolicy);
if (styleReferrerPolicy != mozilla::net::RP_Unset) {
referrerPolicy = styleReferrerPolicy;
}
mDocument->PreloadStyle(uri, aCharset, aCrossOrigin, referrerPolicy,
mDocument->PreloadStyle(uri, aCharset, aCrossOrigin, GetPreloadReferrerPolicy(aReferrerPolicy),
aIntegrity);
}
@@ -974,18 +987,10 @@ nsHtml5TreeOpExecutor::PreloadImage(const nsAString& aURL,
aSizes, &isImgSet);
if (uri && ShouldPreloadURI(uri)) {
// use document wide referrer policy
mozilla::net::ReferrerPolicy referrerPolicy = mSpeculationReferrerPolicy;
// if enabled in preferences, use the referrer attribute from the image, if provided
bool referrerAttributeEnabled = Preferences::GetBool("network.http.enablePerElementReferrer", true);
if (referrerAttributeEnabled) {
mozilla::net::ReferrerPolicy imageReferrerPolicy =
mozilla::net::AttributeReferrerPolicyFromString(aImageReferrerPolicy);
if (imageReferrerPolicy != mozilla::net::RP_Unset) {
referrerPolicy = imageReferrerPolicy;
}
}
mDocument->MaybePreLoadImage(uri, aCrossOrigin, referrerPolicy, isImgSet);
mDocument->MaybePreLoadImage(uri,
aCrossOrigin,
GetPreloadReferrerPolicy(aImageReferrerPolicy),
isImgSet);
}
}