diff options
author | gatowololo <gatowololo@gmail.com> | 2019-06-06 11:30:37 -0700 |
---|---|---|
committer | gatowololo <gatowololo@gmail.com> | 2019-06-06 11:30:37 -0700 |
commit | 3df8d6891e0fe47d4af3d7ee59ba05ea64ee628c (patch) | |
tree | d039b2e426a2e67848c3842ae1984ac74221709b /components/script/dom/node.rs | |
parent | fe8aad722749e8e5c9223800b98fc4e87b9ab161 (diff) | |
download | servo-3df8d6891e0fe47d4af3d7ee59ba05ea64ee628c.tar.gz servo-3df8d6891e0fe47d4af3d7ee59ba05ea64ee628c.zip |
Split getter for mutation_observers() into two methods.
registered_mutation_observers() returns immutable references and does
not init mutation observers.
registered_mutation_observers_mut() lazily initializes raredata if it
does not exist.
Updated code that uses this methods to call appropriate method when
mutation is not necessary.
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r-- | components/script/dom/node.rs | 21 |
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); |