#include "config.h"
#include "modules/webdatabase/DatabaseSync.h"
-#include "bindings/v8/ExceptionState.h"
+#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/ExceptionCode.h"
#include "core/dom/ExecutionContext.h"
#include "platform/Logging.h"
#include "wtf/RefPtr.h"
#include "wtf/text/CString.h"
-namespace WebCore {
+namespace blink {
-PassRefPtr<DatabaseSync> DatabaseSync::create(ExecutionContext*, PassRefPtr<DatabaseBackendBase> backend)
+PassRefPtrWillBeRawPtr<DatabaseSync> DatabaseSync::create(ExecutionContext*, PassRefPtrWillBeRawPtr<DatabaseBackendBase> backend)
{
return static_cast<DatabaseSync*>(backend.get());
}
-DatabaseSync::DatabaseSync(PassRefPtr<DatabaseContext> databaseContext,
+DatabaseSync::DatabaseSync(DatabaseContext* databaseContext,
const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize)
- : DatabaseBase(databaseContext->executionContext())
- , DatabaseBackendSync(databaseContext, name, expectedVersion, displayName, estimatedSize)
+ : DatabaseBackendSync(databaseContext, name, expectedVersion, displayName, estimatedSize)
+ , DatabaseBase(databaseContext->executionContext())
{
ScriptWrappable::init(this);
setFrontend(this);
DatabaseSync::~DatabaseSync()
{
- ASSERT(m_executionContext->isContextThread());
+#if !ENABLE(OILPAN)
+ if (executionContext())
+ ASSERT(executionContext()->isContextThread());
+#endif
+}
+
+void DatabaseSync::trace(Visitor* visitor)
+{
+ DatabaseBackendSync::trace(visitor);
}
void DatabaseSync::changeVersion(const String& oldVersion, const String& newVersion, PassOwnPtr<SQLTransactionSyncCallback> changeVersionCallback, ExceptionState& exceptionState)
{
- ASSERT(m_executionContext->isContextThread());
+ ASSERT(executionContext()->isContextThread());
if (sqliteDatabase().transactionInProgress()) {
reportChangeVersionResult(1, SQLError::DATABASE_ERR, 0);
return;
}
- RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, changeVersionCallback, false);
+ RefPtrWillBeRawPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, changeVersionCallback, false);
transaction->begin(exceptionState);
if (exceptionState.hadException()) {
ASSERT(!lastErrorMessage().isEmpty());
runTransaction(callback, true, exceptionState);
}
-void DatabaseSync::rollbackTransaction(PassRefPtr<SQLTransactionSync> transaction)
+void DatabaseSync::rollbackTransaction(SQLTransactionSync& transaction)
{
ASSERT(!lastErrorMessage().isEmpty());
- transaction->rollback();
+ transaction.rollback();
setLastErrorMessage("");
return;
}
void DatabaseSync::runTransaction(PassOwnPtr<SQLTransactionSyncCallback> callback, bool readOnly, ExceptionState& exceptionState)
{
- ASSERT(m_executionContext->isContextThread());
+ ASSERT(executionContext()->isContextThread());
if (sqliteDatabase().transactionInProgress()) {
setLastErrorMessage("unable to start a transaction from within a transaction");
return;
}
- RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, callback, readOnly);
+ RefPtrWillBeRawPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, callback, readOnly);
transaction->begin(exceptionState);
if (exceptionState.hadException()) {
- rollbackTransaction(transaction);
+ rollbackTransaction(*transaction);
return;
}
transaction->execute(exceptionState);
if (exceptionState.hadException()) {
- rollbackTransaction(transaction);
+ rollbackTransaction(*transaction);
return;
}
transaction->commit(exceptionState);
if (exceptionState.hadException()) {
- rollbackTransaction(transaction);
+ rollbackTransaction(*transaction);
return;
}
void DatabaseSync::closeImmediately()
{
- ASSERT(m_executionContext->isContextThread());
+ ASSERT(executionContext()->isContextThread());
if (!opened())
return;
closeDatabase();
}
-} // namespace WebCore
+void DatabaseSync::observeTransaction(SQLTransactionSync& transaction)
+{
+#if ENABLE(OILPAN)
+ m_observers.add(&transaction, adoptPtr(new TransactionObserver(transaction)));
+#endif
+}
+
+#if ENABLE(OILPAN)
+DatabaseSync::TransactionObserver::~TransactionObserver()
+{
+ m_transaction.rollbackIfInProgress();
+}
+#endif
+
+} // namespace blink