diff options
author | Xiaocheng Hu <xiaochengh.work@gmail.com> | 2025-03-14 02:03:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-13 18:03:57 +0000 |
commit | 62d6759106c987ed438d6a8e281fea28859300d3 (patch) | |
tree | e6d4e4e64311d059671fafbecd05da0fe0030964 /components/script/dom/element.rs | |
parent | ea35353e9aacb65944b8e23ae564cc771bdab33f (diff) | |
download | servo-62d6759106c987ed438d6a8e281fea28859300d3.tar.gz servo-62d6759106c987ed438d6a8e281fea28859300d3.zip |
Check whether an element is custom in the spec-compliant way (#35960)
* Check whether element is custom in spec-compliant way
Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
* Update tests
Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
---------
Signed-off-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 43f09bc60cf..2b06da5b6ce 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -371,6 +371,11 @@ impl Element { CustomElementState::Uncustomized } + /// <https://dom.spec.whatwg.org/#concept-element-custom> + pub(crate) fn is_custom(&self) -> bool { + self.get_custom_element_state() == CustomElementState::Custom + } + pub(crate) fn set_custom_element_definition(&self, definition: Rc<CustomElementDefinition>) { self.ensure_rare_data().custom_element_definition = Some(definition); } @@ -1580,7 +1585,7 @@ impl Element { MutationObserver::queue_a_mutation_record(&self.node, mutation); - if self.get_custom_element_definition().is_some() { + if self.is_custom() { let value = DOMString::from(&**attr.value()); let reaction = CallbackReaction::AttributeChanged(name, None, Some(value), namespace); ScriptThread::enqueue_callback_reaction(self, reaction, None); @@ -1772,9 +1777,11 @@ impl Element { MutationObserver::queue_a_mutation_record(&self.node, mutation); - let reaction = - CallbackReaction::AttributeChanged(name, Some(old_value), None, namespace); - ScriptThread::enqueue_callback_reaction(self, reaction, None); + if self.is_custom() { + let reaction = + CallbackReaction::AttributeChanged(name, Some(old_value), None, namespace); + ScriptThread::enqueue_callback_reaction(self, reaction, None); + } self.attrs.borrow_mut().remove(idx); attr.set_owner(None); @@ -2453,7 +2460,7 @@ impl ElementMethods<crate::DomTypeHolder> for Element { } // Step 4. - if self.get_custom_element_definition().is_some() { + if self.is_custom() { let old_name = old_attr.local_name().clone(); let old_value = DOMString::from(&**old_attr.value()); let new_value = DOMString::from(&**attr.value()); |