diff --git a/parser/html/nsHtml5SpeculativeLoad.cpp b/parser/html/nsHtml5SpeculativeLoad.cpp index 35c11b739d..7335979399 100644 --- a/parser/html/nsHtml5SpeculativeLoad.cpp +++ b/parser/html/nsHtml5SpeculativeLoad.cpp @@ -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); diff --git a/parser/html/nsHtml5SpeculativeLoad.h b/parser/html/nsHtml5SpeculativeLoad.h index 1f4a617416..0675c9ea56 100644 --- a/parser/html/nsHtml5SpeculativeLoad.h +++ b/parser/html/nsHtml5SpeculativeLoad.h @@ -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); } diff --git a/parser/html/nsHtml5TreeBuilderCppSupplement.h b/parser/html/nsHtml5TreeBuilderCppSupplement.h index a3a7e92155..12e1d21d18 100644 --- a/parser/html/nsHtml5TreeBuilderCppSupplement.h +++ b/parser/html/nsHtml5TreeBuilderCppSupplement.h @@ -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; diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp index 33fb3d0c7d..9dcc3be441 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp @@ -939,14 +939,23 @@ void nsHtml5TreeOpExecutor::PreloadStyle(const nsAString& aURL, const nsAString& aCharset, const nsAString& aCrossOrigin, + const nsAString& aReferrerPolicy, const nsAString& aIntegrity) { nsCOMPtr 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 diff --git a/parser/html/nsHtml5TreeOpExecutor.h b/parser/html/nsHtml5TreeOpExecutor.h index 878f359c55..582c375416 100644 --- a/parser/html/nsHtml5TreeOpExecutor.h +++ b/parser/html/nsHtml5TreeOpExecutor.h @@ -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,