Bug 1947732 - Provide nsIPrincipal to GetTrustedTypesCompliantAttributeValue. r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D246745
This commit is contained in:
@@ -160,7 +160,7 @@ void Attr::SetValue(const nsAString& aValue, nsIPrincipal* aTriggeringPrincipal,
|
||||
const nsAString* compliantString =
|
||||
TrustedTypeUtils::GetTrustedTypesCompliantAttributeValue(
|
||||
*element, nameAtom, mNodeInfo->NamespaceID(), aValue,
|
||||
compliantStringHolder, aRv);
|
||||
aTriggeringPrincipal, compliantStringHolder, aRv);
|
||||
if (aRv.Failed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1636,10 +1636,10 @@ Attr* Element::GetAttributeNode(const nsAString& aName) {
|
||||
return Attributes()->GetNamedItem(aName);
|
||||
}
|
||||
|
||||
already_AddRefed<Attr> Element::SetAttributeNode(Attr& aNewAttr,
|
||||
ErrorResult& aError) {
|
||||
already_AddRefed<Attr> Element::SetAttributeNode(
|
||||
Attr& aNewAttr, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError) {
|
||||
RefPtr<nsDOMAttributeMap> attrMap = Attributes();
|
||||
return attrMap->SetNamedItemNS(aNewAttr, aError);
|
||||
return attrMap->SetNamedItemNS(aNewAttr, aSubjectPrincipal, aError);
|
||||
}
|
||||
|
||||
already_AddRefed<Attr> Element::RemoveAttributeNode(Attr& aAttribute,
|
||||
@@ -1726,8 +1726,8 @@ void Element::SetAttribute(
|
||||
Maybe<nsAutoString> compliantStringHolder;
|
||||
const nsAString* compliantString =
|
||||
TrustedTypeUtils::GetTrustedTypesCompliantAttributeValue(
|
||||
*this, nameAtom, kNameSpaceID_None, aValue, compliantStringHolder,
|
||||
aError);
|
||||
*this, nameAtom, kNameSpaceID_None, aValue, aTriggeringPrincipal,
|
||||
compliantStringHolder, aError);
|
||||
if (aError.Failed()) {
|
||||
return;
|
||||
}
|
||||
@@ -1742,7 +1742,7 @@ void Element::SetAttribute(
|
||||
const nsAString* compliantString =
|
||||
TrustedTypeUtils::GetTrustedTypesCompliantAttributeValue(
|
||||
*this, attributeName, name->NamespaceID(), aValue,
|
||||
compliantStringHolder, aError);
|
||||
aTriggeringPrincipal, compliantStringHolder, aError);
|
||||
if (aError.Failed()) {
|
||||
return;
|
||||
}
|
||||
@@ -1775,7 +1775,7 @@ void Element::SetAttributeNS(
|
||||
RefPtr<nsAtom> attributeName = ni->NameAtom();
|
||||
const nsAString* compliantString =
|
||||
TrustedTypeUtils::GetTrustedTypesCompliantAttributeValue(
|
||||
*this, attributeName, ni->NamespaceID(), aValue,
|
||||
*this, attributeName, ni->NamespaceID(), aValue, aTriggeringPrincipal,
|
||||
compliantStringHolder, aError);
|
||||
if (aError.Failed()) {
|
||||
return;
|
||||
@@ -1828,10 +1828,10 @@ Attr* Element::GetAttributeNodeNSInternal(const nsAString& aNamespaceURI,
|
||||
return Attributes()->GetNamedItemNS(aNamespaceURI, aLocalName);
|
||||
}
|
||||
|
||||
already_AddRefed<Attr> Element::SetAttributeNodeNS(Attr& aNewAttr,
|
||||
ErrorResult& aError) {
|
||||
already_AddRefed<Attr> Element::SetAttributeNodeNS(
|
||||
Attr& aNewAttr, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError) {
|
||||
RefPtr<nsDOMAttributeMap> attrMap = Attributes();
|
||||
return attrMap->SetNamedItemNS(aNewAttr, aError);
|
||||
return attrMap->SetNamedItemNS(aNewAttr, aSubjectPrincipal, aError);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIHTMLCollection> Element::GetElementsByTagNameNS(
|
||||
|
||||
@@ -1439,13 +1439,13 @@ class Element : public FragmentOrElement {
|
||||
void RequestPointerLock(CallerType aCallerType);
|
||||
Attr* GetAttributeNode(const nsAString& aName);
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Attr> SetAttributeNode(
|
||||
Attr& aNewAttr, ErrorResult& aError);
|
||||
Attr& aNewAttr, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError);
|
||||
already_AddRefed<Attr> RemoveAttributeNode(Attr& aOldAttr,
|
||||
ErrorResult& aError);
|
||||
Attr* GetAttributeNodeNS(const nsAString& aNamespaceURI,
|
||||
const nsAString& aLocalName);
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Attr> SetAttributeNodeNS(
|
||||
Attr& aNewAttr, ErrorResult& aError);
|
||||
Attr& aNewAttr, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError);
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<DOMRectList> GetClientRects();
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<DOMRect> GetBoundingClientRect();
|
||||
|
||||
@@ -176,8 +176,8 @@ Attr* nsDOMAttributeMap::GetNamedItem(const nsAString& aAttrName) {
|
||||
return NamedGetter(aAttrName, dummy);
|
||||
}
|
||||
|
||||
already_AddRefed<Attr> nsDOMAttributeMap::SetNamedItemNS(Attr& aAttr,
|
||||
ErrorResult& aError) {
|
||||
already_AddRefed<Attr> nsDOMAttributeMap::SetNamedItemNS(
|
||||
Attr& aAttr, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError) {
|
||||
NS_ENSURE_TRUE(mContent, nullptr);
|
||||
|
||||
// XXX should check same-origin between mContent and aAttr however
|
||||
@@ -207,8 +207,8 @@ already_AddRefed<Attr> nsDOMAttributeMap::SetNamedItemNS(Attr& aAttr,
|
||||
nsCOMPtr<Element> element = mContent;
|
||||
const nsAString* compliantString =
|
||||
TrustedTypeUtils::GetTrustedTypesCompliantAttributeValue(
|
||||
*element, nameAtom, ni->NamespaceID(), value, compliantStringHolder,
|
||||
aError);
|
||||
*element, nameAtom, ni->NamespaceID(), value, aSubjectPrincipal,
|
||||
compliantStringHolder, aError);
|
||||
if (aError.Failed()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
class nsAtom;
|
||||
class nsINode;
|
||||
class nsIPrincipal;
|
||||
|
||||
namespace mozilla {
|
||||
class ErrorResult;
|
||||
@@ -147,8 +148,8 @@ class nsDOMAttributeMap final : public nsISupports, public nsWrapperCache {
|
||||
|
||||
Attr* GetNamedItemNS(const nsAString& aNamespaceURI,
|
||||
const nsAString& aLocalName);
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Attr> SetNamedItemNS(Attr& aNode,
|
||||
ErrorResult& aError);
|
||||
MOZ_CAN_RUN_SCRIPT already_AddRefed<Attr> SetNamedItemNS(
|
||||
Attr& aNode, nsIPrincipal* aSubjectPrincipal, ErrorResult& aError);
|
||||
already_AddRefed<Attr> RemoveNamedItemNS(const nsAString& aNamespaceURI,
|
||||
const nsAString& aLocalName,
|
||||
ErrorResult& aError);
|
||||
|
||||
@@ -666,7 +666,8 @@ template <typename TrustedTypeOrStringArg>
|
||||
MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
const nsINode& aElement, nsAtom* aAttributeName,
|
||||
int32_t aAttributeNamespaceID, const TrustedTypeOrStringArg& aNewValue,
|
||||
Maybe<nsAutoString>& aResultHolder, ErrorResult& aError) {
|
||||
nsIPrincipal* aPrincipalOrNull, Maybe<nsAutoString>& aResultHolder,
|
||||
ErrorResult& aError) {
|
||||
if (!StaticPrefs::dom_security_trusted_types_enabled()) {
|
||||
// A trusted type might've been created before the pref was set to `false`,
|
||||
// so we cannot assume aNewValue.IsString().
|
||||
@@ -710,15 +711,15 @@ MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
switch (expectedType) {
|
||||
case TrustedType::TrustedHTML:
|
||||
return GetTrustedTypesCompliantString<TrustedHTML>(
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, nullptr,
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, aPrincipalOrNull,
|
||||
aResultHolder, aError);
|
||||
case TrustedType::TrustedScript:
|
||||
return GetTrustedTypesCompliantString<TrustedScript>(
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, nullptr,
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, aPrincipalOrNull,
|
||||
aResultHolder, aError);
|
||||
case TrustedType::TrustedScriptURL:
|
||||
return GetTrustedTypesCompliantString<TrustedScriptURL>(
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, nullptr,
|
||||
input, sink, kTrustedTypesOnlySinkGroup, aElement, aPrincipalOrNull,
|
||||
aResultHolder, aError);
|
||||
}
|
||||
MOZ_ASSERT_UNREACHABLE();
|
||||
@@ -729,20 +730,22 @@ MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
const nsINode& aElement, nsAtom* aAttributeName,
|
||||
int32_t aAttributeNamespaceID,
|
||||
const TrustedHTMLOrTrustedScriptOrTrustedScriptURLOrString& aNewValue,
|
||||
Maybe<nsAutoString>& aResultHolder, ErrorResult& aError) {
|
||||
nsIPrincipal* aPrincipalOrNull, Maybe<nsAutoString>& aResultHolder,
|
||||
ErrorResult& aError) {
|
||||
return GetTrustedTypesCompliantAttributeValue<
|
||||
TrustedHTMLOrTrustedScriptOrTrustedScriptURLOrString>(
|
||||
aElement, aAttributeName, aAttributeNamespaceID, aNewValue, aResultHolder,
|
||||
aError);
|
||||
aElement, aAttributeName, aAttributeNamespaceID, aNewValue,
|
||||
aPrincipalOrNull, aResultHolder, aError);
|
||||
}
|
||||
|
||||
MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
const nsINode& aElement, nsAtom* aAttributeName,
|
||||
int32_t aAttributeNamespaceID, const nsAString& aNewValue,
|
||||
Maybe<nsAutoString>& aResultHolder, ErrorResult& aError) {
|
||||
nsIPrincipal* aPrincipalOrNull, Maybe<nsAutoString>& aResultHolder,
|
||||
ErrorResult& aError) {
|
||||
return GetTrustedTypesCompliantAttributeValue<const nsAString*>(
|
||||
aElement, aAttributeName, aAttributeNamespaceID, &aNewValue,
|
||||
aResultHolder, aError);
|
||||
aPrincipalOrNull, aResultHolder, aError);
|
||||
}
|
||||
|
||||
bool HostGetCodeForEval(JSContext* aCx, JS::Handle<JSObject*> aCode,
|
||||
|
||||
@@ -145,11 +145,13 @@ MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
const nsINode& aElement, nsAtom* aAttributeName,
|
||||
int32_t aAttributeNamespaceID,
|
||||
const TrustedHTMLOrTrustedScriptOrTrustedScriptURLOrString& aNewValue,
|
||||
Maybe<nsAutoString>& aResultHolder, ErrorResult& aError);
|
||||
nsIPrincipal* aPrincipalOrNull, Maybe<nsAutoString>& aResultHolder,
|
||||
ErrorResult& aError);
|
||||
MOZ_CAN_RUN_SCRIPT const nsAString* GetTrustedTypesCompliantAttributeValue(
|
||||
const nsINode& aElement, nsAtom* aAttributeName,
|
||||
int32_t aAttributeNamespaceID, const nsAString& aNewValue,
|
||||
Maybe<nsAutoString>& aResultHolder, ErrorResult& aError);
|
||||
nsIPrincipal* aPrincipalOrNull, Maybe<nsAutoString>& aResultHolder,
|
||||
ErrorResult& aError);
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/webappapis.html#hostgetcodeforeval(argument)
|
||||
bool HostGetCodeForEval(JSContext* aCx, JS::Handle<JSObject*> aCode,
|
||||
|
||||
@@ -151,12 +151,12 @@ interface Element : Node {
|
||||
|
||||
// Obsolete methods.
|
||||
Attr? getAttributeNode(DOMString name);
|
||||
[CEReactions, Throws]
|
||||
[CEReactions, NeedsSubjectPrincipal=NonSystem, Throws]
|
||||
Attr? setAttributeNode(Attr newAttr);
|
||||
[CEReactions, Throws]
|
||||
Attr? removeAttributeNode(Attr oldAttr);
|
||||
Attr? getAttributeNodeNS(DOMString? namespaceURI, DOMString localName);
|
||||
[CEReactions, Throws]
|
||||
[CEReactions, NeedsSubjectPrincipal=NonSystem, Throws]
|
||||
Attr? setAttributeNodeNS(Attr newAttr);
|
||||
|
||||
[Func="nsContentUtils::IsCallerChromeOrElementTransformGettersEnabled"]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
Exposed=Window]
|
||||
interface NamedNodeMap {
|
||||
getter Attr? getNamedItem(DOMString name);
|
||||
[CEReactions, Throws, BinaryName="setNamedItemNS"]
|
||||
[CEReactions, NeedsSubjectPrincipal=NonSystem, Throws, BinaryName="setNamedItemNS"]
|
||||
Attr? setNamedItem(Attr arg);
|
||||
[CEReactions, Throws]
|
||||
Attr removeNamedItem(DOMString name);
|
||||
@@ -16,7 +16,7 @@ interface NamedNodeMap {
|
||||
readonly attribute unsigned long length;
|
||||
|
||||
Attr? getNamedItemNS(DOMString? namespaceURI, DOMString localName);
|
||||
[CEReactions, Throws]
|
||||
[CEReactions, NeedsSubjectPrincipal=NonSystem, Throws]
|
||||
Attr? setNamedItemNS(Attr arg);
|
||||
[CEReactions, Throws]
|
||||
Attr removeNamedItemNS(DOMString? namespaceURI, DOMString localName);
|
||||
|
||||
Reference in New Issue
Block a user