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,