<rdar://problem/5453494> Better lifetime management of WebDataSource and...
authoradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Sep 2007 17:27:23 +0000 (17:27 +0000)
committeradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Sep 2007 17:27:23 +0000 (17:27 +0000)
commite269dc94bbc2095e6ed57fe6183dfb9c1cb3ea1e
tree0dedf659d925943b765b64ef069fcb540905504a
parent0911c79d1bb666a8f1e77b9e0a18a4cfc1edc6cd
    <rdar://problem/5453494> Better lifetime management of WebDataSource and WebDocumentLoader
        The problem was that WebDataSource does not hold a strong reference to the WebDocumentLoader.  If
        a WebDataSource is still around after the loader has been destroyed, it'll just point to
        a stale WebDocumentLoader.
        To fix this without a circular reference, WebDataSource now holds a strong reference to the
        WebDocumentLoader.  The WebDocumentLoader holds a strong reference to the WebDataSource
        until it's detached from the WebFrame.  When the WebDataSource is destroyed, it'll notify
        its WebDocumentLoader so the loader will clear any references to it.

        Reviewed by Darin.

        * WebDataSource.cpp:
        (WebDataSource::~WebDataSource): call WebDocumentLoader::detachDataSource() so the loader
        will clear any references to this data source
        (WebDataSource::documentLoader): m_loader is now a RefPtr so we need to call get().
        * WebDataSource.h:
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::WebDocumentLoader): initialize m_dataSource since it's no longer a COMPtr.
        (WebDocumentLoader::~WebDocumentLoader): release m_dataSource if necessary
        (WebDocumentLoader::setDataSource): add a reference to m_dataSource
        (WebDocumentLoader::dataSource):
        (WebDocumentLoader::detachDataSource): clear m_detachedDataSource.
        (WebDocumentLoader::attachToFrame): call setDataSource() so it'll add the reference to the data source if necessary.
        (WebDocumentLoader::detachFromFrame): release the reference to the data source
        * WebDocumentLoader.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@25415 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebKit/win/ChangeLog
WebKit/win/WebDataSource.cpp
WebKit/win/WebDataSource.h
WebKit/win/WebDocumentLoader.cpp
WebKit/win/WebDocumentLoader.h