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); mIsAsync, mIsDefer, true);
break; break;
case eSpeculativeLoadStyle: case eSpeculativeLoadStyle:
aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mIntegrity); aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mReferrerPolicy,
mIntegrity);
break; break;
case eSpeculativeLoadManifest: case eSpeculativeLoadManifest:
aExecutor->ProcessOfflineManifest(mUrl); aExecutor->ProcessOfflineManifest(mUrl);

View file

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

View file

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

View file

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

View file

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