WebCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Jan 2008 22:23:28 +0000 (22:23 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Jan 2008 22:23:28 +0000 (22:23 +0000)
commitbf75e543820efb2274e9032656ab72449ae851b8
treedee7b9f865f03d75307c1b3d7eaa6e9ee9fecaa8
parent7aa3a9bba4bb780c80f905a874dd500e48e2a9f5
WebCore:

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases

        - remove the default database quota setting

        - simplify the quota-related client calls by merging the one for a new database with
          the one for an existing database, adding a feature where you can get details about
          a database being created using the same functions that work on the other databases,
          and removing the parameters and return values, instead having clients use a function
          to set the quota

        - fix unsafe multi-thread access to the database tracker's quota map
        - fix bug in deleteAllDatabases where it would iterate a HashMap while modifying it

        The tracker database is now only created when we set the quota for a database origin.
        Thus asking for info about databases won't cause anything to be written to disk.

        * WebCore.base.exp: Updated.

        * bindings/js/GCController.cpp: Added an #if to get rid of an unused function warning.

        * page/Chrome.cpp: Removed database-related functions. There's no problem having the
        code deal directly with the client.
        * page/Chrome.h: Ditto. Also made Chrome inherit from Noncopyable.

        * page/ChromeClient.h: Replaced the two quota-related functions with a single one.
        The details about the state of databases in the origin are now available by asking
        for database details. There's also no need to pass the security origin, since
        it's easy to get that from the frame's document.

        * page/Settings.cpp: Removed the default quota setting.
        * page/Settings.h: Ditto.

        * platform/FileSystem.h: Added deleteEmptyDirectory.
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/qt/FileSystemQt.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/win/FileSystemWin.cpp:
        (WebCore::deleteEmptyDirectory): Added.
        * platform/wx/FileSystemWx.cpp:
        (WebCore::deleteEmptyDirectory): Added placeholder.

        * storage/DatabaseDetails.h: Removed the isValid() function since its name is
        confusing -- we removed our other isValid() functions. For the few callers that
        need this, it's fine to just check name().isEmpty(). Made the member functions
        all const.

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::DatabaseTracker): Removed m_defaultQuota initialization.
        Added m_proposedDatabase and m_thread.
        (WebCore::DatabaseTracker::setDatabaseDirectoryPath): Got rid of code that would
        open the tracker database here. This might slightly speed up launch time, since
        we won't do the I/O until we have to, and before we were actually creating an SQL
        database in this code that's run when we go to the first webpage.
        (WebCore::DatabaseTracker::trackerDatabasePath): Added.
        (WebCore::DatabaseTracker::openTrackerDatabase): Added a boolean parameter telling
        this function whether to create the database. Made this function safe to call if
        the database is already open. Also made the function fail quietly if the path has
        not been set yet.
        (WebCore::DatabaseTracker::canEstablishDatabase): Got rid of the call to the
        establishEntryForOrigin function. The origin is now put in the tracker database
        when the quota is set to a non-zero value. When judging if there's enough space
        for the new database, require at least one byte even if estimatedSize is 0, and
        check for overflow. Also added code here to populate the origins map, which
        guarantees it will be ready when the database uses it on another thread later.
        Also changed this to call the new ChromeClient function.
        (WebCore::DatabaseTracker::hasEntryForDatabase): Added code to open the
        tracker database, since that's no longer done by setDatabaseDirectoryPath.
        (WebCore::DatabaseTracker::originPath): Added.
        (WebCore::DatabaseTracker::fullPathForDatabase): Added code so that this will
        return a null string for the proposed database if called from within the
        ChromeClient function. Also switched from empty string to null string for the
        error cases.
        (WebCore::DatabaseTracker::populateOrigins): Added code to open the tracker
        database.
        (WebCore::DatabaseTracker::databaseNamesForOrigin): Ditto.
        (WebCore::DatabaseTracker::detailsForNameAndOrigin): Ditto. Also added code that
        will return the details of the proposed database if called from within the
        ChromeClient function. This is how the client can learn of the display name and
        the estimated size of the new database.
        (WebCore::DatabaseTracker::setDatabaseDetails): Added code to open the tracker
        database.
        (WebCore::DatabaseTracker::quotaForOrigin): Made this code OK to call on a non-main
        thread by using m_quotaMapGuard to guard access to the map. Other code runs on the
        main thread only, and only functions that write to the map use the lock.
        (WebCore::DatabaseTracker::setQuota): Changed this function so it can insert the
        initial quota as well as updating an existing quota. Added locking since this
        function modifies the quota map. Added code to open the tracker database. Added
        an early exit if the quota is already correct, which is guarantees that if you
        set a quota to 0 it won't trigger creation of a tracker database.
        (WebCore::DatabaseTracker::addDatabase): Added code to open the tracker database.
        (WebCore::DatabaseTracker::deleteAllDatabases): Made a copy of the quota map before
        iterating it to find all the origins. This fixes a problem with the old code where
        it would modify the map while iterating it, which gives assertions in debug builds
        and unpredictable results.
        (WebCore::DatabaseTracker::deleteOrigin): Replaced deleteDatabasesWithOrigin with
        this function. Added code to open the tracker database if needed. Added code to
        delete the origin from the tracker database, and to close the tracker database
        and delete files and directories as needed if we are deleting the final origin.
        (WebCore::DatabaseTracker::deleteDatabase): Added code to open the tracker database
        if needed.

        * storage/DatabaseTracker.h: Renamed databasePath to databaseDirectoryPath for
        clarity, including the data member, and the getter and setter functions.
        Replaced deleteDatabasesWithOrigin with deleteOrigin. Removed the functions
        dealing with default origin quota. There is no default any more; origins start
        with no quota and the client must set a quota. Added trackerDatabasePath and
        originPath helper functions. Added a boolean parameter to openTrackerDatabase
        to tell it whether to create the database or not. Removed the
        establishEntryForOrigin function. Renamed m_originQuotaMap to just m_quotaMap,
        and added m_quotaMapGuard. Added a QuotaMap typedef. Added m_proposedDatabase,
        which holds the origin and details for the current proposed database during
        the client callback function that must decide whether to grant quota. Added a
        m_thread data member for debugging use to assert if functions that can only
        be called on a single thread are misused.

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): Changed to call the
        new exceededDatabaseQuota function instead of the old one.

        * svg/graphics/SVGImageEmptyClients.h: Updated for the change to ChromeClient.

