Diff
Modified: trunk/Source/WebCore/ChangeLog (141955 => 141956)
--- trunk/Source/WebCore/ChangeLog 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/ChangeLog 2013-02-06 02:10:49 UTC (rev 141956)
@@ -1,5 +1,59 @@
2013-02-05 Mark Lam <[email protected]>
+ Change DatabaseTask and DatabaseThread to work with DatabaseBackendAsync
+ instead of Database.
+ https://bugs.webkit.org/show_bug.cgi?id=108995.
+
+ Reviewed by Sam Weinig.
+
+ This change also moves the task inner classes from Database to
+ DatabaseBackendAsync.
+
+ No new tests.
+
+ * Modules/webdatabase/Database.cpp:
+ (WebCore::Database::from):
+ * Modules/webdatabase/Database.h:
+ (Database):
+ * Modules/webdatabase/DatabaseBackend.h:
+ (DatabaseBackend):
+ * Modules/webdatabase/DatabaseBackendAsync.h:
+ (DatabaseBackendAsync):
+ * Modules/webdatabase/DatabaseTask.cpp:
+ (WebCore::DatabaseTask::DatabaseTask):
+ (WebCore::DatabaseBackendAsync::DatabaseOpenTask::DatabaseOpenTask):
+ (WebCore::DatabaseBackendAsync::DatabaseOpenTask::doPerformTask):
+ (WebCore::DatabaseBackendAsync::DatabaseOpenTask::debugTaskName):
+ (WebCore::DatabaseBackendAsync::DatabaseCloseTask::DatabaseCloseTask):
+ (WebCore::DatabaseBackendAsync::DatabaseCloseTask::doPerformTask):
+ (WebCore::DatabaseBackendAsync::DatabaseCloseTask::debugTaskName):
+ (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask):
+ (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::doPerformTask):
+ (WebCore::DatabaseBackendAsync::DatabaseTransactionTask::debugTaskName):
+ (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::DatabaseTableNamesTask):
+ (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::doPerformTask):
+ (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::debugTaskName):
+ * Modules/webdatabase/DatabaseTask.h:
+ (WebCore::DatabaseTask::database):
+ (DatabaseTask):
+ (WebCore::DatabaseBackendAsync::DatabaseOpenTask::create):
+ (DatabaseBackendAsync::DatabaseOpenTask):
+ (WebCore::DatabaseBackendAsync::DatabaseCloseTask::create):
+ (DatabaseBackendAsync::DatabaseCloseTask):
+ (WebCore::DatabaseBackendAsync::DatabaseTableNamesTask::create):
+ (DatabaseBackendAsync::DatabaseTableNamesTask):
+ * Modules/webdatabase/DatabaseThread.cpp:
+ (WebCore::DatabaseThread::databaseThread):
+ (WebCore::DatabaseThread::recordDatabaseOpen):
+ (WebCore::DatabaseThread::recordDatabaseClosed):
+ (WebCore::SameDatabasePredicate::SameDatabasePredicate):
+ (SameDatabasePredicate):
+ (WebCore::DatabaseThread::unscheduleDatabaseTasks):
+ * Modules/webdatabase/DatabaseThread.h:
+ (DatabaseThread):
+
+2013-02-05 Mark Lam <[email protected]>
+
Rename ENUM_CLASS_BEGIN() macro to ENUM_CLASS(), and make DatabaseType a strong enum.
https://bugs.webkit.org/show_bug.cgi?id=108988.
Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp 2013-02-06 02:10:49 UTC (rev 141956)
@@ -116,6 +116,11 @@
}
}
+Database* Database::from(DatabaseBackendAsync* backend)
+{
+ return static_cast<Database*>(backend->m_frontend);
+}
+
PassRefPtr<DatabaseBackendAsync> Database::backend()
{
return this;
Modified: trunk/Source/WebCore/Modules/webdatabase/Database.h (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/Database.h 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.h 2013-02-06 02:10:49 UTC (rev 141956)
@@ -63,6 +63,8 @@
void readTransaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
// Internal engine support
+ static Database* from(DatabaseBackendAsync*);
+
Vector<String> tableNames();
virtual SecurityOrigin* securityOrigin() const;
@@ -83,11 +85,6 @@
SQLTransactionCoordinator* transactionCoordinator() const;
private:
- class DatabaseOpenTask;
- class DatabaseCloseTask;
- class DatabaseTransactionTask;
- class DatabaseTableNamesTask;
-
Database(PassRefPtr<DatabaseBackendContext>, const String& name,
const String& expectedVersion, const String& displayName, unsigned long estimatedSize);
PassRefPtr<DatabaseBackendAsync> backend();
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseBackend.h (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseBackend.h 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseBackend.h 2013-02-06 02:10:49 UTC (rev 141956)
@@ -131,6 +131,8 @@
unsigned long m_estimatedSize;
String m_filename;
+ DatabaseBase* m_frontend;
+
#if !LOG_DISABLED || !ERROR_DISABLED
String databaseDebugName() const { return m_contextThreadSecurityOrigin->toString() + "::" + m_name; }
#endif
@@ -141,7 +143,6 @@
bool m_new;
const bool m_isSyncDatabase;
- DatabaseBase* m_frontend;
SQLiteDatabase m_sqliteDatabase;
RefPtr<DatabaseAuthorizer> m_databaseAuthorizer;
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseBackendAsync.h 2013-02-06 02:10:49 UTC (rev 141956)
@@ -33,6 +33,7 @@
namespace WebCore {
+class Database;
class DatabaseServer;
// FIXME: This implementation of DatabaseBackendAsync is only a place holder
@@ -47,6 +48,14 @@
friend class DatabaseManager; // FIXME: remove this once we have isolated this to the backend.
friend class DatabaseServer;
+
+private:
+ class DatabaseOpenTask;
+ class DatabaseCloseTask;
+ class DatabaseTransactionTask;
+ class DatabaseTableNamesTask;
+
+ friend class Database;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.cpp 2013-02-06 02:10:49 UTC (rev 141956)
@@ -31,6 +31,7 @@
#if ENABLE(SQL_DATABASE)
#include "Database.h"
+#include "DatabaseBackendAsync.h"
#include "Logging.h"
namespace WebCore {
@@ -59,7 +60,7 @@
m_synchronousMutex.unlock();
}
-DatabaseTask::DatabaseTask(Database* database, DatabaseTaskSynchronizer* synchronizer)
+DatabaseTask::DatabaseTask(DatabaseBackendAsync* database, DatabaseTaskSynchronizer* synchronizer)
: m_database(database)
, m_synchronizer(synchronizer)
#if !LOG_DISABLED
@@ -98,7 +99,7 @@
// *** DatabaseOpenTask ***
// Opens the database file and verifies the version matches the expected version.
-Database::DatabaseOpenTask::DatabaseOpenTask(Database* database, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
+DatabaseBackendAsync::DatabaseOpenTask::DatabaseOpenTask(DatabaseBackendAsync* database, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
: DatabaseTask(database, synchronizer)
, m_setVersionInNewDatabase(setVersionInNewDatabase)
, m_error(error)
@@ -108,7 +109,7 @@
ASSERT(synchronizer); // A task with output parameters is supposed to be synchronous.
}
-void Database::DatabaseOpenTask::doPerformTask()
+void DatabaseBackendAsync::DatabaseOpenTask::doPerformTask()
{
String errorMessage;
m_success = database()->performOpenAndVerify(m_setVersionInNewDatabase, m_error, errorMessage);
@@ -117,7 +118,7 @@
}
#if !LOG_DISABLED
-const char* Database::DatabaseOpenTask::debugTaskName() const
+const char* DatabaseBackendAsync::DatabaseOpenTask::debugTaskName() const
{
return "DatabaseOpenTask";
}
@@ -126,18 +127,18 @@
// *** DatabaseCloseTask ***
// Closes the database.
-Database::DatabaseCloseTask::DatabaseCloseTask(Database* database, DatabaseTaskSynchronizer* synchronizer)
+DatabaseBackendAsync::DatabaseCloseTask::DatabaseCloseTask(DatabaseBackendAsync* database, DatabaseTaskSynchronizer* synchronizer)
: DatabaseTask(database, synchronizer)
{
}
-void Database::DatabaseCloseTask::doPerformTask()
+void DatabaseBackendAsync::DatabaseCloseTask::doPerformTask()
{
- database()->close();
+ Database::from(database())->close();
}
#if !LOG_DISABLED
-const char* Database::DatabaseCloseTask::debugTaskName() const
+const char* DatabaseBackendAsync::DatabaseCloseTask::debugTaskName() const
{
return "DatabaseCloseTask";
}
@@ -146,20 +147,20 @@
// *** DatabaseTransactionTask ***
// Starts a transaction that will report its results via a callback.
-Database::DatabaseTransactionTask::DatabaseTransactionTask(PassRefPtr<SQLTransaction> transaction)
- : DatabaseTask(transaction->database(), 0)
+DatabaseBackendAsync::DatabaseTransactionTask::DatabaseTransactionTask(PassRefPtr<SQLTransaction> transaction)
+ : DatabaseTask(Database::from(transaction->database()), 0)
, m_transaction(transaction)
{
}
-void Database::DatabaseTransactionTask::doPerformTask()
+void DatabaseBackendAsync::DatabaseTransactionTask::doPerformTask()
{
if (m_transaction->performNextStep())
- m_transaction->database()->inProgressTransactionCompleted();
+ Database::from(m_transaction->database())->inProgressTransactionCompleted();
}
#if !LOG_DISABLED
-const char* Database::DatabaseTransactionTask::debugTaskName() const
+const char* DatabaseBackendAsync::DatabaseTransactionTask::debugTaskName() const
{
return "DatabaseTransactionTask";
}
@@ -168,20 +169,20 @@
// *** DatabaseTableNamesTask ***
// Retrieves a list of all tables in the database - for WebInspector support.
-Database::DatabaseTableNamesTask::DatabaseTableNamesTask(Database* database, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names)
+DatabaseBackendAsync::DatabaseTableNamesTask::DatabaseTableNamesTask(DatabaseBackendAsync* database, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names)
: DatabaseTask(database, synchronizer)
, m_tableNames(names)
{
ASSERT(synchronizer); // A task with output parameters is supposed to be synchronous.
}
-void Database::DatabaseTableNamesTask::doPerformTask()
+void DatabaseBackendAsync::DatabaseTableNamesTask::doPerformTask()
{
- m_tableNames = database()->performGetTableNames();
+ m_tableNames = Database::from(database())->performGetTableNames();
}
#if !LOG_DISABLED
-const char* Database::DatabaseTableNamesTask::debugTaskName() const
+const char* DatabaseBackendAsync::DatabaseTableNamesTask::debugTaskName() const
{
return "DatabaseTableNamesTask";
}
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTask.h 2013-02-06 02:10:49 UTC (rev 141956)
@@ -30,7 +30,7 @@
#if ENABLE(SQL_DATABASE)
-#include "Database.h"
+#include "DatabaseBackendAsync.h"
#include "DatabaseBasicTypes.h"
#include "DatabaseError.h"
#include "SQLTransaction.h"
@@ -77,19 +77,19 @@
void performTask();
- Database* database() const { return m_database; }
+ DatabaseBackendAsync* database() const { return m_database; }
#ifndef NDEBUG
bool hasSynchronizer() const { return m_synchronizer; }
bool hasCheckedForTermination() const { return m_synchronizer->hasCheckedForTermination(); }
#endif
protected:
- DatabaseTask(Database*, DatabaseTaskSynchronizer*);
+ DatabaseTask(DatabaseBackendAsync*, DatabaseTaskSynchronizer*);
private:
virtual void doPerformTask() = 0;
- Database* m_database;
+ DatabaseBackendAsync* m_database;
DatabaseTaskSynchronizer* m_synchronizer;
#if !LOG_DISABLED
@@ -98,15 +98,15 @@
#endif
};
-class Database::DatabaseOpenTask : public DatabaseTask {
+class DatabaseBackendAsync::DatabaseOpenTask : public DatabaseTask {
public:
- static PassOwnPtr<DatabaseOpenTask> create(Database* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
+ static PassOwnPtr<DatabaseOpenTask> create(DatabaseBackendAsync* db, bool setVersionInNewDatabase, DatabaseTaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
{
return adoptPtr(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success));
}
private:
- DatabaseOpenTask(Database*, bool setVersionInNewDatabase, DatabaseTaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success);
+ DatabaseOpenTask(DatabaseBackendAsync*, bool setVersionInNewDatabase, DatabaseTaskSynchronizer*, DatabaseError&, String& errorMessage, bool& success);
virtual void doPerformTask();
#if !LOG_DISABLED
@@ -119,15 +119,15 @@
bool& m_success;
};
-class Database::DatabaseCloseTask : public DatabaseTask {
+class DatabaseBackendAsync::DatabaseCloseTask : public DatabaseTask {
public:
- static PassOwnPtr<DatabaseCloseTask> create(Database* db, DatabaseTaskSynchronizer* synchronizer)
+ static PassOwnPtr<DatabaseCloseTask> create(DatabaseBackendAsync* db, DatabaseTaskSynchronizer* synchronizer)
{
return adoptPtr(new DatabaseCloseTask(db, synchronizer));
}
private:
- DatabaseCloseTask(Database*, DatabaseTaskSynchronizer*);
+ DatabaseCloseTask(DatabaseBackendAsync*, DatabaseTaskSynchronizer*);
virtual void doPerformTask();
#if !LOG_DISABLED
@@ -135,7 +135,7 @@
#endif
};
-class Database::DatabaseTransactionTask : public DatabaseTask {
+class DatabaseBackendAsync::DatabaseTransactionTask : public DatabaseTask {
public:
// Transaction task is never synchronous, so no 'synchronizer' parameter.
static PassOwnPtr<DatabaseTransactionTask> create(PassRefPtr<SQLTransaction> transaction)
@@ -156,15 +156,15 @@
RefPtr<SQLTransaction> m_transaction;
};
-class Database::DatabaseTableNamesTask : public DatabaseTask {
+class DatabaseBackendAsync::DatabaseTableNamesTask : public DatabaseTask {
public:
- static PassOwnPtr<DatabaseTableNamesTask> create(Database* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names)
+ static PassOwnPtr<DatabaseTableNamesTask> create(DatabaseBackendAsync* db, DatabaseTaskSynchronizer* synchronizer, Vector<String>& names)
{
return adoptPtr(new DatabaseTableNamesTask(db, synchronizer, names));
}
private:
- DatabaseTableNamesTask(Database*, DatabaseTaskSynchronizer*, Vector<String>& names);
+ DatabaseTableNamesTask(DatabaseBackendAsync*, DatabaseTaskSynchronizer*, Vector<String>& names);
virtual void doPerformTask();
#if !LOG_DISABLED
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.cpp 2013-02-06 02:10:49 UTC (rev 141956)
@@ -126,7 +126,7 @@
openSetCopy.swap(m_openDatabaseSet);
DatabaseSet::iterator end = openSetCopy.end();
for (DatabaseSet::iterator it = openSetCopy.begin(); it != end; ++it)
- (*it)->close();
+ Database::from((*it).get())->close();
}
// Detach the thread so its resources are no longer of any concern to anyone else
@@ -141,7 +141,7 @@
cleanupSync->taskCompleted();
}
-void DatabaseThread::recordDatabaseOpen(Database* database)
+void DatabaseThread::recordDatabaseOpen(DatabaseBackendAsync* database)
{
ASSERT(currentThread() == m_threadID);
ASSERT(database);
@@ -149,7 +149,7 @@
m_openDatabaseSet.add(database);
}
-void DatabaseThread::recordDatabaseClosed(Database* database)
+void DatabaseThread::recordDatabaseClosed(DatabaseBackendAsync* database)
{
ASSERT(currentThread() == m_threadID);
ASSERT(database);
@@ -171,13 +171,13 @@
class SameDatabasePredicate {
public:
- SameDatabasePredicate(const Database* database) : m_database(database) { }
+ SameDatabasePredicate(const DatabaseBackendAsync* database) : m_database(database) { }
bool operator()(DatabaseTask* task) const { return task->database() == m_database; }
private:
- const Database* m_database;
+ const DatabaseBackendAsync* m_database;
};
-void DatabaseThread::unscheduleDatabaseTasks(Database* database)
+void DatabaseThread::unscheduleDatabaseTasks(DatabaseBackendAsync* database)
{
// Note that the thread loop is running, so some tasks for the database
// may still be executed. This is unavoidable.
Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h (141955 => 141956)
--- trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h 2013-02-06 02:04:59 UTC (rev 141955)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseThread.h 2013-02-06 02:10:49 UTC (rev 141956)
@@ -42,7 +42,7 @@
namespace WebCore {
-class Database;
+class DatabaseBackendAsync;
class DatabaseTask;
class DatabaseTaskSynchronizer;
class Document;
@@ -60,10 +60,10 @@
void scheduleTask(PassOwnPtr<DatabaseTask>);
void scheduleImmediateTask(PassOwnPtr<DatabaseTask>); // This just adds the task to the front of the queue - the caller needs to be extremely careful not to create deadlocks when waiting for completion.
- void unscheduleDatabaseTasks(Database*);
+ void unscheduleDatabaseTasks(DatabaseBackendAsync*);
- void recordDatabaseOpen(Database*);
- void recordDatabaseClosed(Database*);
+ void recordDatabaseOpen(DatabaseBackendAsync*);
+ void recordDatabaseClosed(DatabaseBackendAsync*);
ThreadIdentifier getThreadID() { return m_threadID; }
SQLTransactionClient* transactionClient() { return m_transactionClient.get(); }
@@ -82,7 +82,7 @@
MessageQueue<DatabaseTask> m_queue;
// This set keeps track of the open databases that have been used on this thread.
- typedef HashSet<RefPtr<Database> > DatabaseSet;
+ typedef HashSet<RefPtr<DatabaseBackendAsync> > DatabaseSet;
DatabaseSet m_openDatabaseSet;
OwnPtr<SQLTransactionClient> m_transactionClient;