Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1440)

Unified Diff: Source/modules/webdatabase/DatabaseSync.cpp

Issue 201623003: Rollback transactions by observing them weakly from DatabaseSync. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/webdatabase/DatabaseSync.cpp
diff --git a/Source/modules/webdatabase/DatabaseSync.cpp b/Source/modules/webdatabase/DatabaseSync.cpp
index f546ed4cdfa00fbba39f01322b9737c05cefa76c..5183c44023595183db86469649bb75f1a302f69b 100644
--- a/Source/modules/webdatabase/DatabaseSync.cpp
+++ b/Source/modules/webdatabase/DatabaseSync.cpp
@@ -84,7 +84,7 @@ void DatabaseSync::changeVersion(const String& oldVersion, const String& newVers
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());
@@ -143,10 +143,10 @@ void DatabaseSync::readTransaction(PassOwnPtr<SQLTransactionSyncCallback> callba
runTransaction(callback, true, exceptionState);
}
-void DatabaseSync::rollbackTransaction(PassRefPtr<SQLTransactionSync> transaction)
+void DatabaseSync::rollbackTransaction(SQLTransactionSync& transaction)
{
ASSERT(!lastErrorMessage().isEmpty());
- transaction->rollback();
+ transaction.rollback();
setLastErrorMessage("");
return;
}
@@ -161,22 +161,22 @@ void DatabaseSync::runTransaction(PassOwnPtr<SQLTransactionSyncCallback> callbac
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;
}
@@ -194,4 +194,18 @@ void DatabaseSync::closeImmediately()
closeDatabase();
}
+#if ENABLE(OILPAN)
+void DatabaseSync::registerTransaction(SQLTransactionSync* sync)
+{
+ ObserverMap::AddResult result = m_observers.add(sync, nullptr);
+ ASSERT(result.isNewEntry);
+ result.storedValue->value = adoptPtr(new TransactionObserver(sync));
+}
+
+DatabaseSync::TransactionObserver::~TransactionObserver()
+{
+ m_sync->rollbackIfInProgress();
+}
+#endif
+
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698