Browse Source

LibWeb: Allow removing DocumentObserver hooks

Some callers (namely WebDriver) will want to stop receiving updates from
the DocumentObserver.
Timothy Flynn 8 months ago
parent
commit
247307a2a2
1 changed files with 12 additions and 3 deletions
  1. 12 3
      Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp

+ 12 - 3
Userland/Libraries/LibWeb/DOM/DocumentObserver.cpp

@@ -36,17 +36,26 @@ void DocumentObserver::finalize()
 
 
 void DocumentObserver::set_document_became_inactive(Function<void()> callback)
 void DocumentObserver::set_document_became_inactive(Function<void()> callback)
 {
 {
-    m_document_became_inactive = JS::create_heap_function(vm().heap(), move(callback));
+    if (callback)
+        m_document_became_inactive = JS::create_heap_function(vm().heap(), move(callback));
+    else
+        m_document_became_inactive = nullptr;
 }
 }
 
 
 void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
 void DocumentObserver::set_document_completely_loaded(Function<void()> callback)
 {
 {
-    m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback));
+    if (callback)
+        m_document_completely_loaded = JS::create_heap_function(vm().heap(), move(callback));
+    else
+        m_document_completely_loaded = nullptr;
 }
 }
 
 
 void DocumentObserver::set_document_readiness_observer(Function<void(HTML::DocumentReadyState)> callback)
 void DocumentObserver::set_document_readiness_observer(Function<void(HTML::DocumentReadyState)> callback)
 {
 {
-    m_document_readiness_observer = JS::create_heap_function(vm().heap(), move(callback));
+    if (callback)
+        m_document_readiness_observer = JS::create_heap_function(vm().heap(), move(callback));
+    else
+        m_document_readiness_observer = nullptr;
 }
 }
 
 
 }
 }