Changeset 47477 in webkit


Ignore:
Timestamp:
Aug 18, 2009 7:56:13 PM (15 years ago)
Author:
eric@webkit.org
Message:

2009-08-18 Dumitru Daniliuc <dumi@chromium.org>

Reviewed by Dimitri Glazkov.

Added a client to SQLTransaction. In addition to being a place to
get notifications about certain events in a transaction, it is
also an abstraction layer that allows us to plug in different
implementations for each port for how transactions interract with
the main DB. For example, WebCore's default implementation will
make direct calls to DatabaseTracker's methods. At the same time,
Chromium's implementation will send IPCs to the browser process
whenever a transaction needs something from the main DB.

All storage tests pass.

https://bugs.webkit.org/show_bug.cgi?id=27967

  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • WebCoreSources.bkl:
  • storage/Database.cpp: (WebCore::Database::transactionClient):
  • storage/Database.h:
  • storage/DatabaseThread.cpp: (WebCore::DatabaseThread::DatabaseThread):
  • storage/DatabaseThread.h: (WebCore::DatabaseThread::transactionClient):
  • storage/SQLTransaction.cpp: (WebCore::SQLTransaction::runCurrentStatement): (WebCore::SQLTransaction::deliverQuotaIncreaseCallback): (WebCore::SQLTransaction::postflightAndCommit):
  • storage/SQLTransactionClient.cpp: Added.
  • storage/SQLTransactionClient.h: Added.
