Changeset 142193 in webkit
- Timestamp:
- Feb 7, 2013 3:49:28 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 16 edited
- 4 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/CMakeLists.txt
r142143 r142193 974 974 Modules/webdatabase/SQLStatementSync.cpp 975 975 Modules/webdatabase/SQLTransaction.cpp 976 Modules/webdatabase/SQLTransactionBackend.cpp 977 Modules/webdatabase/SQLTransactionBackendSync.cpp 976 978 Modules/webdatabase/SQLTransactionClient.cpp 977 979 Modules/webdatabase/SQLTransactionCoordinator.cpp -
trunk/Source/WebCore/ChangeLog
r142191 r142193 1 2013-02-07 Mark Lam <mark.lam@apple.com> 2 3 Introduce SQLTransactionBackend and SQLTransactionBackendSync. 4 https://bugs.webkit.org/show_bug.cgi?id=109109. 5 6 Reviewed by Anders Carlsson. 7 8 - Renamed SQLTransaction and SQLTransactionSync to SQLTransactionBackend 9 and SQLTransactionBackendSync respectively. 10 - Added back SQLTransaction and SQLTransactionSync as new files, and have 11 their classes extends their respective backends. This is a stop gap 12 measure to keep things working until the front-end and back-end can be 13 properly split. 14 Note: these files will be committed in a subsequent commit to ensure 15 that the patching goes smoothly. 16 - Where needed, I made use of new SQLTransaction::from() and 17 SQLTransactionSync::from() static methods that "get" the front-end 18 transactions from the back-ends. This is also a stop gap measure to 19 keep things working until the proper refactoring is complete. 20 - Fixed up pre-existing style checker violations that are now detected 21 on code that were touched during my renaming. 22 - Added the back-end files to all the build files. 23 24 No new tests. 25 26 * CMakeLists.txt: 27 * GNUmakefile.list.am: 28 * Modules/webdatabase/Database.cpp: 29 (WebCore::Database::scheduleTransactionStep): 30 * Modules/webdatabase/Database.h: 31 (Database): 32 * Modules/webdatabase/DatabaseBackend.h: 33 (DatabaseBackend): 34 * Modules/webdatabase/DatabaseTask.cpp: 35 (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask): 36 * Modules/webdatabase/DatabaseTask.h: 37 (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::create): 38 (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::transaction): 39 (DatabaseBackendAsync::DatabaseTransactionTask): 40 * Modules/webdatabase/SQLTransaction.cpp: Removed. 41 * Modules/webdatabase/SQLTransaction.h: Removed. 42 * Modules/webdatabase/SQLTransactionBackend.cpp: Copied from Source/WebCore/Modules/webdatabase/SQLTransaction.cpp. 43 (WebCore::SQLTransactionBackend::SQLTransactionBackend): 44 (WebCore::SQLTransactionBackend::~SQLTransactionBackend): 45 (WebCore::SQLTransactionBackend::executeSQL): 46 (WebCore::SQLTransactionBackend::enqueueStatement): 47 (WebCore::SQLTransactionBackend::debugStepName): 48 (WebCore::SQLTransactionBackend::checkAndHandleClosedOrInterruptedDatabase): 49 (WebCore::SQLTransactionBackend::performNextStep): 50 (WebCore::SQLTransactionBackend::performPendingCallback): 51 (WebCore::SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown): 52 (WebCore::SQLTransactionBackend::acquireLock): 53 (WebCore::SQLTransactionBackend::lockAcquired): 54 (WebCore::SQLTransactionBackend::openTransactionAndPreflight): 55 (WebCore::SQLTransactionBackend::deliverTransactionCallback): 56 (WebCore::SQLTransactionBackend::scheduleToRunStatements): 57 (WebCore::SQLTransactionBackend::runStatements): 58 (WebCore::SQLTransactionBackend::getNextStatement): 59 (WebCore::SQLTransactionBackend::runCurrentStatement): 60 (WebCore::SQLTransactionBackend::handleCurrentStatementError): 61 (WebCore::SQLTransactionBackend::deliverStatementCallback): 62 (WebCore::SQLTransactionBackend::deliverQuotaIncreaseCallback): 63 (WebCore::SQLTransactionBackend::postflightAndCommit): 64 (WebCore::SQLTransactionBackend::deliverSuccessCallback): 65 (WebCore::SQLTransactionBackend::cleanupAfterSuccessCallback): 66 (WebCore::SQLTransactionBackend::handleTransactionError): 67 (WebCore::SQLTransactionBackend::deliverTransactionErrorCallback): 68 (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback): 69 * Modules/webdatabase/SQLTransactionBackend.h: Copied from Source/WebCore/Modules/webdatabase/SQLTransaction.h. 70 (SQLTransactionBackend): 71 * Modules/webdatabase/SQLTransactionBackendSync.cpp: Copied from Source/WebCore/Modules/webdatabase/SQLTransactionSync.cpp. 72 (WebCore::SQLTransactionBackendSync::SQLTransactionBackendSync): 73 (WebCore::SQLTransactionBackendSync::~SQLTransactionBackendSync): 74 (WebCore::SQLTransactionBackendSync::executeSQL): 75 (WebCore::SQLTransactionBackendSync::begin): 76 (WebCore::SQLTransactionBackendSync::execute): 77 (WebCore::SQLTransactionBackendSync::commit): 78 (WebCore::SQLTransactionBackendSync::rollback): 79 * Modules/webdatabase/SQLTransactionBackendSync.h: Copied from Source/WebCore/Modules/webdatabase/SQLTransactionSync.h. 80 (SQLTransactionBackendSync): 81 * Modules/webdatabase/SQLTransactionCoordinator.cpp: 82 (WebCore::getDatabaseIdentifier): 83 (WebCore::SQLTransactionCoordinator::processPendingTransactions): 84 (WebCore::SQLTransactionCoordinator::acquireLock): 85 (WebCore::SQLTransactionCoordinator::releaseLock): 86 (WebCore::SQLTransactionCoordinator::shutdown): 87 * Modules/webdatabase/SQLTransactionCoordinator.h: 88 (SQLTransactionCoordinator): 89 (WebCore::SQLTransactionCoordinator::SQLTransactionCoordinator): 90 (CoordinationInfo): 91 * Modules/webdatabase/SQLTransactionSync.cpp: Removed. 92 * Modules/webdatabase/SQLTransactionSync.h: Removed. 93 * Target.pri: 94 * WebCore.gypi: 95 * WebCore.vcproj/WebCore.vcproj: 96 * WebCore.vcxproj/WebCore.vcxproj: 97 * WebCore.vcxproj/WebCore.vcxproj.filters: 98 * WebCore.xcodeproj/project.pbxproj: 99 1 100 2013-02-07 Dean Jackson <dino@apple.com> 2 101 -
trunk/Source/WebCore/GNUmakefile.list.am
r142094 r142193 2153 2153 Source/WebCore/Modules/webdatabase/SQLStatementSync.cpp \ 2154 2154 Source/WebCore/Modules/webdatabase/SQLStatementSync.h \ 2155 Source/WebCore/Modules/webdatabase/SQLTransaction.cpp \ 2156 Source/WebCore/Modules/webdatabase/SQLTransaction.h \ 2157 Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp \ 2158 Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h \ 2159 Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp \ 2160 Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.h \ 2155 2161 Source/WebCore/Modules/webdatabase/SQLTransactionCallback.h \ 2156 2162 Source/WebCore/Modules/webdatabase/SQLTransactionClient.cpp \ … … 2158 2164 Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp \ 2159 2165 Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h \ 2160 Source/WebCore/Modules/webdatabase/SQLTransaction.cpp \2161 2166 Source/WebCore/Modules/webdatabase/SQLTransactionErrorCallback.h \ 2162 Source/WebCore/Modules/webdatabase/SQLTransaction.h \2163 2167 Source/WebCore/Modules/webdatabase/SQLTransactionSyncCallback.h \ 2164 2168 Source/WebCore/Modules/webdatabase/SQLTransactionSync.cpp \ -
trunk/Source/WebCore/Modules/webdatabase/Database.cpp
r142030 r142193 1 1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 256 256 } 257 257 258 void Database::scheduleTransactionStep(SQLTransaction * transaction, bool immediately)258 void Database::scheduleTransactionStep(SQLTransactionBackend* transaction, bool immediately) 259 259 { 260 260 if (!databaseContext()->databaseThread()) -
trunk/Source/WebCore/Modules/webdatabase/Database.h
r142030 r142193 1 1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 45 45 class SecurityOrigin; 46 46 class SQLTransaction; 47 class SQLTransactionBackend; 47 48 class SQLTransactionCallback; 48 49 class SQLTransactionClient; … … 80 81 81 82 void scheduleTransactionCallback(SQLTransaction*); 82 void scheduleTransactionStep(SQLTransaction *, bool immediately = false);83 void scheduleTransactionStep(SQLTransactionBackend*, bool immediately = false); 83 84 84 85 SQLTransactionClient* transactionClient() const; -
trunk/Source/WebCore/Modules/webdatabase/DatabaseBackend.h
r142030 r142193 96 96 friend class SQLStatement; 97 97 friend class SQLStatementSync; 98 friend class SQLTransaction Sync;99 friend class SQLTransaction ;98 friend class SQLTransactionBackend; 99 friend class SQLTransactionBackendSync; 100 100 101 101 DatabaseBackend(PassRefPtr<DatabaseBackendContext>, const String& name, const String& expectedVersion, -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp
r141956 r142193 1 1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 148 148 // Starts a transaction that will report its results via a callback. 149 149 150 DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask(PassRefPtr<SQLTransaction > transaction)150 DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask(PassRefPtr<SQLTransactionBackend> transaction) 151 151 : DatabaseTask(Database::from(transaction->database()), 0) 152 152 , m_transaction(transaction) -
trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h
r141956 r142193 1 1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 34 34 #include "DatabaseBasicTypes.h" 35 35 #include "DatabaseError.h" 36 #include "SQLTransaction .h"36 #include "SQLTransactionBackend.h" 37 37 #include <wtf/OwnPtr.h> 38 38 #include <wtf/PassOwnPtr.h> … … 139 139 public: 140 140 // Transaction task is never synchronous, so no 'synchronizer' parameter. 141 static PassOwnPtr<DatabaseTransactionTask> create(PassRefPtr<SQLTransaction > transaction)141 static PassOwnPtr<DatabaseTransactionTask> create(PassRefPtr<SQLTransactionBackend> transaction) 142 142 { 143 143 return adoptPtr(new DatabaseTransactionTask(transaction)); 144 144 } 145 145 146 SQLTransaction * transaction() const { return m_transaction.get(); }146 SQLTransactionBackend* transaction() const { return m_transaction.get(); } 147 147 148 148 private: 149 explicit DatabaseTransactionTask(PassRefPtr<SQLTransaction >);149 explicit DatabaseTransactionTask(PassRefPtr<SQLTransactionBackend>); 150 150 151 151 virtual void doPerformTask(); … … 154 154 #endif 155 155 156 RefPtr<SQLTransaction > m_transaction;156 RefPtr<SQLTransactionBackend> m_transaction; 157 157 }; 158 158 -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.cpp
r142181 r142193 1 1 /* 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2008, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 29 29 #include "config.h" 30 #include "SQLTransaction .h"30 #include "SQLTransactionBackend.h" 31 31 32 32 #if ENABLE(SQL_DATABASE) … … 38 38 #include "ExceptionCode.h" 39 39 #include "Logging.h" 40 #include "ScriptExecutionContext.h"41 40 #include "SQLError.h" 42 #include "SQLiteTransaction.h"43 41 #include "SQLStatement.h" 44 42 #include "SQLStatementCallback.h" 45 43 #include "SQLStatementErrorCallback.h" 44 #include "SQLTransaction.h" 46 45 #include "SQLTransactionCallback.h" 47 46 #include "SQLTransactionClient.h" … … 49 48 #include "SQLTransactionErrorCallback.h" 50 49 #include "SQLValue.h" 50 #include "SQLiteTransaction.h" 51 #include "ScriptExecutionContext.h" 51 52 #include "VoidCallback.h" 52 53 #include <wtf/OwnPtr.h> … … 62 63 namespace WebCore { 63 64 64 PassRefPtr<SQLTransaction> SQLTransaction::create(Database* db, PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback, 65 PassRefPtr<VoidCallback> successCallback, PassRefPtr<SQLTransactionWrapper> wrapper, bool readOnly) 66 { 67 return adoptRef(new SQLTransaction(db, callback, errorCallback, successCallback, wrapper, readOnly)); 68 } 69 70 SQLTransaction::SQLTransaction(Database* db, PassRefPtr<SQLTransactionCallback> callback, PassRefPtr<SQLTransactionErrorCallback> errorCallback, 71 PassRefPtr<VoidCallback> successCallback, PassRefPtr<SQLTransactionWrapper> wrapper, bool readOnly) 72 : m_nextStep(&SQLTransaction::acquireLock) 65 SQLTransactionBackend::SQLTransactionBackend(Database* db, PassRefPtr<SQLTransactionCallback> callback, 66 PassRefPtr<SQLTransactionErrorCallback> errorCallback, PassRefPtr<VoidCallback> successCallback, 67 PassRefPtr<SQLTransactionWrapper> wrapper, bool readOnly) 68 : m_nextStep(&SQLTransactionBackend::acquireLock) 73 69 , m_executeSqlAllowed(false) 74 70 , m_database(db) … … 86 82 } 87 83 88 SQLTransaction ::~SQLTransaction()84 SQLTransactionBackend::~SQLTransactionBackend() 89 85 { 90 86 ASSERT(!m_sqliteTransaction); 91 87 } 92 88 93 void SQLTransaction ::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e)89 void SQLTransactionBackend::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, PassRefPtr<SQLStatementCallback> callback, PassRefPtr<SQLStatementErrorCallback> callbackError, ExceptionCode& e) 94 90 { 95 91 if (!m_executeSqlAllowed || !m_database->opened()) { … … 112 108 } 113 109 114 void SQLTransaction ::enqueueStatement(PassRefPtr<SQLStatement> statement)110 void SQLTransactionBackend::enqueueStatement(PassRefPtr<SQLStatement> statement) 115 111 { 116 112 MutexLocker locker(m_statementMutex); … … 119 115 120 116 #if !LOG_DISABLED 121 const char* SQLTransaction ::debugStepName(SQLTransaction::TransactionStepMethod step)122 { 123 if (step == &SQLTransaction ::acquireLock)117 const char* SQLTransactionBackend::debugStepName(SQLTransactionBackend::TransactionStepMethod step) 118 { 119 if (step == &SQLTransactionBackend::acquireLock) 124 120 return "acquireLock"; 125 else if (step == &SQLTransaction::openTransactionAndPreflight)121 if (step == &SQLTransactionBackend::openTransactionAndPreflight) 126 122 return "openTransactionAndPreflight"; 127 else if (step == &SQLTransaction::runStatements)123 if (step == &SQLTransactionBackend::runStatements) 128 124 return "runStatements"; 129 else if (step == &SQLTransaction::postflightAndCommit)125 if (step == &SQLTransactionBackend::postflightAndCommit) 130 126 return "postflightAndCommit"; 131 else if (step == &SQLTransaction::cleanupAfterTransactionErrorCallback)127 if (step == &SQLTransactionBackend::cleanupAfterTransactionErrorCallback) 132 128 return "cleanupAfterTransactionErrorCallback"; 133 else if (step == &SQLTransaction::deliverTransactionCallback)129 if (step == &SQLTransactionBackend::deliverTransactionCallback) 134 130 return "deliverTransactionCallback"; 135 else if (step == &SQLTransaction::deliverTransactionErrorCallback)131 if (step == &SQLTransactionBackend::deliverTransactionErrorCallback) 136 132 return "deliverTransactionErrorCallback"; 137 else if (step == &SQLTransaction::deliverStatementCallback)133 if (step == &SQLTransactionBackend::deliverStatementCallback) 138 134 return "deliverStatementCallback"; 139 else if (step == &SQLTransaction::deliverQuotaIncreaseCallback)135 if (step == &SQLTransactionBackend::deliverQuotaIncreaseCallback) 140 136 return "deliverQuotaIncreaseCallback"; 141 else if (step == &SQLTransaction::deliverSuccessCallback)137 if (step == &SQLTransactionBackend::deliverSuccessCallback) 142 138 return "deliverSuccessCallback"; 143 else if (step == &SQLTransaction::cleanupAfterSuccessCallback)139 if (step == &SQLTransactionBackend::cleanupAfterSuccessCallback) 144 140 return "cleanupAfterSuccessCallback"; 145 else 146 return "UNKNOWN"; 141 return "UNKNOWN"; 147 142 } 148 143 #endif 149 144 150 void SQLTransaction ::checkAndHandleClosedOrInterruptedDatabase()145 void SQLTransactionBackend::checkAndHandleClosedOrInterruptedDatabase() 151 146 { 152 147 if (m_database->opened() && !m_database->isInterrupted()) … … 179 174 180 175 181 bool SQLTransaction ::performNextStep()176 bool SQLTransactionBackend::performNextStep() 182 177 { 183 178 LOG(StorageAPI, "Step %s\n", debugStepName(m_nextStep)); 184 179 185 ASSERT(m_nextStep == &SQLTransaction ::acquireLock ||186 m_nextStep == &SQLTransaction::openTransactionAndPreflight ||187 m_nextStep == &SQLTransaction::runStatements ||188 m_nextStep == &SQLTransaction::postflightAndCommit ||189 m_nextStep == &SQLTransaction::cleanupAfterSuccessCallback ||190 m_nextStep == &SQLTransaction::cleanupAfterTransactionErrorCallback);180 ASSERT(m_nextStep == &SQLTransactionBackend::acquireLock 181 || m_nextStep == &SQLTransactionBackend::openTransactionAndPreflight 182 || m_nextStep == &SQLTransactionBackend::runStatements 183 || m_nextStep == &SQLTransactionBackend::postflightAndCommit 184 || m_nextStep == &SQLTransactionBackend::cleanupAfterSuccessCallback 185 || m_nextStep == &SQLTransactionBackend::cleanupAfterTransactionErrorCallback); 191 186 192 187 checkAndHandleClosedOrInterruptedDatabase(); … … 199 194 } 200 195 201 void SQLTransaction ::performPendingCallback()196 void SQLTransactionBackend::performPendingCallback() 202 197 { 203 198 LOG(StorageAPI, "Callback %s\n", debugStepName(m_nextStep)); 204 199 205 ASSERT(m_nextStep == &SQLTransaction ::deliverTransactionCallback ||206 m_nextStep == &SQLTransaction::deliverTransactionErrorCallback ||207 m_nextStep == &SQLTransaction::deliverStatementCallback ||208 m_nextStep == &SQLTransaction::deliverQuotaIncreaseCallback ||209 m_nextStep == &SQLTransaction::deliverSuccessCallback);200 ASSERT(m_nextStep == &SQLTransactionBackend::deliverTransactionCallback 201 || m_nextStep == &SQLTransactionBackend::deliverTransactionErrorCallback 202 || m_nextStep == &SQLTransactionBackend::deliverStatementCallback 203 || m_nextStep == &SQLTransactionBackend::deliverQuotaIncreaseCallback 204 || m_nextStep == &SQLTransactionBackend::deliverSuccessCallback); 210 205 211 206 checkAndHandleClosedOrInterruptedDatabase(); … … 215 210 } 216 211 217 void SQLTransaction ::notifyDatabaseThreadIsShuttingDown()212 void SQLTransactionBackend::notifyDatabaseThreadIsShuttingDown() 218 213 { 219 214 ASSERT(currentThread() == database()->databaseContext()->databaseThread()->getThreadID()); … … 225 220 } 226 221 227 void SQLTransaction ::acquireLock()222 void SQLTransactionBackend::acquireLock() 228 223 { 229 224 m_database->transactionCoordinator()->acquireLock(this); 230 225 } 231 226 232 void SQLTransaction ::lockAcquired()227 void SQLTransactionBackend::lockAcquired() 233 228 { 234 229 m_lockAcquired = true; 235 m_nextStep = &SQLTransaction ::openTransactionAndPreflight;230 m_nextStep = &SQLTransactionBackend::openTransactionAndPreflight; 236 231 LOG(StorageAPI, "Scheduling openTransactionAndPreflight immediately for transaction %p\n", this); 237 232 m_database->scheduleTransactionStep(this, true); 238 233 } 239 234 240 void SQLTransaction ::openTransactionAndPreflight()235 void SQLTransactionBackend::openTransactionAndPreflight() 241 236 { 242 237 ASSERT(!m_database->sqliteDatabase().transactionInProgress()); … … 270 265 m_database->reportStartTransactionResult(2, SQLError::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 271 266 m_transactionError = SQLError::create(SQLError::DATABASE_ERR, "unable to begin transaction", 272 267 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 273 268 m_sqliteTransaction.clear(); 274 269 handleTransactionError(false); … … 283 278 m_database->reportStartTransactionResult(3, SQLError::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 284 279 m_transactionError = SQLError::create(SQLError::DATABASE_ERR, "unable to read version", 285 280 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 286 281 m_database->disableAuthorizer(); 287 282 m_sqliteTransaction.clear(); … … 290 285 return; 291 286 } 292 m_hasVersionMismatch = !m_database->expectedVersion().isEmpty() 293 && (m_database->expectedVersion() != actualVersion); 287 m_hasVersionMismatch = !m_database->expectedVersion().isEmpty() && (m_database->expectedVersion() != actualVersion); 294 288 295 289 // Transaction Steps 3 - Peform preflight steps, jumping to the error callback if they fail 296 if (m_wrapper && !m_wrapper->performPreflight( this)) {290 if (m_wrapper && !m_wrapper->performPreflight(SQLTransaction::from(this))) { 297 291 m_database->disableAuthorizer(); 298 292 m_sqliteTransaction.clear(); … … 308 302 309 303 // Transaction Step 4 - Invoke the transaction callback with the new SQLTransaction object 310 m_nextStep = &SQLTransaction ::deliverTransactionCallback;304 m_nextStep = &SQLTransactionBackend::deliverTransactionCallback; 311 305 LOG(StorageAPI, "Scheduling deliverTransactionCallback for transaction %p\n", this); 312 m_database->scheduleTransactionCallback( this);313 } 314 315 void SQLTransaction ::deliverTransactionCallback()306 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 307 } 308 309 void SQLTransactionBackend::deliverTransactionCallback() 316 310 { 317 311 bool shouldDeliverErrorCallback = false; … … 320 314 if (callback) { 321 315 m_executeSqlAllowed = true; 322 shouldDeliverErrorCallback = !callback->handleEvent( this);316 shouldDeliverErrorCallback = !callback->handleEvent(SQLTransaction::from(this)); 323 317 m_executeSqlAllowed = false; 324 318 } … … 335 329 } 336 330 337 void SQLTransaction ::scheduleToRunStatements()338 { 339 m_nextStep = &SQLTransaction ::runStatements;331 void SQLTransactionBackend::scheduleToRunStatements() 332 { 333 m_nextStep = &SQLTransactionBackend::runStatements; 340 334 LOG(StorageAPI, "Scheduling runStatements for transaction %p\n", this); 341 335 m_database->scheduleTransactionStep(this); 342 336 } 343 337 344 void SQLTransaction ::runStatements()338 void SQLTransactionBackend::runStatements() 345 339 { 346 340 ASSERT(m_lockAcquired); … … 361 355 } else { 362 356 // If the current statement has already been run, failed due to quota constraints, and we're not retrying it, 363 // that means it ended in an error. 357 // that means it ended in an error. Handle it now 364 358 if (m_currentStatement && m_currentStatement->lastExecutionFailedDueToQuota()) { 365 359 handleCurrentStatementError(); … … 373 367 374 368 // If runCurrentStatement() returned false, that means either there was no current statement to run, 375 // or the current statement requires a callback to complete. 369 // or the current statement requires a callback to complete. In the later case, it also scheduled 376 370 // the callback or performed any other additional work so we can return 377 371 if (!m_currentStatement) … … 379 373 } 380 374 381 void SQLTransaction ::getNextStatement()375 void SQLTransactionBackend::getNextStatement() 382 376 { 383 377 m_currentStatement = 0; 384 378 385 379 MutexLocker locker(m_statementMutex); 386 if (!m_statementQueue.isEmpty()) {380 if (!m_statementQueue.isEmpty()) 387 381 m_currentStatement = m_statementQueue.takeFirst(); 388 } 389 } 390 391 bool SQLTransaction::runCurrentStatement() 382 } 383 384 bool SQLTransactionBackend::runCurrentStatement() 392 385 { 393 386 if (!m_currentStatement) … … 408 401 409 402 if (m_currentStatement->hasStatementCallback()) { 410 m_nextStep = &SQLTransaction ::deliverStatementCallback;403 m_nextStep = &SQLTransactionBackend::deliverStatementCallback; 411 404 LOG(StorageAPI, "Scheduling deliverStatementCallback for transaction %p\n", this); 412 m_database->scheduleTransactionCallback( this);405 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 413 406 return false; 414 407 } … … 417 410 418 411 if (m_currentStatement->lastExecutionFailedDueToQuota()) { 419 m_nextStep = &SQLTransaction ::deliverQuotaIncreaseCallback;412 m_nextStep = &SQLTransactionBackend::deliverQuotaIncreaseCallback; 420 413 LOG(StorageAPI, "Scheduling deliverQuotaIncreaseCallback for transaction %p\n", this); 421 m_database->scheduleTransactionCallback( this);414 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 422 415 return false; 423 416 } … … 428 421 } 429 422 430 void SQLTransaction ::handleCurrentStatementError()423 void SQLTransactionBackend::handleCurrentStatementError() 431 424 { 432 425 // Transaction Steps 6.error - Call the statement's error callback, but if there was no error callback, 433 426 // or the transaction was rolled back, jump to the transaction error callback 434 427 if (m_currentStatement->hasStatementErrorCallback() && !m_sqliteTransaction->wasRolledBackBySqlite()) { 435 m_nextStep = &SQLTransaction ::deliverStatementCallback;428 m_nextStep = &SQLTransactionBackend::deliverStatementCallback; 436 429 LOG(StorageAPI, "Scheduling deliverStatementCallback for transaction %p\n", this); 437 m_database->scheduleTransactionCallback( this);430 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 438 431 } else { 439 432 m_transactionError = m_currentStatement->sqlError(); … … 446 439 } 447 440 448 void SQLTransaction ::deliverStatementCallback()441 void SQLTransactionBackend::deliverStatementCallback() 449 442 { 450 443 ASSERT(m_currentStatement); … … 453 446 // Otherwise, continue to loop through the statement queue 454 447 m_executeSqlAllowed = true; 455 bool result = m_currentStatement->performCallback( this);448 bool result = m_currentStatement->performCallback(SQLTransaction::from(this)); 456 449 m_executeSqlAllowed = false; 457 450 … … 464 457 } 465 458 466 void SQLTransaction ::deliverQuotaIncreaseCallback()459 void SQLTransactionBackend::deliverQuotaIncreaseCallback() 467 460 { 468 461 ASSERT(m_currentStatement); … … 471 464 m_shouldRetryCurrentStatement = m_database->transactionClient()->didExceedQuota(database()); 472 465 473 m_nextStep = &SQLTransaction ::runStatements;466 m_nextStep = &SQLTransactionBackend::runStatements; 474 467 LOG(StorageAPI, "Scheduling runStatements for transaction %p\n", this); 475 468 m_database->scheduleTransactionStep(this); 476 469 } 477 470 478 void SQLTransaction ::postflightAndCommit()471 void SQLTransactionBackend::postflightAndCommit() 479 472 { 480 473 ASSERT(m_lockAcquired); 481 474 482 475 // Transaction Step 7 - Peform postflight steps, jumping to the error callback if they fail 483 if (m_wrapper && !m_wrapper->performPostflight( this)) {476 if (m_wrapper && !m_wrapper->performPostflight(SQLTransaction::from(this))) { 484 477 m_transactionError = m_wrapper->sqlError(); 485 478 if (!m_transactionError) { … … 501 494 if (m_sqliteTransaction->inProgress()) { 502 495 if (m_wrapper) 503 m_wrapper->handleCommitFailedAfterPostflight( this);496 m_wrapper->handleCommitFailedAfterPostflight(SQLTransaction::from(this)); 504 497 m_successCallbackWrapper.clear(); 505 498 m_database->reportCommitTransactionResult(4, SQLError::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 506 499 m_transactionError = SQLError::create(SQLError::DATABASE_ERR, "unable to commit transaction", 507 500 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 508 501 handleTransactionError(false); 509 502 return; … … 525 518 // Transaction Step 10 - Deliver success callback, if there is one 526 519 if (m_successCallbackWrapper.hasCallback()) { 527 m_nextStep = &SQLTransaction ::deliverSuccessCallback;520 m_nextStep = &SQLTransactionBackend::deliverSuccessCallback; 528 521 LOG(StorageAPI, "Scheduling deliverSuccessCallback for transaction %p\n", this); 529 m_database->scheduleTransactionCallback( this);522 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 530 523 } else 531 524 cleanupAfterSuccessCallback(); 532 525 } 533 526 534 void SQLTransaction ::deliverSuccessCallback()527 void SQLTransactionBackend::deliverSuccessCallback() 535 528 { 536 529 // Transaction Step 10 - Deliver success callback … … 541 534 // Schedule a "post-success callback" step to return control to the database thread in case there 542 535 // are further transactions queued up for this Database 543 m_nextStep = &SQLTransaction ::cleanupAfterSuccessCallback;536 m_nextStep = &SQLTransactionBackend::cleanupAfterSuccessCallback; 544 537 LOG(StorageAPI, "Scheduling cleanupAfterSuccessCallback for transaction %p\n", this); 545 538 m_database->scheduleTransactionStep(this); 546 539 } 547 540 548 void SQLTransaction ::cleanupAfterSuccessCallback()541 void SQLTransactionBackend::cleanupAfterSuccessCallback() 549 542 { 550 543 ASSERT(m_lockAcquired); … … 561 554 } 562 555 563 void SQLTransaction ::handleTransactionError(bool inCallback)556 void SQLTransactionBackend::handleTransactionError(bool inCallback) 564 557 { 565 558 if (m_errorCallbackWrapper.hasCallback()) { … … 567 560 deliverTransactionErrorCallback(); 568 561 else { 569 m_nextStep = &SQLTransaction ::deliverTransactionErrorCallback;562 m_nextStep = &SQLTransactionBackend::deliverTransactionErrorCallback; 570 563 LOG(StorageAPI, "Scheduling deliverTransactionErrorCallback for transaction %p\n", this); 571 m_database->scheduleTransactionCallback( this);564 m_database->scheduleTransactionCallback(SQLTransaction::from(this)); 572 565 } 573 566 return; … … 577 570 // Transaction Step 12 - Rollback the transaction. 578 571 if (inCallback) { 579 m_nextStep = &SQLTransaction ::cleanupAfterTransactionErrorCallback;572 m_nextStep = &SQLTransactionBackend::cleanupAfterTransactionErrorCallback; 580 573 LOG(StorageAPI, "Scheduling cleanupAfterTransactionErrorCallback for transaction %p\n", this); 581 574 m_database->scheduleTransactionStep(this); 582 } else {575 } else 583 576 cleanupAfterTransactionErrorCallback(); 584 } 585 } 586 587 void SQLTransaction::deliverTransactionErrorCallback() 577 } 578 579 void SQLTransactionBackend::deliverTransactionErrorCallback() 588 580 { 589 581 ASSERT(m_transactionError); … … 595 587 errorCallback->handleEvent(m_transactionError.get()); 596 588 597 m_nextStep = &SQLTransaction ::cleanupAfterTransactionErrorCallback;589 m_nextStep = &SQLTransactionBackend::cleanupAfterTransactionErrorCallback; 598 590 LOG(StorageAPI, "Scheduling cleanupAfterTransactionErrorCallback for transaction %p\n", this); 599 591 m_database->scheduleTransactionStep(this); 600 592 } 601 593 602 void SQLTransaction ::cleanupAfterTransactionErrorCallback()594 void SQLTransactionBackend::cleanupAfterTransactionErrorCallback() 603 595 { 604 596 ASSERT(m_lockAcquired); … … 620 612 } 621 613 622 // Transaction is complete! 614 // Transaction is complete! There is no next step 623 615 LOG(StorageAPI, "Transaction %p is complete with an error\n", this); 624 616 ASSERT(!m_database->sqliteDatabase().transactionInProgress()); -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackend.h
r142181 r142193 1 1 /* 2 * Copyright (C) 2007 Apple Inc. All rights reserved.2 * Copyright (C) 2007, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 27 */ 28 #ifndef SQLTransaction _h29 #define SQLTransaction _h28 #ifndef SQLTransactionBackend_h 29 #define SQLTransactionBackend_h 30 30 31 31 #if ENABLE(SQL_DATABASE) … … 60 60 }; 61 61 62 class SQLTransaction : public ThreadSafeRefCounted<SQLTransaction> {62 class SQLTransactionBackend : public ThreadSafeRefCounted<SQLTransactionBackend> { 63 63 public: 64 static PassRefPtr<SQLTransaction> create(Database*, PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, 65 PassRefPtr<VoidCallback>, PassRefPtr<SQLTransactionWrapper>, bool readOnly = false); 66 67 ~SQLTransaction(); 64 ~SQLTransactionBackend(); 68 65 69 66 void executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, 70 67 PassRefPtr<SQLStatementCallback>, PassRefPtr<SQLStatementErrorCallback>, ExceptionCode&); 71 68 72 69 void lockAcquired(); … … 79 76 80 77 private: 81 SQLTransaction (Database*, PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>,82 78 SQLTransactionBackend(Database*, PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, 79 PassRefPtr<VoidCallback>, PassRefPtr<SQLTransactionWrapper>, bool readOnly); 83 80 84 typedef void (SQLTransaction ::*TransactionStepMethod)();81 typedef void (SQLTransactionBackend::*TransactionStepMethod)(); 85 82 TransactionStepMethod m_nextStep; 86 83 … … 130 127 131 128 OwnPtr<SQLiteTransaction> m_sqliteTransaction; 129 130 friend class SQLTransaction; // FIXME: Remove this once the front-end has been properly isolated. 132 131 }; 133 132 … … 136 135 #endif 137 136 138 #endif // SQLTransaction _h137 #endif // SQLTransactionBackend_h -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.cpp
r142181 r142193 1 1 /* 2 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 30 31 31 32 #include "config.h" 32 #include "SQLTransaction Sync.h"33 #include "SQLTransactionBackendSync.h" 33 34 34 35 #if ENABLE(SQL_DATABASE) … … 41 42 #include "SQLStatementSync.h" 42 43 #include "SQLTransactionClient.h" 44 #include "SQLTransactionSync.h" 43 45 #include "SQLTransactionSyncCallback.h" 44 46 #include "SQLValue.h" … … 51 53 namespace WebCore { 52 54 53 PassRefPtr<SQLTransactionSync> SQLTransactionSync::create(DatabaseSync* db, PassRefPtr<SQLTransactionSyncCallback> callback, bool readOnly) 54 { 55 return adoptRef(new SQLTransactionSync(db, callback, readOnly)); 56 } 57 58 SQLTransactionSync::SQLTransactionSync(DatabaseSync* db, PassRefPtr<SQLTransactionSyncCallback> callback, bool readOnly) 55 SQLTransactionBackendSync::SQLTransactionBackendSync(DatabaseSync* db, PassRefPtr<SQLTransactionSyncCallback> callback, bool readOnly) 59 56 : m_database(db) 60 57 , m_callback(callback) … … 67 64 } 68 65 69 SQLTransaction Sync::~SQLTransactionSync()66 SQLTransactionBackendSync::~SQLTransactionBackendSync() 70 67 { 71 68 ASSERT(m_database->scriptExecutionContext()->isContextThread()); … … 74 71 } 75 72 76 PassRefPtr<SQLResultSet> SQLTransaction Sync::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, ExceptionCode& ec)73 PassRefPtr<SQLResultSet> SQLTransactionBackendSync::executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, ExceptionCode& ec) 77 74 { 78 75 ASSERT(m_database->scriptExecutionContext()->isContextThread()); … … 97 94 int permissions = DatabaseAuthorizer::ReadWriteMask; 98 95 if (!m_database->databaseContext()->allowDatabaseAccess()) 99 permissions |= DatabaseAuthorizer::NoAccessMask;96 permissions |= DatabaseAuthorizer::NoAccessMask; 100 97 else if (m_readOnly) 101 permissions |= DatabaseAuthorizer::ReadOnlyMask;98 permissions |= DatabaseAuthorizer::ReadOnlyMask; 102 99 103 100 SQLStatementSync statement(sqlStatement, arguments, permissions); … … 133 130 } 134 131 135 ExceptionCode SQLTransaction Sync::begin()132 ExceptionCode SQLTransactionBackendSync::begin() 136 133 { 137 134 ASSERT(m_database->scriptExecutionContext()->isContextThread()); … … 161 158 m_database->reportStartTransactionResult(2, SQLException::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 162 159 m_database->setLastErrorMessage("unable to begin transaction", 163 160 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 164 161 m_sqliteTransaction.clear(); 165 162 return SQLException::DATABASE_ERR; … … 173 170 m_database->reportStartTransactionResult(3, SQLException::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 174 171 m_database->setLastErrorMessage("unable to read version", 175 172 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 176 173 rollback(); 177 174 return SQLException::DATABASE_ERR; 178 175 } 179 m_hasVersionMismatch = !m_database->expectedVersion().isEmpty() 180 && (m_database->expectedVersion() != actualVersion); 176 m_hasVersionMismatch = !m_database->expectedVersion().isEmpty() && (m_database->expectedVersion() != actualVersion); 181 177 m_database->reportStartTransactionResult(0, -1, 0); // OK 182 178 return 0; 183 179 } 184 180 185 ExceptionCode SQLTransaction Sync::execute()186 { 187 ASSERT(m_database->scriptExecutionContext()->isContextThread()); 188 if (!m_database->opened() || (m_callback && !m_callback->handleEvent( this))) {181 ExceptionCode SQLTransactionBackendSync::execute() 182 { 183 ASSERT(m_database->scriptExecutionContext()->isContextThread()); 184 if (!m_database->opened() || (m_callback && !m_callback->handleEvent(SQLTransactionSync::from(this)))) { 189 185 if (m_database->lastErrorMessage().isEmpty()) 190 186 m_database->setLastErrorMessage("failed to execute transaction callback"); … … 197 193 } 198 194 199 ExceptionCode SQLTransaction Sync::commit()195 ExceptionCode SQLTransactionBackendSync::commit() 200 196 { 201 197 ASSERT(m_database->scriptExecutionContext()->isContextThread()); … … 216 212 m_database->reportCommitTransactionResult(2, SQLException::DATABASE_ERR, m_database->sqliteDatabase().lastError()); 217 213 m_database->setLastErrorMessage("unable to commit transaction", 218 214 m_database->sqliteDatabase().lastError(), m_database->sqliteDatabase().lastErrorMsg()); 219 215 return SQLException::DATABASE_ERR; 220 216 } … … 234 230 } 235 231 236 void SQLTransaction Sync::rollback()232 void SQLTransactionBackendSync::rollback() 237 233 { 238 234 ASSERT(m_database->scriptExecutionContext()->isContextThread()); -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionBackendSync.h
r142181 r142193 1 1 /* 2 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 29 30 */ 30 31 31 #ifndef SQLTransaction Sync_h32 #define SQLTransaction Sync_h32 #ifndef SQLTransactionBackendSync_h 33 #define SQLTransactionBackendSync_h 33 34 34 35 #if ENABLE(SQL_DATABASE) … … 50 51 51 52 // Instances of this class should be created and used only on the worker's context thread. 52 class SQLTransaction Sync : public RefCounted<SQLTransactionSync> {53 class SQLTransactionBackendSync : public RefCounted<SQLTransactionBackendSync> { 53 54 public: 54 static PassRefPtr<SQLTransactionSync> create(DatabaseSync*, PassRefPtr<SQLTransactionSyncCallback>, bool readOnly = false); 55 56 ~SQLTransactionSync(); 55 ~SQLTransactionBackendSync(); 57 56 58 57 PassRefPtr<SQLResultSet> executeSQL(const String& sqlStatement, const Vector<SQLValue>& arguments, ExceptionCode&); … … 67 66 68 67 private: 69 SQLTransaction Sync(DatabaseSync*, PassRefPtr<SQLTransactionSyncCallback>, bool readOnly);68 SQLTransactionBackendSync(DatabaseSync*, PassRefPtr<SQLTransactionSyncCallback>, bool readOnly); 70 69 71 70 RefPtr<DatabaseSync> m_database; … … 77 76 OwnPtr<SQLTransactionClient> m_transactionClient; 78 77 OwnPtr<SQLiteTransaction> m_sqliteTransaction; 78 79 friend class SQLTransactionSync; // FIXME: Remove this once the front-end has been properly isolated. 79 80 }; 80 81 … … 83 84 #endif 84 85 85 #endif // SQLTransaction Sync_h86 #endif // SQLTransactionBackendSync_h -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp
r130612 r142193 1 1 /* 2 2 * Copyright (C) 2009 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 35 36 36 37 #include "Database.h" 37 #include "SQLTransaction .h"38 #include "SQLTransactionBackend.h" 38 39 #include <wtf/Deque.h> 39 40 #include <wtf/HashMap.h> … … 43 44 namespace WebCore { 44 45 45 static String getDatabaseIdentifier(SQLTransaction * transaction)46 static String getDatabaseIdentifier(SQLTransactionBackend* transaction) 46 47 { 47 48 Database* database = transaction->database(); … … 55 56 return; 56 57 57 RefPtr<SQLTransaction > firstPendingTransaction = info.pendingTransactions.first();58 RefPtr<SQLTransactionBackend> firstPendingTransaction = info.pendingTransactions.first(); 58 59 if (firstPendingTransaction->isReadOnly()) { 59 60 do { … … 69 70 } 70 71 71 void SQLTransactionCoordinator::acquireLock(SQLTransaction * transaction)72 void SQLTransactionCoordinator::acquireLock(SQLTransactionBackend* transaction) 72 73 { 73 74 String dbIdentifier = getDatabaseIdentifier(transaction); … … 84 85 } 85 86 86 void SQLTransactionCoordinator::releaseLock(SQLTransaction * transaction)87 void SQLTransactionCoordinator::releaseLock(SQLTransactionBackend* transaction) 87 88 { 88 89 if (m_coordinationInfoMap.isEmpty()) … … 114 115 if (info.activeWriteTransaction) 115 116 info.activeWriteTransaction->notifyDatabaseThreadIsShuttingDown(); 116 for (HashSet<RefPtr<SQLTransaction > >::iterator activeReadTransactionsIterator =117 for (HashSet<RefPtr<SQLTransactionBackend> >::iterator activeReadTransactionsIterator = 117 118 info.activeReadTransactions.begin(); 118 119 activeReadTransactionsIterator != info.activeReadTransactions.end(); -
trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.h
r109877 r142193 1 1 /* 2 2 * Copyright (C) 2009 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 42 43 namespace WebCore { 43 44 44 class SQLTransaction;45 class SQLTransactionBackend; 45 46 46 47 48 49 50 void acquireLock(SQLTransaction*);51 void releaseLock(SQLTransaction*);52 53 54 typedef Deque<RefPtr<SQLTransaction> > TransactionsQueue;55 56 57 HashSet<RefPtr<SQLTransaction> > activeReadTransactions;58 RefPtr<SQLTransaction> activeWriteTransaction;59 60 61 62 47 class SQLTransactionCoordinator { 48 WTF_MAKE_NONCOPYABLE(SQLTransactionCoordinator); WTF_MAKE_FAST_ALLOCATED; 49 public: 50 SQLTransactionCoordinator() { } 51 void acquireLock(SQLTransactionBackend*); 52 void releaseLock(SQLTransactionBackend*); 53 void shutdown(); 54 private: 55 typedef Deque<RefPtr<SQLTransactionBackend> > TransactionsQueue; 56 struct CoordinationInfo { 57 TransactionsQueue pendingTransactions; 58 HashSet<RefPtr<SQLTransactionBackend> > activeReadTransactions; 59 RefPtr<SQLTransactionBackend> activeWriteTransaction; 60 }; 61 // Maps database names to information about pending transactions 62 typedef HashMap<String, CoordinationInfo> CoordinationInfoMap; 63 CoordinationInfoMap m_coordinationInfoMap; 63 64 64 void processPendingTransactions(CoordinationInfo& info); 65 }; 66 } 65 void processPendingTransactions(CoordinationInfo&); 66 }; 67 68 } // namespace WebCore 67 69 68 70 #endif // ENABLE(SQL_DATABASE) -
trunk/Source/WebCore/Target.pri
r142143 r142193 1480 1480 Modules/webdatabase/SQLStatementSync.h \ 1481 1481 Modules/webdatabase/SQLTransaction.h \ 1482 Modules/webdatabase/SQLTransactionBackend.h \ 1483 Modules/webdatabase/SQLTransactionBackendSync.h \ 1482 1484 Modules/webdatabase/SQLTransactionClient.h \ 1483 1485 Modules/webdatabase/SQLTransactionCoordinator.h \ … … 3055 3057 Modules/webdatabase/SQLStatementSync.cpp \ 3056 3058 Modules/webdatabase/SQLTransaction.cpp \ 3059 Modules/webdatabase/SQLTransactionBackend.cpp \ 3060 Modules/webdatabase/SQLTransactionBackendSync.cpp \ 3057 3061 Modules/webdatabase/SQLTransactionClient.cpp \ 3058 3062 Modules/webdatabase/SQLTransactionCoordinator.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r142072 r142193 1047 1047 'Modules/webdatabase/SQLStatementSync.h', 1048 1048 'Modules/webdatabase/SQLTransaction.cpp', 1049 'Modules/webdatabase/SQLTransaction.h', 1050 'Modules/webdatabase/SQLTransactionBackend.cpp', 1051 'Modules/webdatabase/SQLTransactionBackend.h', 1052 'Modules/webdatabase/SQLTransactionBackendSync.cpp', 1053 'Modules/webdatabase/SQLTransactionBackendSync.h', 1049 1054 'Modules/webdatabase/SQLTransactionClient.cpp', 1050 1055 'Modules/webdatabase/SQLTransactionClient.h', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r141928 r142193 25543 25543 </File> 25544 25544 <File 25545 RelativePath="..\Modules\webdatabase\SQLTransactionBackend.cpp" 25546 > 25547 </File> 25548 <File 25549 RelativePath="..\Modules\webdatabase\SQLTransactionBackend.h" 25550 > 25551 </File> 25552 <File 25553 RelativePath="..\Modules\webdatabase\SQLTransactionBackendSync.cpp" 25554 > 25555 </File> 25556 <File 25557 RelativePath="..\Modules\webdatabase\SQLTransactionBackendSync.h" 25558 > 25559 </File> 25560 <File 25545 25561 RelativePath="..\Modules\webdatabase\SQLTransactionCallback.h" 25546 25562 > -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
r141928 r142193 1877 1877 <ClCompile Include="..\Modules\webdatabase\SQLStatementSync.cpp" /> 1878 1878 <ClCompile Include="..\Modules\webdatabase\SQLTransaction.cpp" /> 1879 <ClCompile Include="..\Modules\webdatabase\SQLTransactionBackend.cpp" /> 1880 <ClCompile Include="..\Modules\webdatabase\SQLTransactionBackendSync.cpp" /> 1879 1881 <ClCompile Include="..\Modules\webdatabase\SQLTransactionClient.cpp" /> 1880 1882 <ClCompile Include="..\Modules\webdatabase\SQLTransactionCoordinator.cpp" /> … … 6440 6442 <ClInclude Include="..\Modules\webdatabase\SQLStatementSync.h" /> 6441 6443 <ClInclude Include="..\Modules\webdatabase\SQLTransaction.h" /> 6444 <ClInclude Include="..\Modules\webdatabase\SQLTransactionBackend.h" /> 6445 <ClInclude Include="..\Modules\webdatabase\SQLTransactionBackendSync.h" /> 6442 6446 <ClInclude Include="..\Modules\webdatabase\SQLTransactionCallback.h" /> 6443 6447 <ClInclude Include="..\Modules\webdatabase\SQLTransactionClient.h" /> -
trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters
r141928 r142193 1900 1900 <Filter>Modules\webdatabase</Filter> 1901 1901 </ClCompile> 1902 <ClCompile Include="..\Modules\webdatabase\SQLTransaction.cpp"> 1903 <Filter>Modules\webdatabase</Filter> 1904 </ClCompile> 1905 <ClCompile Include="..\Modules\webdatabase\SQLTransactionBackend.cpp"> 1906 <Filter>Modules\webdatabase</Filter> 1907 </ClCompile> 1908 <ClCompile Include="..\Modules\webdatabase\SQLTransactionBackendSync.cpp"> 1909 <Filter>Modules\webdatabase</Filter> 1910 </ClCompile> 1902 1911 <ClCompile Include="..\Modules\webdatabase\SQLTransactionClient.cpp"> 1903 1912 <Filter>Modules\webdatabase</Filter> … … 8552 8561 </ClInclude> 8553 8562 <ClInclude Include="..\Modules\webdatabase\SQLTransaction.h"> 8563 <Filter>Modules\webdatabase</Filter> 8564 </ClInclude> 8565 <ClInclude Include="..\Modules\webdatabase\SQLTransactionBackend.h"> 8566 <Filter>Modules\webdatabase</Filter> 8567 </ClInclude> 8568 <ClInclude Include="..\Modules\webdatabase\SQLTransactionBackendSync.h"> 8554 8569 <Filter>Modules\webdatabase</Filter> 8555 8570 </ClInclude> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r142072 r142193 3737 3737 97BC6A4F1505F081001B74AC /* SQLTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97BC6A0D1505F081001B74AC /* SQLTransaction.cpp */; }; 3738 3738 97BC6A501505F081001B74AC /* SQLTransaction.h in Headers */ = {isa = PBXBuildFile; fileRef = 97BC6A0E1505F081001B74AC /* SQLTransaction.h */; }; 3739 FEE1811316C319E800084849 /* SQLTransactionBackend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEE1811116C319E800084849 /* SQLTransactionBackend.cpp */; }; 3740 FEE1811416C319E800084849 /* SQLTransactionBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE1811216C319E800084849 /* SQLTransactionBackend.h */; }; 3741 FEAD7D8716C339EE00D4670B /* SQLTransactionBackendSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEAD7D8516C339EE00D4670B /* SQLTransactionBackendSync.cpp */; }; 3742 FEAD7D8816C339EE00D4670B /* SQLTransactionBackendSync.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAD7D8616C339EE00D4670B /* SQLTransactionBackendSync.h */; }; 3739 3743 97BC6A521505F081001B74AC /* SQLTransactionCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 97BC6A101505F081001B74AC /* SQLTransactionCallback.h */; }; 3740 3744 97BC6A541505F081001B74AC /* SQLTransactionClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97BC6A121505F081001B74AC /* SQLTransactionClient.cpp */; }; … … 11167 11171 97BC6A0E1505F081001B74AC /* SQLTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLTransaction.h; path = Modules/webdatabase/SQLTransaction.h; sourceTree = "<group>"; }; 11168 11172 97BC6A0F1505F081001B74AC /* SQLTransaction.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = SQLTransaction.idl; path = Modules/webdatabase/SQLTransaction.idl; sourceTree = "<group>"; }; 11173 FEE1811116C319E800084849 /* SQLTransactionBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SQLTransactionBackend.cpp; path = Modules/webdatabase/SQLTransactionBackend.cpp; sourceTree = "<group>"; }; 11174 FEE1811216C319E800084849 /* SQLTransactionBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLTransactionBackend.h; path = Modules/webdatabase/SQLTransactionBackend.h; sourceTree = "<group>"; }; 11175 FEAD7D8516C339EE00D4670B /* SQLTransactionBackendSync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SQLTransactionBackendSync.cpp; path = Modules/webdatabase/SQLTransactionBackendSync.cpp; sourceTree = "<group>"; }; 11176 FEAD7D8616C339EE00D4670B /* SQLTransactionBackendSync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLTransactionBackendSync.h; path = Modules/webdatabase/SQLTransactionBackendSync.h; sourceTree = "<group>"; }; 11169 11177 97BC6A101505F081001B74AC /* SQLTransactionCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SQLTransactionCallback.h; path = Modules/webdatabase/SQLTransactionCallback.h; sourceTree = "<group>"; }; 11170 11178 97BC6A111505F081001B74AC /* SQLTransactionCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = SQLTransactionCallback.idl; path = Modules/webdatabase/SQLTransactionCallback.idl; sourceTree = "<group>"; }; … … 18601 18609 97BC6A0E1505F081001B74AC /* SQLTransaction.h */, 18602 18610 97BC6A0F1505F081001B74AC /* SQLTransaction.idl */, 18611 FEE1811116C319E800084849 /* SQLTransactionBackend.cpp */, 18612 FEE1811216C319E800084849 /* SQLTransactionBackend.h */, 18613 FEAD7D8516C339EE00D4670B /* SQLTransactionBackendSync.cpp */, 18614 FEAD7D8616C339EE00D4670B /* SQLTransactionBackendSync.h */, 18603 18615 97BC6A101505F081001B74AC /* SQLTransactionCallback.h */, 18604 18616 97BC6A111505F081001B74AC /* SQLTransactionCallback.idl */, … … 25784 25796 97BC6A4E1505F081001B74AC /* SQLStatementSync.h in Headers */, 25785 25797 97BC6A501505F081001B74AC /* SQLTransaction.h in Headers */, 25798 FEE1811416C319E800084849 /* SQLTransactionBackend.h in Headers */, 25799 FEAD7D8816C339EE00D4670B /* SQLTransactionBackendSync.h in Headers */, 25786 25800 97BC6A521505F081001B74AC /* SQLTransactionCallback.h in Headers */, 25787 25801 97BC6A551505F081001B74AC /* SQLTransactionClient.h in Headers */, … … 29064 29078 97BC6A4D1505F081001B74AC /* SQLStatementSync.cpp in Sources */, 29065 29079 97BC6A4F1505F081001B74AC /* SQLTransaction.cpp in Sources */, 29080 FEE1811316C319E800084849 /* SQLTransactionBackend.cpp in Sources */, 29081 FEAD7D8716C339EE00D4670B /* SQLTransactionBackendSync.cpp in Sources */, 29066 29082 97BC6A541505F081001B74AC /* SQLTransactionClient.cpp in Sources */, 29067 29083 97BC6A561505F081001B74AC /* SQLTransactionCoordinator.cpp in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.