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(®istration));
+ ASSERT(!m_registrations.contains(registration));
m_registrations.add(®istration);
}
void MutationObserver::observationEnded(MutationObserverRegistration& registration)
{
- ASSERT(m_registrations.contains(®istration));
- m_registrations.remove(®istration);
+ 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(®istration);
}
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