diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index e6cf0916c5c7..f84b11f96c93 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -2653,23 +2653,12 @@ nsDocument::ApplySettingsFromCSP(bool aSpeculative) } // 2) apply settings from speculative csp - nsCOMPtr preloadCsp; - rv = NodePrincipal()->GetPreloadCsp(getter_AddRefs(preloadCsp)); - if (preloadCsp) { - // Set up any Referrer Policy specified by CSP - bool hasReferrerPolicy = false; - uint32_t referrerPolicy = mozilla::net::RP_Default; - rv = preloadCsp->GetReferrerPolicy(&referrerPolicy, &hasReferrerPolicy); + if (!mUpgradeInsecurePreloads) { + nsCOMPtr preloadCsp; + rv = NodePrincipal()->GetPreloadCsp(getter_AddRefs(preloadCsp)); NS_ENSURE_SUCCESS_VOID(rv); - if (hasReferrerPolicy) { - // please note that referrer policy spec defines that the latest - // policy awlays wins, hence we can safely overwrite the policy here. - mReferrerPolicy = static_cast(referrerPolicy); - mReferrerPolicySet = true; - } - if (!mUpgradeInsecurePreloads) { - rv = preloadCsp->GetUpgradeInsecureRequests(&mUpgradeInsecurePreloads); - NS_ENSURE_SUCCESS_VOID(rv); + if (preloadCsp) { + preloadCsp->GetUpgradeInsecureRequests(&mUpgradeInsecurePreloads); } } } diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp index 2408cced895a..c9659f1b8d8d 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp @@ -1051,6 +1051,15 @@ nsHtml5TreeOpExecutor::AddSpeculationCSP(const nsAString& aCSP) true); // delivered through the meta tag NS_ENSURE_SUCCESS_VOID(rv); + // Record "speculated" referrer policy for preloads + bool hasReferrerPolicy = false; + uint32_t referrerPolicy = mozilla::net::RP_Default; + rv = preloadCsp->GetReferrerPolicy(&referrerPolicy, &hasReferrerPolicy); + NS_ENSURE_SUCCESS_VOID(rv); + if (hasReferrerPolicy) { + SetSpeculationReferrerPolicy(static_cast(referrerPolicy)); + } + mDocument->ApplySettingsFromCSP(true); }