summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/MutationObserverRegistration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/MutationObserverRegistration.cpp')
-rw-r--r--Source/WebCore/dom/MutationObserverRegistration.cpp55
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