From 7e02267fd34887c435fc2c2880eb49c322839b30 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Mon, 19 Apr 2021 20:47:29 +0000 Subject: [PATCH] [DOM] Add missing IDL definitions for CSP .nonce attributes. Apparently Mozilla completely spaced out on this when adding the CSP nonce mechanism, potentially causing web compat issues if scripting relies on being able to get/set nonces through DOM and/or causing CSP policy check issues if websites try to "hide" nonces. --- dom/html/HTMLLinkElement.h | 8 ++++++++ dom/html/HTMLScriptElement.h | 8 ++++++++ dom/html/HTMLStyleElement.h | 8 ++++++++ dom/webidl/HTMLLinkElement.webidl | 2 ++ dom/webidl/HTMLScriptElement.webidl | 10 ++++------ dom/webidl/HTMLStyleElement.webidl | 2 ++ 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/dom/html/HTMLLinkElement.h b/dom/html/HTMLLinkElement.h index 8575d5b49f..aca16d56a4 100644 --- a/dom/html/HTMLLinkElement.h +++ b/dom/html/HTMLLinkElement.h @@ -109,6 +109,14 @@ public: SetHTMLAttr(nsGkAtoms::rel, aRel, aRv); } nsDOMTokenList* RelList(); + void GetNonce(nsAString& aNonce) const + { + GetHTMLAttr(nsGkAtoms::nonce, aNonce); + } + void SetNonce(const nsAString& aNonce, ErrorResult& aRv) + { + SetHTMLAttr(nsGkAtoms::nonce, aNonce, aRv); + } // XPCOM GetMedia is fine. void SetMedia(const nsAString& aMedia, ErrorResult& aRv) { diff --git a/dom/html/HTMLScriptElement.h b/dom/html/HTMLScriptElement.h index a0c9e47258..a80f0262a1 100644 --- a/dom/html/HTMLScriptElement.h +++ b/dom/html/HTMLScriptElement.h @@ -80,6 +80,14 @@ public: { SetOrRemoveNullableStringAttr(nsGkAtoms::crossorigin, aCrossOrigin, aError); } + void GetNonce(nsAString& aNonce) const + { + GetHTMLAttr(nsGkAtoms::nonce, aNonce); + } + void SetNonce(const nsAString& aNonce, ErrorResult& aRv) + { + SetHTMLAttr(nsGkAtoms::nonce, aNonce, aRv); + } void GetIntegrity(nsAString& aIntegrity) { GetHTMLAttr(nsGkAtoms::integrity, aIntegrity); diff --git a/dom/html/HTMLStyleElement.h b/dom/html/HTMLStyleElement.h index 60331dc5df..585047ba38 100644 --- a/dom/html/HTMLStyleElement.h +++ b/dom/html/HTMLStyleElement.h @@ -60,6 +60,14 @@ public: bool Disabled() const; void SetDisabled(bool aDisabled); + void GetNonce(nsAString& aNonce) const + { + GetHTMLAttr(nsGkAtoms::nonce, aNonce); + } + void SetNonce(const nsAString& aNonce, ErrorResult& aRv) + { + SetHTMLAttr(nsGkAtoms::nonce, aNonce, aRv); + } void SetMedia(const nsAString& aMedia, ErrorResult& aError) { SetHTMLAttr(nsGkAtoms::media, aMedia, aError); diff --git a/dom/webidl/HTMLLinkElement.webidl b/dom/webidl/HTMLLinkElement.webidl index 4fa40d04d0..0089ab84e6 100644 --- a/dom/webidl/HTMLLinkElement.webidl +++ b/dom/webidl/HTMLLinkElement.webidl @@ -26,6 +26,8 @@ interface HTMLLinkElement : HTMLElement { readonly attribute DOMTokenList relList; [CEReactions, SetterThrows, Pure] attribute DOMString media; + [CEReactions, SetterThrows, Pure] + attribute DOMString nonce; [CEReactions, SetterThrows, Pure] attribute DOMString hreflang; [CEReactions, SetterThrows, Pure] diff --git a/dom/webidl/HTMLScriptElement.webidl b/dom/webidl/HTMLScriptElement.webidl index 286c0673d8..6b48a52443 100644 --- a/dom/webidl/HTMLScriptElement.webidl +++ b/dom/webidl/HTMLScriptElement.webidl @@ -26,6 +26,10 @@ interface HTMLScriptElement : HTMLElement { attribute DOMString? crossOrigin; [CEReactions, SetterThrows] attribute DOMString text; + [CEReactions, SetterThrows, Pure] + attribute DOMString nonce; + [CEReactions, SetterThrows, Pure] + attribute DOMString integrity; }; // http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis @@ -35,9 +39,3 @@ partial interface HTMLScriptElement { [CEReactions, SetterThrows] attribute DOMString htmlFor; }; - -// https://w3c.github.io/webappsec/specs/subresourceintegrity/#htmlscriptelement-1 -partial interface HTMLScriptElement { - [CEReactions, SetterThrows] - attribute DOMString integrity; -}; diff --git a/dom/webidl/HTMLStyleElement.webidl b/dom/webidl/HTMLStyleElement.webidl index 3cacbf62fd..3f2e0c8630 100644 --- a/dom/webidl/HTMLStyleElement.webidl +++ b/dom/webidl/HTMLStyleElement.webidl @@ -15,6 +15,8 @@ interface HTMLStyleElement : HTMLElement { [CEReactions, SetterThrows, Pure] attribute DOMString media; [CEReactions, SetterThrows, Pure] + attribute DOMString nonce; + [CEReactions, SetterThrows, Pure] attribute DOMString type; [SetterThrows, Pure] attribute boolean scoped;