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