Changeset 30226 in webkit


Ignore:
Timestamp:
Feb 14, 2008 4:26:44 AM (16 years ago)
Author:
zecke@webkit.org
Message:
  • Make sure that the WebCore::Frame is living as long as the WebKitWebFrame wrapped around it. All current calls to WebCore::Frame from within the WebKitWebFrame are safe, even in the case where the WebCore::Frame is already detached from the WebCore::Page.
  • For the mainFrame the WebKitWebView is holding the initial reference and will unref on destruction.
  • For sub-frames the FramerLoaderClientGtk.cpp will do the unrefing when the frame gets detached from the parent.
  • Make sure FrameLoader::detachFromParent gets called by calling FrameLoader::detachChildren
Location:
trunk/WebKit/gtk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit/gtk/ChangeLog

    r30225 r30226  
     12008-02-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
     2
     3        Reviewed by Alp.
     4
     5        * Make sure that the WebCore::Frame is living as long as the WebKitWebFrame
     6        wrapped around it. All current calls to WebCore::Frame from within the
     7        WebKitWebFrame are safe, even in the case where the WebCore::Frame is already
     8        detached from the WebCore::Page.
     9        * For the mainFrame the WebKitWebView is holding the initial reference and
     10        will unref on destruction.
     11        * For sub-frames the FramerLoaderClientGtk.cpp will do the unrefing when the
     12        frame gets detached from the parent.
     13        * Make sure FrameLoader::detachFromParent gets called by calling FrameLoader::detachChildren
     14
     15        * WebCoreSupport/FrameLoaderClientGtk.cpp:
     16        (WebKit::FrameLoaderClient::detachedFromParent4):
     17        * webkit/webkitprivate.cpp:
     18        (WebKit::core):
     19        * webkit/webkitprivate.h:
     20        * webkit/webkitwebframe.cpp:
     21        * webkit/webkitwebview.cpp:
     22
    1232008-02-14  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
    224
  • trunk/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp

    r30223 r30226  
    453453void FrameLoaderClient::detachedFromParent4()
    454454{
    455     notImplemented();
     455    ASSERT(m_frame);
     456    g_object_unref(m_frame);
     457    m_frame = 0;
    456458}
    457459
  • trunk/WebKit/gtk/webkit/webkitprivate.cpp

    r29985 r30226  
    5050
    5151    WebKitWebFramePrivate* priv = frame->priv;
    52     return priv ? priv->coreFrame : 0;
     52    return priv ? priv->coreFrame.get() : 0;
    5353}
    5454
  • trunk/WebKit/gtk/webkit/webkitprivate.h

    r30223 r30226  
    9090    typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
    9191    struct _WebKitWebFramePrivate {
    92         WebCore::Frame* coreFrame;
     92        WTF::RefPtr<WebCore::Frame> coreFrame;
    9393        WebCore::FrameLoaderClient* client;
    9494        WebKitWebView* webView;
  • trunk/WebKit/gtk/webkit/webkitwebframe.cpp

    r30225 r30226  
    9494
    9595    priv->coreFrame->loader()->cancelAndClear();
     96    priv->coreFrame = 0;
     97
    9698    g_free(priv->name);
    9799    g_free(priv->title);
     
    217219    priv->coreFrame = new Frame(viewPriv->corePage, 0, priv->client);
    218220
    219     FrameView* frameView = new FrameView(priv->coreFrame);
     221    FrameView* frameView = new FrameView(priv->coreFrame.get());
    220222    frameView->setContainingWindow(GTK_CONTAINER(webView));
    221223    frameView->setGtkAdjustments(GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, 0.0, 0.0, 0.0, 0.0)),
     
    238240    priv->coreFrame = new Frame(viewPriv->corePage, element, priv->client);
    239241
    240     FrameView* frameView = new FrameView(priv->coreFrame);
     242    FrameView* frameView = new FrameView(priv->coreFrame.get());
    241243    frameView->setContainingWindow(GTK_CONTAINER(webView));
    242244    priv->coreFrame->setView(frameView);
  • trunk/WebKit/gtk/webkit/webkitwebview.cpp

    r30201 r30226  
    613613    webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(object));
    614614
     615    core(priv->mainFrame)->loader()->detachChildren();
    615616    delete priv->corePage;
    616617
Note: See TracChangeset for help on using the changeset viewer.