In CachedFrame's constructor, release-assert that DOMWindow still has a frame after...
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Mar 2019 16:50:46 +0000 (16:50 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Mar 2019 16:50:46 +0000 (16:50 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195609

Reviewed by Chris Dumez.

r242677 added release assertions to DOMWindow::suspendForPageCache. But when the first release assert in
that function is hit, we still can't tell whether active DOM objects are detaching frames, or if creating
CachedFrame's on one of subframes is causing the frame to go way.

Add a release assertion immediately after creating CachedFrame on subframes to detect this case.

* history/CachedFrame.cpp:
(WebCore::CachedFrame::CachedFrame):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242797 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/history/CachedFrame.cpp

index 9c1d4f2..970a092 100644 (file)
@@ -1,3 +1,19 @@
+2019-03-12  Ryosuke Niwa  <rniwa@webkit.org>
+
+        In CachedFrame's constructor, release-assert that DOMWindow still has a frame after page-caching subframes
+        https://bugs.webkit.org/show_bug.cgi?id=195609
+
+        Reviewed by Chris Dumez.
+
+        r242677 added release assertions to DOMWindow::suspendForPageCache. But when the first release assert in
+        that function is hit, we still can't tell whether active DOM objects are detaching frames, or if creating
+        CachedFrame's on one of subframes is causing the frame to go way.
+
+        Add a release assertion immediately after creating CachedFrame on subframes to detect this case.
+
+        * history/CachedFrame.cpp:
+        (WebCore::CachedFrame::CachedFrame):
+
 2019-03-12  Zalan Bujtas  <zalan@apple.com>
 
         [ContentChangeObserver] Stop content change observation when the touch event turns into long press
index e9c6607..e461649 100644 (file)
@@ -147,6 +147,8 @@ CachedFrame::CachedFrame(Frame& frame)
     for (Frame* child = frame.tree().firstChild(); child; child = child->tree().nextSibling())
         m_childFrames.append(std::make_unique<CachedFrame>(*child));
 
+    RELEASE_ASSERT(m_document->domWindow()->frame());
+
     // Active DOM objects must be suspended before we cache the frame script data.
     m_document->suspend(ReasonForSuspension::PageCache);