⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 242677 in webkit


Ignore:
Timestamp:
Mar 9, 2019, 7:26:10 PM (7 years ago)
Author:
Chris Dumez
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:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r242676 r242677  
     12019-03-09  Chris Dumez  <cdumez@apple.com>
     2
     3        Add assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
     4        https://bugs.webkit.org/show_bug.cgi?id=195488
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Try and figure out how the document can be detached from its frame while we're suspending
     9        DOMWindowExtensions.
     10
     11        * page/DOMWindow.cpp:
     12        (WebCore::DOMWindow::willDetachDocumentFromFrame):
     13        (WebCore::DOMWindow::suspendForPageCache):
     14        * page/DOMWindow.h:
     15
    1162019-03-09  Chris Dumez  <cdumez@apple.com>
    217
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r242676 r242677  
    120120#include <wtf/NeverDestroyed.h>
    121121#include <wtf/Ref.h>
     122#include <wtf/SetForScope.h>
    122123#include <wtf/Variant.h>
    123124#include <wtf/text/WTFString.h>
     
    474475        return;
    475476
     477    RELEASE_ASSERT(!m_isSuspendingObservers);
     478
    476479    // It is necessary to copy m_observers to a separate vector because the Observer may
    477480    // unregister themselves from the DOMWindow as a result of the call to willDetachGlobalObjectFromFrame.
     
    522525void DOMWindow::suspendForPageCache()
    523526{
     527    SetForScope<bool> isSuspendingObservers(m_isSuspendingObservers, true);
     528    RELEASE_ASSERT(frame());
     529
    524530    for (auto* observer : copyToVector(m_observers)) {
    525531        if (m_observers.contains(observer))
    526532            observer->suspendForPageCache();
    527533    }
     534    RELEASE_ASSERT(frame());
    528535
    529536    m_suspendedForDocumentSuspension = true;
  • trunk/Source/WebCore/page/DOMWindow.h

    r242676 r242677  
    394394    bool m_shouldPrintWhenFinishedLoading { false };
    395395    bool m_suspendedForDocumentSuspension { false };
     396    bool m_isSuspendingObservers { false };
    396397    Optional<bool> m_canShowModalDialogOverride;
    397398
Note: See TracChangeset for help on using the changeset viewer.