aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mutationobserver.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/mutationobserver.rs')
-rw-r--r--components/script/dom/mutationobserver.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/components/script/dom/mutationobserver.rs b/components/script/dom/mutationobserver.rs
index 48c8fe24b87..84d34af0149 100644
--- a/components/script/dom/mutationobserver.rs
+++ b/components/script/dom/mutationobserver.rs
@@ -29,9 +29,10 @@ pub struct MutationObserver {
record_queue: DOMRefCell<Vec<Root<MutationRecord>>>,
}
-#[derive(Clone)]
-pub enum Mutation {
- Attribute { name: LocalName, namespace: Namespace, old_value: DOMString }
+pub enum Mutation<'a> {
+ Attribute { name: LocalName, namespace: Namespace, old_value: DOMString },
+ ChildList { added: Option<&'a [&'a Node]>, removed: Option<&'a [&'a Node]>,
+ prev: Option<&'a Node>, next: Option<&'a Node> },
}
#[derive(HeapSizeOf, JSTraceable)]
@@ -143,6 +144,12 @@ impl MutationObserver {
interestedObservers.push((Root::from_ref(&*registered.observer),
paired_string));
}
+ },
+ Mutation::ChildList { .. } => {
+ if !registered.options.child_list {
+ continue;
+ }
+ interestedObservers.push((Root::from_ref(&*registered.observer), None));
}
}
}
@@ -159,6 +166,9 @@ impl MutationObserver {
None
};
MutationRecord::attribute_mutated(target, name, namespace, paired_string.clone())
+ },
+ Mutation::ChildList { ref added, ref removed, ref next, ref prev } => {
+ MutationRecord::child_list_mutated(target, *added, *removed, *next, *prev)
}
};
// Step 4.8