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.
This commit is contained in:
gatowololo 2019-06-06 11:30:37 -07:00
parent fe8aad7227
commit 3df8d6891e
2 changed files with 21 additions and 9 deletions

View file

@ -132,7 +132,12 @@ impl MutationObserver {
// Step 2 & 3
for node in target.inclusive_ancestors(ShadowIncluding::No) {
for registered in &*node.registered_mutation_observers() {
let registered = node.registered_mutation_observers();
if registered.is_none() {
continue;
}
for registered in &*registered.unwrap() {
if &*node != target && !registered.options.subtree {
continue;
}
@ -297,7 +302,7 @@ impl MutationObserverMethods for MutationObserver {
// Step 7
let add_new_observer = {
let mut replaced = false;
for registered in &mut *target.registered_mutation_observers() {
for registered in &mut *target.registered_mutation_observers_mut() {
if &*registered.observer as *const MutationObserver !=
self as *const MutationObserver
{