Location:
trunk/WebCore
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r47476 r47477  
     12009-08-18  Dumitru Daniliuc  <dumi@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Added a client to SQLTransaction. In addition to being a place to
     6        get notifications about certain events in a transaction, it is
     7        also an abstraction layer that allows us to plug in different
     8        implementations for each port for how transactions interract with
     9        the main DB. For example, WebCore's default implementation will
     10        make direct calls to DatabaseTracker's methods. At the same time,
     11        Chromium's implementation will send IPCs to the browser process
     12        whenever a transaction needs something from the main DB.
     13
     14        All storage tests pass.
     15
     16        https://bugs.webkit.org/show_bug.cgi?id=27967
     17
     18        * GNUmakefile.am:
     19        * WebCore.gypi:
     20        * WebCore.pro:
     21        * WebCore.vcproj/WebCore.vcproj:
     22        * WebCore.xcodeproj/project.pbxproj:
     23        * WebCoreSources.bkl:
     24        * storage/Database.cpp:
     25        (WebCore::Database::transactionClient):
     26        * storage/Database.h:
     27        * storage/DatabaseThread.cpp:
     28        (WebCore::DatabaseThread::DatabaseThread):
     29        * storage/DatabaseThread.h:
     30        (WebCore::DatabaseThread::transactionClient):
     31        * storage/SQLTransaction.cpp:
     32        (WebCore::SQLTransaction::runCurrentStatement):
     33        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
     34        (WebCore::SQLTransaction::postflightAndCommit):
     35        * storage/SQLTransactionClient.cpp: Added.
     36        * storage/SQLTransactionClient.h: Added.
     37
    1382009-08-18  Julie Parent  <jparent@chromium.org>
    239
  • trunk/WebCore/GNUmakefile.am

    r47420 r47477  
    21252125        WebCore/storage/SQLTransaction.h \
    21262126        WebCore/storage/SQLTransactionCallback.h \
     2127        WebCore/storage/SQLTransactionClient.cpp \
     2128        WebCore/storage/SQLTransactionClient.h \
    21272129        WebCore/storage/SQLTransactionCoordinator.h \
    21282130        WebCore/storage/SQLTransactionCoordinator.cpp \
  • trunk/WebCore/WebCore.gypi

    r47420 r47477  
    29662966            'storage/SQLTransaction.h',
    29672967            'storage/SQLTransactionCallback.h',
     2968            'storage/SQLTransactionClient.h',
     2969            'storage/SQLTransactionClient.cpp',
    29682970            'storage/SQLTransactionCoordinator.h',
    29692971            'storage/SQLTransactionCoordinator.cpp',
  • trunk/WebCore/WebCore.pro

    r47424 r47477  
    25052505        storage/SQLStatement.cpp \
    25062506        storage/SQLTransaction.cpp \
     2507        storage/SQLTransactionClient.cpp \
    25072508        storage/SQLTransactionCoordinator.cpp \
    25082509        bindings/js/JSCustomSQLStatementCallback.cpp \
     
    25332534        storage/SQLStatement.h \
    25342535        storage/SQLTransaction.h \
     2536        storage/SQLTransactionClient.h \
    25352537        storage/SQLTransactionCoordinator.h \
    25362538        storage/StorageArea.h \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r47420 r47477  
    3081730817                        </File>
    3081830818                        <File
     30819                                RelativePath="..\storage\SQLTransactionClient.h"
     30820                                >
     30821                        </File>
     30822                        <File
     30823                                RelativePath="..\storage\SQLTransactionClient.cpp"
     30824                                >
     30825                        </File>
     30826                        <File
    3081930827                                RelativePath="..\storage\SQLTransactionCoordinator.h"
    3082030828                                >
  • trunk/WebCore/WebCore.xcodeproj/project.pbxproj

    r47440 r47477  
    38603860                B2FA3E190AB75A6F000E5AC4 /* JSSVGZoomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FA3D310AB75A6F000E5AC4 /* JSSVGZoomEvent.h */; };
    38613861                B50F5B810E96CD9900AD71A6 /* WebCoreObjCExtras.mm in Sources */ = {isa = PBXBuildFile; fileRef = B50F5B800E96CD9900AD71A6 /* WebCoreObjCExtras.mm */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
     3862                B51BF6F0102C9E590002C15A /* SQLTransactionClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B51BF6EE102C9E590002C15A /* SQLTransactionClient.cpp */; };
     3863                B51BF6F1102C9E590002C15A /* SQLTransactionClient.h in Headers */ = {isa = PBXBuildFile; fileRef = B51BF6EF102C9E590002C15A /* SQLTransactionClient.h */; };
    38623864                B5A684220FFABE9800D24689 /* SQLiteFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = B5A684210FFABE9800D24689 /* SQLiteFileSystem.h */; };
    38633865                B5A684240FFABEAA00D24689 /* SQLiteFileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5A684230FFABEAA00D24689 /* SQLiteFileSystem.cpp */; };
     
    87698771                B2FA3D310AB75A6F000E5AC4 /* JSSVGZoomEvent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGZoomEvent.h; sourceTree = "<group>"; };
    87708772                B50F5B800E96CD9900AD71A6 /* WebCoreObjCExtras.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreObjCExtras.mm; sourceTree = "<group>"; };
     8773                B51BF6EE102C9E590002C15A /* SQLTransactionClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLTransactionClient.cpp; sourceTree = "<group>"; };
     8774                B51BF6EF102C9E590002C15A /* SQLTransactionClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLTransactionClient.h; sourceTree = "<group>"; };
    87718775                B5A684210FFABE9800D24689 /* SQLiteFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLiteFileSystem.h; path = sql/SQLiteFileSystem.h; sourceTree = "<group>"; };
    87728776                B5A684230FFABEAA00D24689 /* SQLiteFileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SQLiteFileSystem.cpp; path = sql/SQLiteFileSystem.cpp; sourceTree = "<group>"; };
     
    98769880                        isa = PBXGroup;
    98779881                        children = (
     9882                                B51BF6EE102C9E590002C15A /* SQLTransactionClient.cpp */,
     9883                                B51BF6EF102C9E590002C15A /* SQLTransactionClient.h */,
    98789884                                B5C11239102B6C4600096578 /* SQLTransactionCoordinator.cpp */,
    98799885                                B5C1123A102B6C4600096578 /* SQLTransactionCoordinator.h */,
     
    1731717323                                D8B6152F1032495100C8554A /* Cookie.h in Headers */,
    1731817324                                BCFA930810333193007B25D1 /* RenderOverflow.h in Headers */,
     17325                                B51BF6F1102C9E590002C15A /* SQLTransactionClient.h in Headers */,
    1731917326                        );
    1732017327                        runOnlyForDeploymentPostprocessing = 0;
     
    1938319390                                9392262F10321084006E7D5D /* JSCSSRuleListCustom.cpp in Sources */,
    1938419391                                B5C1123B102B6C4600096578 /* SQLTransactionCoordinator.cpp in Sources */,
     19392                                B51BF6F0102C9E590002C15A /* SQLTransactionClient.cpp in Sources */,
    1938519393                        );
    1938619394                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/WebCore/WebCoreSources.bkl

    r47420 r47477  
    10401040        storage/SQLStatement.cpp
    10411041        storage/SQLTransaction.cpp
     1042        storage/SQLTransactionClient.cpp
     1043        storage/SQLTransactionCoordinator.cpp
    10421044        storage/Storage.cpp
    10431045        storage/StorageAreaImpl.cpp
  • trunk/WebCore/storage/Database.cpp

    r47458 r47477  
    5151#include "SQLiteStatement.h"
    5252#include "SQLResultSet.h"
     53#include "SQLTransactionClient.h"
    5354#include "SQLTransactionCoordinator.h"
    5455#include <wtf/MainThread.h>
     
    590591}
    591592
     593SQLTransactionClient* Database::transactionClient() const
     594{
     595    return m_document->databaseThread()->transactionClient();
     596}
     597
    592598SQLTransactionCoordinator* Database::transactionCoordinator() const
    593599{
  • trunk/WebCore/storage/Database.h

    r47170 r47477  
    4242#include <wtf/Forward.h>
    4343#include <wtf/HashSet.h>
    44 #include <wtf/OwnPtr.h>
    4544#include <wtf/PassRefPtr.h>
    4645#include <wtf/RefPtr.h>
     
    5857class SQLResultSet;
    5958class SQLTransactionCallback;
     59class SQLTransactionClient;
    6060class SQLTransactionCoordinator;
    6161class SQLTransactionErrorCallback;
     
    118118    Vector<String> performGetTableNames();
    119119
     120    SQLTransactionClient* transactionClient() const;
    120121    SQLTransactionCoordinator* transactionCoordinator() const;
    121122
  • trunk/WebCore/storage/DatabaseThread.cpp

    r47170 r47477  
    3636#include "DatabaseTask.h"
    3737#include "Logging.h"
     38#include "SQLTransactionClient.h"
    3839#include "SQLTransactionCoordinator.h"
    3940
     
    4243DatabaseThread::DatabaseThread()
    4344    : m_threadID(0)
     45    , m_transactionClient(new SQLTransactionClient())
    4446    , m_transactionCoordinator(new SQLTransactionCoordinator())
    4547{
  • trunk/WebCore/storage/DatabaseThread.h

    r47170 r47477  
    4444class DatabaseTask;
    4545class Document;
     46class SQLTransactionClient;
    4647class SQLTransactionCoordinator;
    4748
     
    6364    ThreadIdentifier getThreadID() { return m_threadID; }
    6465
     66    SQLTransactionClient* transactionClient() { return m_transactionClient.get(); }
    6567    SQLTransactionCoordinator* transactionCoordinator() { return m_transactionCoordinator.get(); }
    6668
     
    8183    DatabaseSet m_openDatabaseSet;
    8284
     85    OwnPtr<SQLTransactionClient> m_transactionClient;
    8386    OwnPtr<SQLTransactionCoordinator> m_transactionCoordinator;
    8487};
  • trunk/WebCore/storage/SQLTransaction.cpp

    r47170 r47477  
    3636#include "DatabaseAuthorizer.h"
    3737#include "DatabaseDetails.h"
    38 #include "DatabaseTracker.h"
    3938#include "Document.h"
    4039#include "ExceptionCode.h"
    4140#include "Logging.h"
    42 #include "OriginQuotaManager.h"
    4341#include "Page.h"
    4442#include "PlatformString.h"
     
    5149#include "SQLStatementCallback.h"
    5250#include "SQLStatementErrorCallback.h"
     51#include "SQLTransactionClient.h"
    5352#include "SQLTransactionCoordinator.h"
    5453#include "SQLValue.h"
     
    351350            m_modifiedDatabase = true;
    352351            // Also dirty the size of this database file for calculating quota usage
    353             OriginQuotaManager& manager(DatabaseTracker::tracker().originQuotaManager());
    354             Locker<OriginQuotaManager> locker(manager);
    355            
    356             manager.markDatabase(m_database.get());
     352            m_database->transactionClient()->didExecuteStatement(this);
    357353        }
    358354           
     
    415411    ASSERT(m_currentStatement);
    416412    ASSERT(!m_shouldRetryCurrentStatement);
    417    
    418     Page* page = m_database->document()->page();
    419     ASSERT(page);
    420    
    421     RefPtr<SecurityOrigin> origin = m_database->securityOriginCopy();
    422    
    423     unsigned long long currentQuota = DatabaseTracker::tracker().quotaForOrigin(origin.get());
    424     page->chrome()->client()->exceededDatabaseQuota(m_database->document()->frame(), m_database->stringIdentifier());
    425     unsigned long long newQuota = DatabaseTracker::tracker().quotaForOrigin(origin.get());
    426    
    427     // If the new quota ended up being larger than the old quota, we will retry the statement.
    428     if (newQuota > currentQuota)
    429         m_shouldRetryCurrentStatement = true;
    430        
     413
     414    m_shouldRetryCurrentStatement = m_database->transactionClient()->didExceedQuota(this);
     415
    431416    m_nextStep = &SQLTransaction::runStatements;
    432417    LOG(StorageAPI, "Scheduling runStatements for transaction %p\n", this);
     
    463448    // The commit was successful, notify the delegates if the transaction modified this database
    464449    if (m_modifiedDatabase)
    465         DatabaseTracker::tracker().scheduleNotifyDatabaseChanged(m_database->m_securityOrigin.get(), m_database->m_name);
    466    
     450        m_database->transactionClient()->didCommitTransaction(this);
     451
    467452    // Now release our unneeded callbacks, to break reference cycles.
    468453    m_callback = 0;
Note: See TracChangeset for help on using the changeset viewer.