gtk:
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Sep 2007 00:40:53 +0000 (00:40 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 8 Sep 2007 00:40:53 +0000 (00:40 +0000)
commit4c4820f31c8cd10d65e3133b711cbec99359de3e
treec06067c941825458758c96437330c4b5b21ef731
parent22284d864a4d5cb664fcac05ad35d28a9f660a6c
gtk:

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.

        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no
        memory cache, or a very tiny one

        Keep the GTK build working with an empty stub.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didPerformFirstNavigation):
        * WebCoreSupport/FrameLoaderClientGtk.h:

WebCore:

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.

        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no
        memory cache, or a very tiny one

        Added a client callback to notify WebKit when the first navigation has
        taken place. "Navigation" here means a transition from one page to
        another that ends up in the back/forward list.

        WebKit Mac uses this notification to grow its cache model under certain
        circumstances.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addBackForwardItemClippedAtTarget):
        * loader/FrameLoaderClient.h:

        * platform/graphics/svg/SVGImageEmptyClients.h:
        (WebCore::SVGEmptyFrameLoaderClient::didPerformFirstNavigation): Ah,
        SVGEmptyFrameLoaderClient, my old friend.

WebKit:

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.

        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no
        memory cache, or a very tiny one

        High level explanation:
            - Added SPI for specifying a cache model on a per-WebView basis.
            (Hopefully, this will become API soon.) We balance competing
            cache models simply by using the largest one that pertains at a
            given time.

            - Added heuristic for guessing a default cache model in WebViews
            that don't specify one:
                1) Default to DocumentViewer for apps linked on or after this
                WebKit. Default to DocumentBrowser otherwise.

                2) Assign specific defaults to well-known clients based on
                bundle ID.

                3) Grow the default to DocumentBrowser if a navigation takes
                place.

            - As a part of the DocumentBrowser & PrimaryWebBrowser settings:
                1) Make the Foundation disk cache much much bigger than the
                default 20MB, if space allows. (This is a hedge against a small
                WebCore cache in DocumentBrowser mode, but also an all-around
                win for page load speed.)

                2) Scaled the Foundation memory cache's capacity with physical
                RAM, just like we do with other caches. This is a small win on
                low memory systems.

        * Misc/WebKitSystemBits.h:
        * Misc/WebKitSystemBits.m:
        (WebMemorySize): Renamed from "WebSystemMainMemory."
        (WebHomeDirectoryFreeSize): Added function to measure the free space
        on the user's home directory. We use this as a factor in determining
        the disk cache's cacpacity.

        * Misc/WebKitVersionChecks.h: Support for linked on or after check.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didPerformFirstNavigation): Implementation of
        heuristic rule #3.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.m:
        (cacheModelForMainBundle): Implementation of heuristic rule #2.
        (-[NSMutableDictionary _web_checkLastReferenceForIdentifier:]): Added
        notification for when a WebPreferences instance becomes inert. We use
        this to shrink the cache model back down if possible. Moved this code
        into a WebPreferences method, since it's not really a feature of
        NSDictionary.

        * WebView/WebPreferencesPrivate.h: SPI declarations.

        * WebView/WebView.mm: Replaced manual notification posts with calls to
        the _postPreferencesChangesNotification convenience method.

        (-[WebView _preferencesChangedNotification:]): Merged dispersed code
        for updating preferences-related settings into this one function. This
        was needed for an earlier version of the patch, even though the
        current version could probably do without it.

        (+[WebView _preferencesChangedNotification:]): Added a class-level
        listener for WebPreferences changes. This listener takes care of
        modifying the class-level global cache model setting if necessary.

        (+[WebPreferences standardPreferences]): Removed call to
        _postPreferencesChangesNotification because the notification already
        posts when you create the WebPreferences object. (I noticed this
        inefficiency because my new _preferencesChangedNotification: method was
        called excessively at startup.)

        Also Added explicit tracking of WebPreferences clients, so we know when
        a WebPreferences instance becomes inert:

        (-[WebPreferences didRemoveFromWebView]):
        (-[WebPreferences willAddToWebView]):

        (+[WebView _setCacheModel:]): Translates a cache model into actual
        settings in various APIs. Caches that have unbounded value grow
        linearly relative to available space. Caches that have bounded value
        grow inverse-squaredly relative to available space.

WebKitQt:

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.

        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no
        memory cache, or a very tiny one

        Keep the Qt build working with an empty stub.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        * WebCoreSupport/FrameLoaderClientQt.h:

win:

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.

        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no
        memory cache, or a very tiny one

        Keep the Windows build working with an empty stub.

        * WebFrame.cpp:
        (FrameLoaderClient::didPerformFirstNavigation):
        * WebFrame.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@25430 268f45cc-cd09-0410-ab3c-d52691b4dbfc
25 files changed:
WebCore/ChangeLog
WebCore/loader/FrameLoader.cpp
WebCore/loader/FrameLoader.h
WebCore/loader/FrameLoaderClient.h
WebCore/platform/graphics/svg/SVGImageEmptyClients.h
WebKit/ChangeLog
WebKit/Misc/WebKitSystemBits.h
WebKit/Misc/WebKitSystemBits.m
WebKit/Misc/WebKitVersionChecks.h
WebKit/WebCoreSupport/WebFrameLoaderClient.h
WebKit/WebCoreSupport/WebFrameLoaderClient.mm
WebKit/WebView/WebPreferenceKeysPrivate.h
WebKit/WebView/WebPreferences.m
WebKit/WebView/WebPreferencesPrivate.h
WebKit/WebView/WebView.mm
WebKit/WebView/WebViewInternal.h
WebKit/gtk/ChangeLog
WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.h
WebKit/win/ChangeLog
WebKit/win/WebFrame.cpp
WebKit/win/WebFrame.h
WebKitQt/ChangeLog
WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp
WebKitQt/WebCoreSupport/FrameLoaderClientQt.h