Changeset 115549 in webkit


Ignore:
Timestamp:
Apr 27, 2012 11:28:37 PM (12 years ago)
Author:
jochen@chromium.org
Message:

Ensure that there's always a provisional document loader if the frame loader is in provisional state
https://bugs.webkit.org/show_bug.cgi?id=83894

Reviewed by Nate Chapin.

We're still seeing crashes in the FrameLoader where the FrameLoader's
state is "provisional" but there is no provisional document loader. I
added code to update the FrameLoader's state everytime the provisional
document loader is cleared, and added checks that the FrameLoader's
state can't be set to provisional without a provisional loader.

If the crashes go away, or the newly added checks reveal the culprit,
we should relex the checks to use ASSERT() instead of CRASH().

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::init):
(WebCore::FrameLoader::setupForReplace):
(WebCore::FrameLoader::stopAllLoaders):
(WebCore::FrameLoader::clearProvisionalLoad):
(WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
(WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r115546 r115549  
     12012-04-27  Jochen Eisinger  <jochen@chromium.org>
     2
     3        Ensure that there's always a provisional document loader if the frame loader is in provisional state
     4        https://bugs.webkit.org/show_bug.cgi?id=83894
     5
     6        Reviewed by Nate Chapin.
     7
     8        We're still seeing crashes in the FrameLoader where the FrameLoader's
     9        state is "provisional" but there is no provisional document loader. I
     10        added code to update the FrameLoader's state everytime the provisional
     11        document loader is cleared, and added checks that the FrameLoader's
     12        state can't be set to provisional without a provisional loader.
     13
     14        If the crashes go away, or the newly added checks reveal the culprit,
     15        we should relex the checks to use ASSERT() instead of CRASH().
     16
     17        * loader/FrameLoader.cpp:
     18        (WebCore::FrameLoader::init):
     19        (WebCore::FrameLoader::setupForReplace):
     20        (WebCore::FrameLoader::stopAllLoaders):
     21        (WebCore::FrameLoader::clearProvisionalLoad):
     22        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
     23        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
     24
    1252012-04-27  Geoffrey Garen  <ggaren@apple.com>
    226
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r115498 r115549  
    218218    m_stateMachine.advanceTo(FrameLoaderStateMachine::CreatingInitialEmptyDocument);
    219219    setPolicyDocumentLoader(m_client->createDocumentLoader(ResourceRequest(KURL(ParsedURLString, emptyString())), SubstituteData()).get());
     220    // FIXME: Make this an ASSERT() instead once we figured out what's going wrong.
     221    if (!m_policyDocumentLoader.get())
     222        CRASH();
    220223    setProvisionalDocumentLoader(m_policyDocumentLoader.get());
    221224    setState(FrameStateProvisional);
     
    11161119void FrameLoader::setupForReplace()
    11171120{
     1121    // FIXME: Make this an ASSERT() instead once we figured out what's going wrong.
     1122    if (!m_documentLoader.get())
     1123        CRASH();
    11181124    setState(FrameStateProvisional);
    11191125    m_provisionalDocumentLoader = m_documentLoader;
     
    15241530
    15251531    setProvisionalDocumentLoader(0);
     1532    if (m_state == FrameStateProvisional)
     1533        setState(FrameStateComplete);
    15261534
    15271535    m_checkTimer.stop();
     
    16381646void FrameLoader::clearProvisionalLoad()
    16391647{
    1640     setProvisionalDocumentLoader(0);
    16411648    if (Page* page = m_frame->page())
    16421649        page->progress()->progressCompleted(m_frame);
     1650    setProvisionalDocumentLoader(0);
    16431651    setState(FrameStateComplete);
    16441652}
     
    25962604        m_provisionalDocumentLoader->stopLoading();
    25972605        setProvisionalDocumentLoader(0);
     2606        // FIXME: Make this an ASSERT() instead once we figured out what's going wrong.
     2607        if (m_state == FrameStateProvisional)
     2608            CRASH();
    25982609    }
    25992610
     
    27582769#endif
    27592770
     2771    // FIXME: Make this an ASSERT() instead once we figured out what's going wrong.
     2772    if (!m_policyDocumentLoader.get())
     2773        CRASH();
    27602774    setProvisionalDocumentLoader(m_policyDocumentLoader.get());
    27612775    m_loadType = type;
Note: See TracChangeset for help on using the changeset viewer.