Title: [130069] trunk/Source/WebCore
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*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to