Title: [242677] trunk/Source/WebCore
Revision
242677
Author
[email protected]
Date
2019-03-09 19:26:10 -0800 (Sat, 09 Mar 2019)

Log Message

Add assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
https://bugs.webkit.org/show_bug.cgi?id=195488

Reviewed by Ryosuke Niwa.

Try and figure out how the document can be detached from its frame while we're suspending
DOMWindowExtensions.

* page/DOMWindow.cpp:
(WebCore::DOMWindow::willDetachDocumentFromFrame):
(WebCore::DOMWindow::suspendForPageCache):
* page/DOMWindow.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (242676 => 242677)


--- trunk/Source/WebCore/ChangeLog	2019-03-10 02:25:42 UTC (rev 242676)
+++ trunk/Source/WebCore/ChangeLog	2019-03-10 03:26:10 UTC (rev 242677)
@@ -1,5 +1,20 @@
 2019-03-09  Chris Dumez  <[email protected]>
 
+        Add assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
+        https://bugs.webkit.org/show_bug.cgi?id=195488
+
+        Reviewed by Ryosuke Niwa.
+
+        Try and figure out how the document can be detached from its frame while we're suspending
+        DOMWindowExtensions.
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::willDetachDocumentFromFrame):
+        (WebCore::DOMWindow::suspendForPageCache):
+        * page/DOMWindow.h:
+
+2019-03-09  Chris Dumez  <[email protected]>
+
         Simplify DOMWindowProperty code / handling
         https://bugs.webkit.org/show_bug.cgi?id=195495
 

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (242676 => 242677)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2019-03-10 02:25:42 UTC (rev 242676)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2019-03-10 03:26:10 UTC (rev 242677)
@@ -119,6 +119,7 @@
 #include <wtf/MathExtras.h>
 #include <wtf/NeverDestroyed.h>
 #include <wtf/Ref.h>
+#include <wtf/SetForScope.h>
 #include <wtf/Variant.h>
 #include <wtf/text/WTFString.h>
 
@@ -473,6 +474,8 @@
     if (!frame())
         return;
 
+    RELEASE_ASSERT(!m_isSuspendingObservers);
+
     // It is necessary to copy m_observers to a separate vector because the Observer may
     // unregister themselves from the DOMWindow as a result of the call to willDetachGlobalObjectFromFrame.
     for (auto& observer : copyToVector(m_observers)) {
@@ -521,10 +524,14 @@
 
 void DOMWindow::suspendForPageCache()
 {
+    SetForScope<bool> isSuspendingObservers(m_isSuspendingObservers, true);
+    RELEASE_ASSERT(frame());
+
     for (auto* observer : copyToVector(m_observers)) {
         if (m_observers.contains(observer))
             observer->suspendForPageCache();
     }
+    RELEASE_ASSERT(frame());
 
     m_suspendedForDocumentSuspension = true;
 }

Modified: trunk/Source/WebCore/page/DOMWindow.h (242676 => 242677)


--- trunk/Source/WebCore/page/DOMWindow.h	2019-03-10 02:25:42 UTC (rev 242676)
+++ trunk/Source/WebCore/page/DOMWindow.h	2019-03-10 03:26:10 UTC (rev 242677)
@@ -393,6 +393,7 @@
 
     bool m_shouldPrintWhenFinishedLoading { false };
     bool m_suspendedForDocumentSuspension { false };
+    bool m_isSuspendingObservers { false };
     Optional<bool> m_canShowModalDialogOverride;
 
     HashSet<Observer*> m_observers;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to