aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs21
1 files changed, 14 insertions, 7 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 814378aca88..fe7f9ec29c2 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -451,18 +451,25 @@ impl Node {
cmp & NodeConstants::DOCUMENT_POSITION_PRECEDING != 0
}
- /// Return all registered mutation observers for this node.
- /// XXX(ferjm) This should probably be split into two functions,
- /// `registered_mutation_observers`, which returns an Option or
- /// an empty slice or something, and doesn't create the rare data,
- /// and `registered_mutation_observers_mut`, which does lazily
- /// initialize the raredata.
- pub fn registered_mutation_observers(&self) -> RefMut<Vec<RegisteredObserver>> {
+ /// Return all registered mutation observers for this node. Lazily initialize the
+ /// raredata if it does not exist.
+ pub fn registered_mutation_observers_mut(&self) -> RefMut<Vec<RegisteredObserver>> {
RefMut::map(self.ensure_rare_data(), |rare_data| {
&mut rare_data.mutation_observers
})
}
+ pub fn registered_mutation_observers(&self) -> Option<Ref<Vec<RegisteredObserver>>> {
+ let rare_data: Ref<_> = self.rare_data.borrow();
+
+ if rare_data.is_none() {
+ return None;
+ }
+ Some(Ref::map(rare_data, |rare_data| {
+ &rare_data.as_ref().unwrap().mutation_observers
+ }))
+ }
+
/// Add a new mutation observer for a given node.
pub fn add_mutation_observer(&self, observer: RegisteredObserver) {
self.ensure_rare_data().mutation_observers.push(observer);