import from custom branch of UXP: ported from mozilla: Bug 1460920 - Part 2 : Support referrerpolicy attribute in script HTMLScriptElement r=hsivonen (3309aa6d27) (ed16ab73)

This commit is contained in:
2024-10-02 00:09:19 +08:00
parent 58030fb217
commit 021dffe98c
7 changed files with 48 additions and 5 deletions
+15 -4
View File
@@ -1566,7 +1566,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
// Step 15. and later in the HTML5 spec
nsresult rv = NS_OK;
RefPtr<ScriptLoadRequest> request;
mozilla::net::ReferrerPolicy ourRefPolicy = mDocument->GetReferrerPolicy();
mozilla::net::ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
if (aElement->GetScriptExternal()) {
// external script
nsCOMPtr<nsIURI> scriptURI = aElement->GetScriptURI();
@@ -1596,7 +1596,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
aElement->GetScriptCharset(elementCharset);
if (elementCharset.Equals(preloadCharset) &&
ourCORSMode == request->CORSMode() &&
ourRefPolicy == request->ReferrerPolicy() &&
referrerPolicy == request->ReferrerPolicy() &&
scriptKind == request->mKind) {
rv = CheckContentPolicy(mDocument, aElement, request->mURI, type, false);
if (NS_FAILED(rv)) {
@@ -1642,7 +1642,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
nsCOMPtr<nsIPrincipal> principal = scriptContent->NodePrincipal();
request = CreateLoadRequest(scriptKind, scriptURI, aElement, principal,
ourCORSMode, sriMetadata, ourRefPolicy);
ourCORSMode, sriMetadata, referrerPolicy);
request->mIsInline = false;
request->SetScriptMode(aElement->GetScriptDeferred(),
aElement->GetScriptAsync());
@@ -1763,7 +1763,7 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
mDocument->NodePrincipal(),
CORS_NONE,
SRIMetadata(), // SRI doesn't apply
ourRefPolicy);
referrerPolicy);
request->mIsInline = true;
request->mLineNo = aElement->GetScriptLineNumber();
@@ -1829,6 +1829,17 @@ ScriptLoader::ProcessScriptElement(nsIScriptElement *aElement)
return ProcessRequest(request) == NS_ERROR_HTMLPARSER_BLOCK;
}
mozilla::net::ReferrerPolicy
ScriptLoader::GetReferrerPolicy(nsIScriptElement* aElement)
{
mozilla::net::ReferrerPolicy scriptReferrerPolicy =
aElement->GetReferrerPolicy();
if (scriptReferrerPolicy != mozilla::net::RP_Unset) {
return scriptReferrerPolicy;
}
return mDocument->GetReferrerPolicy();
}
namespace {
class NotifyOffThreadScriptLoadCompletedRunnable : public Runnable