diff options
Diffstat (limited to 'Source/WebCore/dom/MutationObserverRegistration.cpp')
-rw-r--r-- | Source/WebCore/dom/MutationObserverRegistration.cpp | 55 |
1 files changed, 22 insertions, 33 deletions
diff --git a/Source/WebCore/dom/MutationObserverRegistration.cpp b/Source/WebCore/dom/MutationObserverRegistration.cpp index 12e0b441f..7705f64db 100644 --- a/Source/WebCore/dom/MutationObserverRegistration.cpp +++ b/Source/WebCore/dom/MutationObserverRegistration.cpp @@ -33,27 +33,23 @@ #include "MutationObserverRegistration.h" #include "Document.h" +#include "QualifiedName.h" namespace WebCore { -PassOwnPtr<MutationObserverRegistration> MutationObserverRegistration::create(PassRefPtr<MutationObserver> observer, Node* registrationNode, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter) -{ - return adoptPtr(new MutationObserverRegistration(observer, registrationNode, options, attributeFilter)); -} - -MutationObserverRegistration::MutationObserverRegistration(PassRefPtr<MutationObserver> observer, Node* registrationNode, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter) +MutationObserverRegistration::MutationObserverRegistration(MutationObserver& observer, Node& node, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter) : m_observer(observer) - , m_registrationNode(registrationNode) + , m_node(node) , m_options(options) , m_attributeFilter(attributeFilter) { - m_observer->observationStarted(this); + m_observer->observationStarted(*this); } MutationObserverRegistration::~MutationObserverRegistration() { clearTransientRegistrations(); - m_observer->observationEnded(this); + m_observer->observationEnded(*this); } void MutationObserverRegistration::resetObservation(MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter) @@ -63,53 +59,46 @@ void MutationObserverRegistration::resetObservation(MutationObserverOptions opti m_attributeFilter = attributeFilter; } -void MutationObserverRegistration::observedSubtreeNodeWillDetach(Node* node) +void MutationObserverRegistration::observedSubtreeNodeWillDetach(Node& node) { if (!isSubtree()) return; - node->registerTransientMutationObserver(this); + node.registerTransientMutationObserver(*this); m_observer->setHasTransientRegistration(); if (!m_transientRegistrationNodes) { - m_transientRegistrationNodes = adoptPtr(new NodeHashSet); + m_transientRegistrationNodes = std::make_unique<HashSet<RefPtr<Node>>>(); - ASSERT(!m_registrationNodeKeepAlive); - m_registrationNodeKeepAlive = m_registrationNode; // Balanced in clearTransientRegistrations. + ASSERT(!m_nodeKeptAlive); + m_nodeKeptAlive = &m_node; // Balanced in clearTransientRegistrations. } - m_transientRegistrationNodes->add(node); + m_transientRegistrationNodes->add(&node); } void MutationObserverRegistration::clearTransientRegistrations() { if (!m_transientRegistrationNodes) { - ASSERT(!m_registrationNodeKeepAlive); + ASSERT(!m_nodeKeptAlive); return; } - for (NodeHashSet::iterator iter = m_transientRegistrationNodes->begin(); iter != m_transientRegistrationNodes->end(); ++iter) - (*iter)->unregisterTransientMutationObserver(this); + for (auto& node : *m_transientRegistrationNodes) + node->unregisterTransientMutationObserver(*this); - m_transientRegistrationNodes.clear(); + m_transientRegistrationNodes = nullptr; - ASSERT(m_registrationNodeKeepAlive); - m_registrationNodeKeepAlive = 0; // Balanced in observeSubtreeNodeWillDetach. -} - -void MutationObserverRegistration::unregisterAndDelete(MutationObserverRegistration* registry) -{ - RefPtr<Node> registrationNode(registry->m_registrationNode); - registrationNode->unregisterMutationObserver(registry); - // The above line will cause registry to be deleted, so don't do any more in this function. + ASSERT(m_nodeKeptAlive); + m_nodeKeptAlive = nullptr; // Balanced in observeSubtreeNodeWillDetach. } -bool MutationObserverRegistration::shouldReceiveMutationFrom(Node* node, MutationObserver::MutationType type, const QualifiedName* attributeName) const +bool MutationObserverRegistration::shouldReceiveMutationFrom(Node& node, MutationObserver::MutationType type, const QualifiedName* attributeName) const { ASSERT((type == MutationObserver::Attributes && attributeName) || !attributeName); if (!(m_options & type)) return false; - if (m_registrationNode != node && !isSubtree()) + if (&m_node != &node && !isSubtree()) return false; if (type != MutationObserver::Attributes || !(m_options & MutationObserver::AttributeFilter)) @@ -123,11 +112,11 @@ bool MutationObserverRegistration::shouldReceiveMutationFrom(Node* node, Mutatio void MutationObserverRegistration::addRegistrationNodesToSet(HashSet<Node*>& nodes) const { - nodes.add(m_registrationNode); + nodes.add(&m_node); if (!m_transientRegistrationNodes) return; - for (NodeHashSet::const_iterator iter = m_transientRegistrationNodes->begin(); iter != m_transientRegistrationNodes->end(); ++iter) - nodes.add(iter->get()); + for (auto& node : *m_transientRegistrationNodes) + nodes.add(node.get()); } } // namespace WebCore |