ported from mozilla: Bug 1384493 - Speculative loading style should use correct referrer policy. r=wchen (19a77f8441)

This commit is contained in:
roytam1 2024-10-01 11:06:51 +08:00
commit b694e41119
5 changed files with 25 additions and 6 deletions

View file

@ -70,7 +70,8 @@ nsHtml5SpeculativeLoad::Perform(nsHtml5TreeOpExecutor* aExecutor)
mIsAsync, mIsDefer, true);
break;
case eSpeculativeLoadStyle:
aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mIntegrity);
aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mReferrerPolicy,
mIntegrity);
break;
case eSpeculativeLoadManifest:
aExecutor->ProcessOfflineManifest(mUrl);

View file

@ -157,6 +157,7 @@ class nsHtml5SpeculativeLoad {
inline void InitStyle(nsHtml5String aUrl,
nsHtml5String aCharset,
nsHtml5String aCrossOrigin,
nsHtml5String aReferrerPolicy,
nsHtml5String aIntegrity)
{
NS_PRECONDITION(mOpCode == eSpeculativeLoadUninitialized,
@ -165,6 +166,7 @@ class nsHtml5SpeculativeLoad {
aUrl.ToString(mUrl);
aCharset.ToString(mCharset);
aCrossOrigin.ToString(mCrossOrigin);
aReferrerPolicy.ToString(mReferrerPolicy);
aIntegrity.ToString(mIntegrity);
}

View file

@ -218,8 +218,10 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace,
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
nsHtml5String referrerPolicy =
aAttributes->getValue(nsHtml5AttributeName::ATTR_REFERRERPOLICY);
mSpeculativeLoadQueue.AppendElement()->InitStyle(
url, charset, crossOrigin, integrity);
url, charset, crossOrigin, referrerPolicy, integrity);
}
} else if (rel.LowerCaseEqualsASCII("preconnect")) {
nsHtml5String url =
@ -263,8 +265,10 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace,
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
nsHtml5String referrerPolicy =
aAttributes->getValue(nsHtml5AttributeName::ATTR_REFERRERPOLICY);
mSpeculativeLoadQueue.AppendElement()->InitStyle(
url, charset, crossOrigin, integrity);
url, charset, crossOrigin, referrerPolicy, integrity);
} else if (preloadAs.LowerCaseEqualsASCII("image")) {
nsHtml5String srcset =
aAttributes->getValue(nsHtml5AttributeName::ATTR_SRCSET);
@ -368,8 +372,10 @@ nsHtml5TreeBuilder::createElement(int32_t aNamespace,
aAttributes->getValue(nsHtml5AttributeName::ATTR_CROSSORIGIN);
nsHtml5String integrity =
aAttributes->getValue(nsHtml5AttributeName::ATTR_INTEGRITY);
nsHtml5String referrerPolicy =
aAttributes->getValue(nsHtml5AttributeName::ATTR_REFERRERPOLICY);
mSpeculativeLoadQueue.AppendElement()->InitStyle(
url, nullptr, crossOrigin, integrity);
url, nullptr, crossOrigin, referrerPolicy, integrity);
}
}
break;

View file

@ -939,14 +939,23 @@ void
nsHtml5TreeOpExecutor::PreloadStyle(const nsAString& aURL,
const nsAString& aCharset,
const nsAString& aCrossOrigin,
const nsAString& aReferrerPolicy,
const nsAString& aIntegrity)
{
nsCOMPtr<nsIURI> uri = ConvertIfNotPreloadedYet(aURL);
if (!uri) {
return;
}
mDocument->PreloadStyle(uri, aCharset, aCrossOrigin,
mSpeculationReferrerPolicy, aIntegrity);
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,
aIntegrity);
}
void

View file

@ -256,6 +256,7 @@ class nsHtml5TreeOpExecutor final : public nsHtml5DocumentBuilder,
void PreloadStyle(const nsAString& aURL, const nsAString& aCharset,
const nsAString& aCrossOrigin,
const nsAString& aReferrerPolicy,
const nsAString& aIntegrity);
void PreloadImage(const nsAString& aURL,