Crash if IDBTransaction is aborted right after it's created
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Apr 2015 23:47:41 +0000 (23:47 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Apr 2015 23:47:41 +0000 (23:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=144199

Reviewed by Simon Fraser.

Source/WebCore:

Test: storage/indexeddb/transaction-abort.html

* Modules/indexeddb/IDBTransactionBackend.cpp:
(WebCore::IDBTransactionBackend::IDBTransactionBackend): Don't start the
transaction if it is already complete (has been aborted).

LayoutTests:

* platform/mac-wk2/TestExpectations: Unskip storage/indexeddb/transaction-abort.html.
* storage/indexeddb/transaction-abort-expected.txt: Updated since the exact text of
the execptions is different from what was marked here as expected.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183317 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/mac-wk2/TestExpectations
LayoutTests/storage/indexeddb/transaction-abort-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp

index 5ea1e29..03deb21 100644 (file)
@@ -1,3 +1,14 @@
+2015-04-25  Darin Adler  <darin@apple.com>
+
+        Crash if IDBTransaction is aborted right after it's created
+        https://bugs.webkit.org/show_bug.cgi?id=144199
+
+        Reviewed by Simon Fraser.
+
+        * platform/mac-wk2/TestExpectations: Unskip storage/indexeddb/transaction-abort.html.
+        * storage/indexeddb/transaction-abort-expected.txt: Updated since the exact text of
+        the execptions is different from what was marked here as expected.
+
 2015-04-23  Ryosuke Niwa  <rniwa@webkit.org>
 
         class methods should be non-enumerable
index f152336..8305203 100644 (file)
@@ -394,7 +394,6 @@ storage/indexeddb/cursor-cast.html [ Skip ]
 storage/indexeddb/deleted-objects.html [ Skip ] # Crashes under WebCore::GetOperation::GetOperation
 storage/indexeddb/metadata.html [ Skip ] # Crashes under IDBDatabaseBackend::createIndex
 storage/indexeddb/persistence.html [ Skip ] # Crash under IDBDatabaseBackend::createObjectStore
-storage/indexeddb/transaction-abort.html [ Skip ] # IDBTransactionBackend::start()
 webkit.org/b/137314 storage/indexeddb/database-basics.html [ Pass Crash Timeout ] # IDBDatabaseBackend::createObjectStore()
 
 # Blink tests that crash the WebProcess under IDBDatabase::dispatchEvent or IDBRequest::dispatchEvent (possibly all related).
index 6a3db10..b2dcdb1 100644 (file)
@@ -25,7 +25,7 @@ Expecting exception from store.add({x: 'value4', y: 'zzz4'}, 'key4')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'TransactionInactiveError'
-Exception message: Failed to execute 'add' on 'IDBObjectStore': The transaction is not active.
+Exception message: TransactionInactiveError: DOM IDBDatabase Exception 0
 PASS event.target.error.name is 'AbortError'
 PASS trans.error is null
 PASS firstError is true
@@ -39,12 +39,12 @@ Expecting exception from store.add({x: 'value5', y: 'zzz5'}, 'key5')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'TransactionInactiveError'
-Exception message: Failed to execute 'add' on 'IDBObjectStore': The transaction has finished.
+Exception message: TransactionInactiveError: DOM IDBDatabase Exception 0
 Expecting exception from trans.abort()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'abort' on 'IDBTransaction': The transaction has finished.
+Exception message: InvalidStateError: DOM IDBDatabase Exception 11
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ceab269..3a58722 100644 (file)
@@ -1,3 +1,16 @@
+2015-04-25  Darin Adler  <darin@apple.com>
+
+        Crash if IDBTransaction is aborted right after it's created
+        https://bugs.webkit.org/show_bug.cgi?id=144199
+
+        Reviewed by Simon Fraser.
+
+        Test: storage/indexeddb/transaction-abort.html
+
+        * Modules/indexeddb/IDBTransactionBackend.cpp:
+        (WebCore::IDBTransactionBackend::IDBTransactionBackend): Don't start the
+        transaction if it is already complete (has been aborted).
+
 2015-04-25  Martin Robinson  <mrobinson@igalia.com>
 
         Rename ENABLE_3D_RENDERING to ENABLE_3D_TRANSFORMS
index 28409cb..abb5d0f 100644 (file)
@@ -75,6 +75,10 @@ IDBTransactionBackend::IDBTransactionBackend(IDBDatabaseBackend* databaseBackend
             return;
         }
 
+        // Handle the case where the transaction was aborted before the server connection finished opening the transaction.
+        if (backend->m_state == Finished)
+            return;
+
         backend->m_state = Unused;
         if (backend->hasPendingTasks())
             backend->start();