aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorXiaocheng Hu <xiaochengh.work@gmail.com>2025-03-14 02:03:57 +0800
committerGitHub <noreply@github.com>2025-03-13 18:03:57 +0000
commit62d6759106c987ed438d6a8e281fea28859300d3 (patch)
treee6d4e4e64311d059671fafbecd05da0fe0030964 /components/script/dom/element.rs
parentea35353e9aacb65944b8e23ae564cc771bdab33f (diff)
downloadservo-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.rs17
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());