WebKit/gtk:

        Reviewed by John Sullivan.

        - updated for changes to database functions

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebView/webkitprivate.cpp:
        (webkit_init):

WebKit/mac:

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases
        - add a missing export of WebDatabaseExpectedSizeKey
        - implement deleteOrigin: and remove deleteDatabasesWithOrigin:

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager detailsForDatabase:withOrigin:]): Updated to check for a null
        name instead of calling isValid().
        (-[WebDatabaseManager deleteOrigin:]): Implemented.
        (WebKitInitializeDatabasesIfNecessary): Updated for name change.

        * Storage/WebDatabaseManagerPrivate.h: Removed deleteDatabasesWithOrigin:.

        * WebCoreSupport/WebChromeClient.h: Updated for changes to ChromeClient.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota): Replaced the two different client functions
        we had before with a single one.

        * WebKit.exp: Added missing export for WebDatabaseExpectedSizeKey.

        * WebView/WebPreferenceKeysPrivate.h: Removed WebKitDefaultDatabaseQuotaKey.
        * WebView/WebPreferences.m:
        (+[WebPreferences initialize]): Removed the default for WebKitDefaultDatabaseQuotaKey.
        * WebView/WebPreferencesPrivate.h: Removed defaultDatabaseQuota and
        setDefaultDatabaseQuota:.

        * WebView/WebUIDelegatePrivate.h: Replaced the two different database quota delegate
        methods we had before with a single one.

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Removed the code to set the
        default database origin quota in WebCore::Settings based on WebPreferences.

        * WebView/WebViewInternal.h: Removed delegate method dispatch functions for unusual
        types of parameters that the database UI delegate methods had before.

WebKit/qt:

        Reviewed by John Sullivan.

        - updated for changes to ChromeClient database functions

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientQt.h:

