Chromium Code Reviews| Index: Source/modules/webdatabase/DatabaseSync.cpp | 
| diff --git a/Source/modules/webdatabase/DatabaseSync.cpp b/Source/modules/webdatabase/DatabaseSync.cpp | 
| index f546ed4cdfa00fbba39f01322b9737c05cefa76c..7c4297406792d6fe12d83ff4d646e6622cddd36c 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(); | 
| } | 
| +void DatabaseSync::observeTransaction(SQLTransactionSync& transaction) | 
| +{ | 
| +#if ENABLE(OILPAN) | 
| + m_observers.add(&transaction, adoptPtr(new TransactionObserver(transaction))); | 
| 
 
haraken
2014/03/18 09:59:09
Who removes an item from m_observers? I cannot fin
 
zerny-chromium
2014/03/18 10:09:09
They are removed as part of the weak processing of
 
haraken
2014/03/18 11:31:33
Makes sense.
 
 | 
| +#endif | 
| +} | 
| + | 
| +#if ENABLE(OILPAN) | 
| +DatabaseSync::TransactionObserver::~TransactionObserver() | 
| +{ | 
| + m_transaction.rollbackIfInProgress(); | 
| +} | 
| +#endif | 
| + | 
| } // namespace WebCore |