#ifndef Database_h
#define Database_h
#if ENABLE(DATABASE)
#include "AbstractDatabase.h"
#include "ExceptionCode.h"
#include "PlatformString.h"
#include <wtf/Deque.h>
#include <wtf/Forward.h>
namespace WebCore {
class DatabaseCallback;
class ScriptExecutionContext;
class SecurityOrigin;
class SQLTransaction;
class SQLTransactionCallback;
class SQLTransactionClient;
class SQLTransactionCoordinator;
class SQLTransactionErrorCallback;
class VoidCallback;
class Database : public AbstractDatabase {
public:
virtual ~Database();
static PassRefPtr<Database> openDatabase(ScriptExecutionContext*, const String& name, const String& expectedVersion, const String& displayName,
unsigned long estimatedSize, PassRefPtr<DatabaseCallback>, ExceptionCode&);
virtual String version() const;
void changeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<SQLTransactionCallback>,
PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
void transaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
void readTransaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>, PassRefPtr<VoidCallback> successCallback);
Vector<String> tableNames();
virtual SecurityOrigin* securityOrigin() const;
virtual void markAsDeletedAndClose();
bool deleted() const { return m_deleted; }
void close();
virtual void closeImmediately();
unsigned long long databaseSize() const;
unsigned long long maximumSize() const;
void scheduleTransactionCallback(SQLTransaction*);
void scheduleTransactionStep(SQLTransaction*, bool immediately = false);
SQLTransactionClient* transactionClient() const;
SQLTransactionCoordinator* transactionCoordinator() const;
private:
class DatabaseOpenTask;
class DatabaseCloseTask;
class DatabaseTransactionTask;
class DatabaseTableNamesTask;
Database(ScriptExecutionContext*, const String& name, const String& expectedVersion,
const String& displayName, unsigned long estimatedSize);
void runTransaction(PassRefPtr<SQLTransactionCallback>, PassRefPtr<SQLTransactionErrorCallback>,
PassRefPtr<VoidCallback> successCallback, bool readOnly);
bool openAndVerifyVersion(bool setVersionInNewDatabase, ExceptionCode&);
virtual bool performOpenAndVerify(bool setVersionInNewDatabase, ExceptionCode&);
void inProgressTransactionCompleted();
void scheduleTransaction();
Vector<String> performGetTableNames();
static void deliverPendingCallback(void*);
Deque<RefPtr<SQLTransaction> > m_transactionQueue;
Mutex m_transactionInProgressMutex;
bool m_transactionInProgress;
bool m_isTransactionQueueEnabled;
RefPtr<SecurityOrigin> m_databaseThreadSecurityOrigin;
bool m_deleted;
};
}
#endif // ENABLE(DATABASE)
#endif // Database_h