WebKit/win:

        Reviewed by John Sullivan.

        - fix <rdar://problem/5644324> Delegate-less WebKit clients should have no databases
        - fix incorrect value for WebDatabaseDisplayNameKey in header

        * Interfaces/IWebDatabaseManager.idl: Renamed detailsForDatabaseWithOrigin to
        detailsForDatabase. Replaced deleteDatabasesWithOrigin with deleteOrigin.
        Renamed deleteDatabaseWithOrigin to deleteDatabase. Fixed incorrect value for
        WebDatabaseDisplayNameKey.
        * Interfaces/IWebPreferencesPrivate.idl: Removed defaultDatabaseQuota and
        setDefaultDatabaseQuota.
        * Interfaces/IWebUIDelegatePrivate.idl: Replaced the two database quota functions
        with a single one.

        * WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota): Replaced the two database quota functions
        with a single one.
        * WebChromeClient.h: Ditto.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::detailsForDatabase): Changed to check for a name of null to
        detect a nonexistent database rather than using isValid.
        (WebDatabaseManager::deleteOrigin): Updated for name change (actually a semantic
        change too, but both have the same name).
        (WebDatabaseManager::deleteDatabase): Updated for name change.
        (WebKitSetWebDatabasesPathIfNecessary): Ditto.

        * WebDatabaseManager.h: Updated for name changes.

        * WebPreferenceKeysPrivate.h: Removed WebKitDefaultDatabaseQuotaKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Removed the default for
        WebKitDefaultDatabaseQuotaKey.
        * WebPreferences.h: Removed defaultDatabaseQuota and setDefaultDatabaseQuota.
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Removed the code to set the
        default database origin quota in WebCore::Settings based on IWebPreferencesPrivate.

WebKit/wx:

        Reviewed by John Sullivan.

        - updated for changes to ChromeClient database functions

        * WebKitSupport/ChromeClientWx.cpp:
        (WebCore::ChromeClientWx::exceededDatabaseQuota):
        * WebKitSupport/ChromeClientWx.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@29698 268f45cc-cd09-0410-ab3c-d52691b4dbfc
53 files changed:
WebCore/ChangeLog
WebCore/WebCore.base.exp
WebCore/bindings/js/GCController.cpp
WebCore/page/Chrome.cpp
WebCore/page/Chrome.h
WebCore/page/ChromeClient.h
WebCore/page/Settings.cpp
WebCore/page/Settings.h
WebCore/platform/FileSystem.h
WebCore/platform/gtk/FileSystemGtk.cpp
WebCore/platform/posix/FileSystemPOSIX.cpp
WebCore/platform/qt/FileSystemQt.cpp
WebCore/platform/win/FileSystemWin.cpp
WebCore/platform/wx/FileSystemWx.cpp
WebCore/storage/DatabaseDetails.h
WebCore/storage/DatabaseTracker.cpp
WebCore/storage/DatabaseTracker.h
WebCore/storage/SQLTransaction.cpp
WebCore/svg/graphics/SVGImageEmptyClients.h
WebKit/gtk/ChangeLog
WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp
WebKit/gtk/WebCoreSupport/ChromeClientGtk.h
WebKit/gtk/WebView/webkitprivate.cpp
WebKit/mac/ChangeLog
WebKit/mac/Storage/WebDatabaseManager.mm
WebKit/mac/Storage/WebDatabaseManagerPrivate.h
WebKit/mac/WebCoreSupport/WebChromeClient.h
WebKit/mac/WebCoreSupport/WebChromeClient.mm
WebKit/mac/WebKit.exp
WebKit/mac/WebView/WebPreferenceKeysPrivate.h
WebKit/mac/WebView/WebPreferences.m
WebKit/mac/WebView/WebPreferencesPrivate.h
WebKit/mac/WebView/WebUIDelegatePrivate.h
WebKit/mac/WebView/WebView.mm
WebKit/mac/WebView/WebViewInternal.h
WebKit/qt/ChangeLog
WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
WebKit/qt/WebCoreSupport/ChromeClientQt.h
WebKit/win/ChangeLog
WebKit/win/Interfaces/IWebDatabaseManager.idl
WebKit/win/Interfaces/IWebPreferencesPrivate.idl
WebKit/win/Interfaces/IWebUIDelegatePrivate.idl
WebKit/win/WebChromeClient.cpp
WebKit/win/WebChromeClient.h
WebKit/win/WebDatabaseManager.cpp
WebKit/win/WebDatabaseManager.h
WebKit/win/WebPreferenceKeysPrivate.h
WebKit/win/WebPreferences.cpp
WebKit/win/WebPreferences.h
WebKit/win/WebView.cpp
WebKit/wx/ChangeLog
WebKit/wx/WebKitSupport/ChromeClientWx.cpp
WebKit/wx/WebKitSupport/ChromeClientWx.h