Title: [279434] trunk/Source/WebCore
Revision
279434
Author
[email protected]
Date
2021-06-30 15:17:44 -0700 (Wed, 30 Jun 2021)

Log Message

Updated to use smart pointers in MutationObserver.
https://bugs.webkit.org/show_bug.cgi?id=227518

Patch by venky dass <[email protected]> on 2021-06-30
Reviewed by Ryosuke Niwa.

* dom/MutationObserver.cpp:
(WebCore::MutationObserver::~MutationObserver):
(WebCore::MutationObserver::disconnect):
(WebCore::MutationObserver::observationStarted):
(WebCore::MutationObserver::observationEnded):
(WebCore::MutationObserver::isReachableFromOpaqueRoots const):
(WebCore::MutationObserver::deliver):
* dom/MutationObserver.h:
* dom/MutationObserverRegistration.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (279433 => 279434)


--- trunk/Source/WebCore/ChangeLog	2021-06-30 22:09:03 UTC (rev 279433)
+++ trunk/Source/WebCore/ChangeLog	2021-06-30 22:17:44 UTC (rev 279434)
@@ -1,3 +1,20 @@
+2021-06-30  venky dass  <[email protected]>
+
+        Updated to use smart pointers in MutationObserver.
+        https://bugs.webkit.org/show_bug.cgi?id=227518
+
+        Reviewed by Ryosuke Niwa.
+
+        * dom/MutationObserver.cpp:
+        (WebCore::MutationObserver::~MutationObserver):
+        (WebCore::MutationObserver::disconnect):
+        (WebCore::MutationObserver::observationStarted):
+        (WebCore::MutationObserver::observationEnded):
+        (WebCore::MutationObserver::isReachableFromOpaqueRoots const):
+        (WebCore::MutationObserver::deliver):
+        * dom/MutationObserver.h:
+        * dom/MutationObserverRegistration.h:
+
 2021-06-30  Truitt Savell  <[email protected]>
 
         Unreviewed, reverting r279405.

Modified: trunk/Source/WebCore/dom/MutationObserver.cpp (279433 => 279434)


--- trunk/Source/WebCore/dom/MutationObserver.cpp	2021-06-30 22:09:03 UTC (rev 279433)
+++ trunk/Source/WebCore/dom/MutationObserver.cpp	2021-06-30 22:17:44 UTC (rev 279434)
@@ -66,7 +66,7 @@
 
 MutationObserver::~MutationObserver()
 {
-    ASSERT(m_registrations.isEmpty());
+    ASSERT(m_registrations.computesEmpty());
 }
 
 bool MutationObserver::validateOptions(MutationObserverOptions options)
@@ -120,21 +120,23 @@
 {
     m_pendingTargets.clear();
     m_records.clear();
-    HashSet<MutationObserverRegistration*> registrations(m_registrations);
-    for (auto* registration : registrations)
-        registration->node().unregisterMutationObserver(*registration);
+    WeakHashSet registrations { m_registrations };
+    for (auto& registration : registrations) {
+        auto nodeRef = makeRefPtr(registration.node());
+        nodeRef->unregisterMutationObserver(registration);
+    }
 }
 
 void MutationObserver::observationStarted(MutationObserverRegistration& registration)
 {
-    ASSERT(!m_registrations.contains(&registration));
+    ASSERT(!m_registrations.contains(registration));
     m_registrations.add(&registration);
 }
 
 void MutationObserver::observationEnded(MutationObserverRegistration& registration)
 {
-    ASSERT(m_registrations.contains(&registration));
-    m_registrations.remove(&registration);
+    ASSERT(m_registrations.contains(registration));
+    m_registrations.remove(registration);
 }
 
 void MutationObserver::enqueueMutationRecord(Ref<MutationRecord>&& mutation)
@@ -171,8 +173,8 @@
 
 bool MutationObserver::isReachableFromOpaqueRoots(JSC::AbstractSlotVisitor& visitor) const
 {
-    for (auto* registration : m_registrations) {
-        if (registration->isReachableFromOpaqueRoots(visitor))
+    for (auto& registration : m_registrations) {
+        if (registration.isReachableFromOpaqueRoots(visitor))
             return true;
     }
     return false;
@@ -193,9 +195,9 @@
     Vector<std::unique_ptr<HashSet<GCReachableRef<Node>>>, 1> nodesToKeepAlive;
     HashSet<GCReachableRef<Node>> pendingTargets;
     pendingTargets.swap(m_pendingTargets);
-    for (auto* registration : m_registrations) {
-        if (registration->hasTransientRegistrations())
-            transientRegistrations.append(registration);
+    for (auto& registration : m_registrations) {
+        if (registration.hasTransientRegistrations())
+            transientRegistrations.append(&registration);
     }
     for (auto& registration : transientRegistrations)
         nodesToKeepAlive.append(registration->takeTransientRegistrations());

Modified: trunk/Source/WebCore/dom/MutationObserver.h (279433 => 279434)


--- trunk/Source/WebCore/dom/MutationObserver.h	2021-06-30 22:09:03 UTC (rev 279433)
+++ trunk/Source/WebCore/dom/MutationObserver.h	2021-06-30 22:17:44 UTC (rev 279434)
@@ -37,6 +37,7 @@
 #include <wtf/HashSet.h>
 #include <wtf/IsoMalloc.h>
 #include <wtf/Vector.h>
+#include <wtf/WeakHashSet.h>
 
 namespace JSC {
 class AbstractSlotVisitor;
@@ -122,7 +123,7 @@
     Ref<MutationCallback> m_callback;
     Vector<Ref<MutationRecord>> m_records;
     HashSet<GCReachableRef<Node>> m_pendingTargets;
-    HashSet<MutationObserverRegistration*> m_registrations;
+    WeakHashSet<MutationObserverRegistration> m_registrations;
     unsigned m_priority;
 };
 

Modified: trunk/Source/WebCore/dom/MutationObserverRegistration.h (279433 => 279434)


--- trunk/Source/WebCore/dom/MutationObserverRegistration.h	2021-06-30 22:09:03 UTC (rev 279433)
+++ trunk/Source/WebCore/dom/MutationObserverRegistration.h	2021-06-30 22:17:44 UTC (rev 279434)
@@ -33,6 +33,7 @@
 #include "GCReachableRef.h"
 #include "MutationObserver.h"
 #include <wtf/HashSet.h>
+#include <wtf/WeakPtr.h>
 #include <wtf/text/AtomString.h>
 #include <wtf/text/AtomStringHash.h>
 
@@ -44,7 +45,7 @@
 
 class QualifiedName;
 
-class MutationObserverRegistration {
+class MutationObserverRegistration : public CanMakeWeakPtr<MutationObserverRegistration> {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     MutationObserverRegistration(MutationObserver&, Node&, MutationObserverOptions, const HashSet<AtomString>& attributeFilter);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to