Changeset 31521 in webkit


Ignore:
Timestamp:
Apr 1, 2008 1:47:04 AM (16 years ago)
Author:
Simon Hausmann
Message:

Holger Hans Peter Freyther <holger.freyther@trolltech.com>

  • Get the RefCounting of WebCore::Frame right and make sure that both QWebFrame and WebCore::Frame get destroyed if we leave site with subframes and on the end of the application.
  • Use adoptRef in FrameLoaderClientQt::createFrame to get the refs right for subframes. We do not want to add an extra reference. Without this we are leaking subframes.
  • Assume that the lifetime of a Frame and FrameLoader are the same, when the Frame is gone we want to destroy the QWebFrame (e.g. on a page with subframes). Add delete m_webFrame in the frameLoaderDestroyed method to do that.
  • If we happen to delete the QWebFrame before the FrameLoaderClientQt we set m_webFrame to zero in the FrameLoaderClientQt to avoid bad things.
Location:
trunk/WebKit/qt
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/qt/Api/qwebframe.cpp

    r31520 r31521  
    154154QWebFrame::~QWebFrame()
    155155{
    156     Q_ASSERT(d->frame == 0);
     156    if (d->frame && d->frame->loader() && d->frame->loader()->client())
     157        static_cast<FrameLoaderClientQt*>(d->frame->loader()->client())->m_webFrame = 0;
     158       
    157159    delete d;
    158160}
  • trunk/WebKit/qt/ChangeLog

    r31520 r31521  
     12008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
     2
     3        Reviewed by Simon.
     4
     5        * Get the RefCounting of WebCore::Frame right and make sure that both QWebFrame
     6        and WebCore::Frame get destroyed if we leave site with subframes and on the
     7        end of the application.
     8        * Use adoptRef in FrameLoaderClientQt::createFrame to get the refs right for subframes. We
     9        do not want to add an extra reference. Without this we are leaking subframes.
     10        * Assume that the lifetime of a Frame and FrameLoader are the same, when the Frame is gone
     11        we want to destroy the QWebFrame (e.g. on a page with subframes). Add delete m_webFrame
     12        in the frameLoaderDestroyed method to do that.
     13        * If we happen to delete the QWebFrame before the FrameLoaderClientQt we set m_webFrame to
     14        zero in the FrameLoaderClientQt to avoid bad things.
     15       
     16
     17        * Api/qwebframe.cpp:
     18        (QWebFrame::~QWebFrame):
     19        * WebCoreSupport/FrameLoaderClientQt.cpp:
     20        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
     21        (WebCore::FrameLoaderClientQt::objectContentType):
     22        * WebCoreSupport/FrameLoaderClientQt.h:
     23
    1242008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
    225
  • trunk/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp

    r31520 r31521  
    191191void FrameLoaderClientQt::detachedFromParent4()
    192192{
    193     if (!m_webFrame)
    194         return;
    195     m_webFrame->d->frame = 0;
    196     m_webFrame = 0;
    197     m_frame = 0;
    198193}
    199194
     
    445440void FrameLoaderClientQt::frameLoaderDestroyed()
    446441{
    447     Q_ASSERT(m_webFrame == 0);
    448     Q_ASSERT(m_frame == 0);
     442    delete m_webFrame;
     443    m_frame = 0;
     444    m_webFrame = 0;
     445
    449446    delete this;
    450447}
     
    735732    emit m_webFrame->page()->frameCreated(webFrame);
    736733
    737     RefPtr<Frame> childFrame = adoptRef(webFrame->d->frame.get());
     734    RefPtr<Frame> childFrame = adoptRef(webFrame->d->frame);
    738735
    739736    // FIXME: All of the below should probably be moved over into WebCore
  • trunk/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h

    r31516 r31521  
    22 * Copyright (C) 2006 Zack Rusin <zack@kde.org>
    33 * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
     4 * Copyright (C) 2007-2008 Trolltech ASA
    45 *
    56 * All rights reserved.
     
    5556        Q_OBJECT
    5657
     58        friend class ::QWebFrame;
    5759        void callPolicyFunction(FramePolicyFunction function, PolicyAction action);
    5860    private slots:
Note: See TracChangeset for help on using the changeset viewer.