- Revision
- 130069
- Author
- ad...@chromium.org
- Date
- 2012-10-01 13:12:05 -0700 (Mon, 01 Oct 2012)
Log Message
Consolidate more MutationObserverRegistration logic in Node
https://bugs.webkit.org/show_bug.cgi?id=98058
Reviewed by Ryosuke Niwa.
One remaining oddity of Node's MutationObserver-related interface was
that registerMutationObserver returned the resulting MutationObserverRegistration
object.
Instead, Node now internally handles resetting the observation
if the registration already exists, and updating the Document's list of
mutation observer types.
No change in behavior, refactoring only.
* dom/MutationObserver.cpp:
(WebCore::MutationObserver::observe): Simplified to just call
Node::registerMutationObserver; nothing else is needed.
* dom/MutationObserverRegistration.cpp:
(WebCore::MutationObserverRegistration::create): Take options and attributeFilter,
avoiding an unnecessary call to resetObservation().
(WebCore::MutationObserverRegistration::MutationObserverRegistration): ditto
* dom/MutationObserverRegistration.h:
(MutationObserverRegistration):
* dom/Node.cpp:
(WebCore::Node::registerMutationObserver): Handle observation
resetting if that observer's already registered, and update the list
of active MutationObserver types in the Document.
* dom/Node.h:
(Node):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (130068 => 130069)
--- trunk/Source/WebCore/ChangeLog 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/ChangeLog 2012-10-01 20:12:05 UTC (rev 130069)
@@ -1,3 +1,36 @@
+2012-10-01 Adam Klein <ad...@chromium.org>
+
+ Consolidate more MutationObserverRegistration logic in Node
+ https://bugs.webkit.org/show_bug.cgi?id=98058
+
+ Reviewed by Ryosuke Niwa.
+
+ One remaining oddity of Node's MutationObserver-related interface was
+ that registerMutationObserver returned the resulting MutationObserverRegistration
+ object.
+
+ Instead, Node now internally handles resetting the observation
+ if the registration already exists, and updating the Document's list of
+ mutation observer types.
+
+ No change in behavior, refactoring only.
+
+ * dom/MutationObserver.cpp:
+ (WebCore::MutationObserver::observe): Simplified to just call
+ Node::registerMutationObserver; nothing else is needed.
+ * dom/MutationObserverRegistration.cpp:
+ (WebCore::MutationObserverRegistration::create): Take options and attributeFilter,
+ avoiding an unnecessary call to resetObservation().
+ (WebCore::MutationObserverRegistration::MutationObserverRegistration): ditto
+ * dom/MutationObserverRegistration.h:
+ (MutationObserverRegistration):
+ * dom/Node.cpp:
+ (WebCore::Node::registerMutationObserver): Handle observation
+ resetting if that observer's already registered, and update the list
+ of active MutationObserver types in the Document.
+ * dom/Node.h:
+ (Node):
+
2012-10-01 Glenn Adams <gl...@skynav.com>
YYDEBUG doesn't print token values
Modified: trunk/Source/WebCore/dom/MutationObserver.cpp (130068 => 130069)
--- trunk/Source/WebCore/dom/MutationObserver.cpp 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/dom/MutationObserver.cpp 2012-10-01 20:12:05 UTC (rev 130069)
@@ -116,10 +116,7 @@
return;
}
- MutationObserverRegistration* registration = node->registerMutationObserver(this);
- registration->resetObservation(options, attributeFilter);
-
- node->document()->addMutationObserverTypes(registration->mutationTypes());
+ node->registerMutationObserver(this, options, attributeFilter);
}
Vector<RefPtr<MutationRecord> > MutationObserver::takeRecords()
Modified: trunk/Source/WebCore/dom/MutationObserverRegistration.cpp (130068 => 130069)
--- trunk/Source/WebCore/dom/MutationObserverRegistration.cpp 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/dom/MutationObserverRegistration.cpp 2012-10-01 20:12:05 UTC (rev 130069)
@@ -40,15 +40,16 @@
namespace WebCore {
-PassOwnPtr<MutationObserverRegistration> MutationObserverRegistration::create(PassRefPtr<MutationObserver> observer, Node* registrationNode)
+PassOwnPtr<MutationObserverRegistration> MutationObserverRegistration::create(PassRefPtr<MutationObserver> observer, Node* registrationNode, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter)
{
- return adoptPtr(new MutationObserverRegistration(observer, registrationNode));
+ return adoptPtr(new MutationObserverRegistration(observer, registrationNode, options, attributeFilter));
}
-MutationObserverRegistration::MutationObserverRegistration(PassRefPtr<MutationObserver> observer, Node* registrationNode)
- : m_observer(observer)
- , m_registrationNode(registrationNode)
- , m_options(0)
+MutationObserverRegistration::MutationObserverRegistration(PassRefPtr<MutationObserver> observer, Node* registrationNode, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter)
+ : m_observer(observer)
+ , m_registrationNode(registrationNode)
+ , m_options(options)
+ , m_attributeFilter(attributeFilter)
{
m_observer->observationStarted(this);
}
Modified: trunk/Source/WebCore/dom/MutationObserverRegistration.h (130068 => 130069)
--- trunk/Source/WebCore/dom/MutationObserverRegistration.h 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/dom/MutationObserverRegistration.h 2012-10-01 20:12:05 UTC (rev 130069)
@@ -44,7 +44,7 @@
class MutationObserverRegistration {
public:
- static PassOwnPtr<MutationObserverRegistration> create(PassRefPtr<MutationObserver>, Node*);
+ static PassOwnPtr<MutationObserverRegistration> create(PassRefPtr<MutationObserver>, Node*, MutationObserverOptions, const HashSet<AtomicString>& attributeFilter);
~MutationObserverRegistration();
void resetObservation(MutationObserverOptions, const HashSet<AtomicString>& attributeFilter);
@@ -61,7 +61,7 @@
MutationObserverOptions mutationTypes() const { return m_options & MutationObserver::AllMutationTypes; }
private:
- MutationObserverRegistration(PassRefPtr<MutationObserver>, Node*);
+ MutationObserverRegistration(PassRefPtr<MutationObserver>, Node*, MutationObserverOptions, const HashSet<AtomicString>& attributeFilter);
RefPtr<MutationObserver> m_observer;
Node* m_registrationNode;
Modified: trunk/Source/WebCore/dom/Node.cpp (130068 => 130069)
--- trunk/Source/WebCore/dom/Node.cpp 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/dom/Node.cpp 2012-10-01 20:12:05 UTC (rev 130069)
@@ -2478,16 +2478,23 @@
}
}
-MutationObserverRegistration* Node::registerMutationObserver(MutationObserver* observer)
+void Node::registerMutationObserver(MutationObserver* observer, MutationObserverOptions options, const HashSet<AtomicString>& attributeFilter)
{
+ MutationObserverRegistration* registration = 0;
Vector<OwnPtr<MutationObserverRegistration> >* registry = ensureRareData()->ensureMutationObserverRegistry();
for (size_t i = 0; i < registry->size(); ++i) {
- if (registry->at(i)->observer() == observer)
- return registry->at(i).get();
+ if (registry->at(i)->observer() == observer) {
+ registration = registry->at(i).get();
+ registration->resetObservation(options, attributeFilter);
+ }
}
- registry->append(MutationObserverRegistration::create(observer, this));
- return registry->last().get();
+ if (!registration) {
+ registry->append(MutationObserverRegistration::create(observer, this, options, attributeFilter));
+ registration = registry->last().get();
+ }
+
+ document()->addMutationObserverTypes(registration->mutationTypes());
}
void Node::unregisterMutationObserver(MutationObserverRegistration* registration)
Modified: trunk/Source/WebCore/dom/Node.h (130068 => 130069)
--- trunk/Source/WebCore/dom/Node.h 2012-10-01 19:53:53 UTC (rev 130068)
+++ trunk/Source/WebCore/dom/Node.h 2012-10-01 20:12:05 UTC (rev 130069)
@@ -656,7 +656,7 @@
#if ENABLE(MUTATION_OBSERVERS)
void getRegisteredMutationObserversOfType(HashMap<MutationObserver*, MutationRecordDeliveryOptions>&, MutationObserver::MutationType, const QualifiedName* attributeName);
- MutationObserverRegistration* registerMutationObserver(MutationObserver*);
+ void registerMutationObserver(MutationObserver*, MutationObserverOptions, const HashSet<AtomicString>& attributeFilter);
void unregisterMutationObserver(MutationObserverRegistration*);
void registerTransientMutationObserver(MutationObserverRegistration*);
void unregisterTransientMutationObserver(MutationObserverRegistration*);