44
55#include " mozilla/dom/HTMLTemplateElement.h"
66
7+ #include " mozilla/StaticPrefs_dom.h"
78#include " mozilla/dom/Document.h"
89#include " mozilla/dom/HTMLTemplateElementBinding.h"
910#include " mozilla/dom/NameSpaceConstants.h"
@@ -22,6 +23,14 @@ static constexpr nsAttrValue::EnumTableEntry kShadowRootModeTable[] = {
2223 {" closed" , ShadowRootMode::Closed},
2324};
2425
26+ static constexpr nsAttrValue::EnumTableEntry kSlotAssignmentTable [] = {
27+ {" named" , SlotAssignmentMode::Named},
28+ {" manual" , SlotAssignmentMode::Manual},
29+ };
30+
31+ static constexpr const nsAttrValue::EnumTableEntry* kSlotAssignmentDefault =
32+ &kSlotAssignmentTable [0 ];
33+
2534HTMLTemplateElement::HTMLTemplateElement (
2635 already_AddRefed<mozilla::dom::NodeInfo>&& aNodeInfo)
2736 : nsGenericHTMLElement (std::move (aNodeInfo)) {
@@ -69,6 +78,12 @@ JSObject* HTMLTemplateElement::WrapNode(JSContext* aCx,
6978 return HTMLTemplateElement_Binding::Wrap (aCx, this , aGivenProto);
7079}
7180
81+ void HTMLTemplateElement::GetShadowRootSlotAssignment (
82+ nsAString& aResult) const {
83+ GetEnumAttr (nsGkAtoms::shadowrootslotassignment, kSlotAssignmentDefault ->tag ,
84+ aResult);
85+ }
86+
7287void HTMLTemplateElement::AfterSetAttr (int32_t aNamespaceID, nsAtom* aName,
7388 const nsAttrValue* aValue,
7489 const nsAttrValue* aOldValue,
@@ -90,9 +105,16 @@ bool HTMLTemplateElement::ParseAttribute(int32_t aNamespaceID,
90105 const nsAString& aValue,
91106 nsIPrincipal* aMaybeScriptedPrincipal,
92107 nsAttrValue& aResult) {
93- if (aNamespaceID == kNameSpaceID_None &&
94- aAttribute == nsGkAtoms::shadowrootmode) {
95- return aResult.ParseEnumValue (aValue, kShadowRootModeTable , false , nullptr );
108+ if (aNamespaceID == kNameSpaceID_None ) {
109+ if (aAttribute == nsGkAtoms::shadowrootmode) {
110+ return aResult.ParseEnumValue (aValue, kShadowRootModeTable , false ,
111+ nullptr );
112+ }
113+ if (aAttribute == nsGkAtoms::shadowrootslotassignment &&
114+ StaticPrefs::dom_shadowdom_shadowRootSlotAssignment_enabled ()) {
115+ return aResult.ParseEnumValue (aValue, kSlotAssignmentTable , false ,
116+ kSlotAssignmentDefault );
117+ }
96118 }
97119 return nsGenericHTMLElement::ParseAttribute (aNamespaceID, aAttribute, aValue,
98120 aMaybeScriptedPrincipal, aResult);
0 commit comments