Changeset 119219 in webkit


Ignore:
Timestamp:
Jun 1, 2012 5:30:09 AM (12 years ago)
Author:
morrita@google.com
Message:

Frame::willDetachPage() shouldn't be called more than once.
https://bugs.webkit.org/show_bug.cgi?id=88056

Reviewed by Ryosuke Niwa.

This change moved willDetachPage() to private and calls it from
detachFromParent(). Also, it checks m_page and call
willDetachPage() only once, if m_page is available.

No new tests. Covered by existing suites.

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::closeAndRemoveChild):
(WebCore::FrameLoader::detachFromParent):

  • page/Frame.cpp:

(WebCore::Frame::detachFromPage):
(WebCore):
(WebCore::Frame::willDetachPage):

  • page/Frame.h:

(Frame):

  • page/Page.cpp:

(WebCore::Page::~Page):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r119216 r119219  
     12012-06-01  MORITA Hajime  <morrita@google.com>
     2
     3        Frame::willDetachPage() shouldn't be called more than once.
     4        https://bugs.webkit.org/show_bug.cgi?id=88056
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        This change moved willDetachPage() to private and calls it from
     9        detachFromParent().  Also, it checks m_page and call
     10        willDetachPage() only once, if m_page is available.
     11
     12        No new tests. Covered by existing suites.
     13
     14        * loader/FrameLoader.cpp:
     15        (WebCore::FrameLoader::closeAndRemoveChild):
     16        (WebCore::FrameLoader::detachFromParent):
     17        * page/Frame.cpp:
     18        (WebCore::Frame::detachFromPage):
     19        (WebCore):
     20        (WebCore::Frame::willDetachPage):
     21        * page/Frame.h:
     22        (Frame):
     23        * page/Page.cpp:
     24        (WebCore::Page::~Page):
     25
    1262012-06-01  Pierre Rossi  <pierre.rossi@gmail.com>
    227
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r118086 r119219  
    22672267    if (child->ownerElement() && child->page())
    22682268        child->page()->decrementFrameCount();
    2269     child->willDetachPage();
    22702269    child->detachFromPage();
    22712270
     
    23462345    } else {
    23472346        m_frame->setView(0);
    2348         m_frame->willDetachPage();
    23492347        m_frame->detachFromPage();
    23502348    }
  • trunk/Source/WebCore/page/Frame.cpp

    r118039 r119219  
    690690}
    691691
    692 void Frame::willDetachPage()
     692void Frame::detachFromPage()
    693693{
    694694    if (Frame* parent = tree()->parent())
    695695        parent->loader()->checkLoadComplete();
    696 
     696    if (m_page)
     697        willDetachPage();
     698    m_page = 0;
     699}
     700
     701
     702void Frame::willDetachPage()
     703{
    697704    HashSet<FrameDestructionObserver*>::iterator stop = m_destructionObservers.end();
    698705    for (HashSet<FrameDestructionObserver*>::iterator it = m_destructionObservers.begin(); it != stop; ++it)
    699706        (*it)->willDetachPage();
    700707
    701     // FIXME: It's unclear as to why this is called more than once, but it is,
    702     // so page() could be NULL.
    703     if (page() && page()->focusController()->focusedFrame() == this)
     708    if (page()->focusController()->focusedFrame() == this)
    704709        page()->focusController()->setFocusedFrame(0);
    705710
  • trunk/Source/WebCore/page/Frame.h

    r113466 r119219  
    9292        void removeDestructionObserver(FrameDestructionObserver*);
    9393
    94         void willDetachPage();
    9594        void detachFromPage();
    9695        void disconnectOwnerElement();
     
    208207
    209208        void injectUserScriptsForWorld(DOMWrapperWorld*, const UserScriptVector&, UserScriptInjectionTime);
     209        void willDetachPage();
    210210
    211211        HashSet<FrameDestructionObserver*> m_destructionObservers;
     
    352352    }
    353353
    354     inline void Frame::detachFromPage()
    355     {
    356         m_page = 0;
    357     }
    358 
    359354    inline EventHandler* Frame::eventHandler() const
    360355    {
  • trunk/Source/WebCore/page/Page.cpp

    r116574 r119219  
    188188    allPages->remove(this);
    189189   
    190     for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext()) {
    191         frame->willDetachPage();
     190    for (Frame* frame = mainFrame(); frame; frame = frame->tree()->traverseNext())
    192191        frame->detachFromPage();
    193     }
    194192
    195193    m_editorClient->pageDestroyed();
Note: See TracChangeset for help on using the changeset viewer.