Modern IDB: Error message updates for two failing tests.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Jan 2016 19:57:07 +0000 (19:57 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Jan 2016 19:57:07 +0000 (19:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=152735

Reviewed by Alex Christensen.

Source/WebCore:

No new tests (Covered by existing tests).

Add error messages for various operations on deleted objects.

* Modules/indexeddb/client/IDBCursorImpl.cpp:
(WebCore::IDBClient::IDBCursor::update):
(WebCore::IDBClient::IDBCursor::advance):
(WebCore::IDBClient::IDBCursor::continueFunction):
(WebCore::IDBClient::IDBCursor::deleteFunction):

* Modules/indexeddb/client/IDBIndexImpl.cpp:
(WebCore::IDBClient::IDBIndex::openCursor):
(WebCore::IDBClient::IDBIndex::doCount):
(WebCore::IDBClient::IDBIndex::openKeyCursor):
(WebCore::IDBClient::IDBIndex::doGet):
(WebCore::IDBClient::IDBIndex::doGetKey):

* Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
(WebCore::IDBClient::IDBObjectStore::openCursor):
(WebCore::IDBClient::IDBObjectStore::get):
(WebCore::IDBClient::IDBObjectStore::putOrAdd):
(WebCore::IDBClient::IDBObjectStore::deleteFunction):
(WebCore::IDBClient::IDBObjectStore::clear):
(WebCore::IDBClient::IDBObjectStore::createIndex):
(WebCore::IDBClient::IDBObjectStore::index):
(WebCore::IDBClient::IDBObjectStore::deleteIndex):
(WebCore::IDBClient::IDBObjectStore::doCount):

* bindings/js/JSIDBObjectStoreCustom.cpp:
(WebCore::JSIDBObjectStore::createIndex):

LayoutTests:

- Update results to accommodate new error messages.
- openKeyCursor on IDBObjectStore has been removed, so remove that from the results.
- "undefined" and "null" are invalid keys, so update the keypath-basics test to reflect this.

* platform/mac-wk1/TestExpectations:
* storage/indexeddb/deleted-objects-expected.txt:
* storage/indexeddb/keypath-basics-expected.txt:
* storage/indexeddb/resources/keypath-basics.js:
* storage/indexeddb/transaction-basics-expected.txt:

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

LayoutTests/ChangeLog
LayoutTests/platform/mac-wk1/TestExpectations
LayoutTests/storage/indexeddb/deleted-objects-expected.txt
LayoutTests/storage/indexeddb/keypath-basics-expected.txt
LayoutTests/storage/indexeddb/resources/keypath-basics.js
LayoutTests/storage/indexeddb/transaction-basics-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/client/IDBCursorImpl.cpp
Source/WebCore/Modules/indexeddb/client/IDBIndexImpl.cpp
Source/WebCore/Modules/indexeddb/client/IDBObjectStoreImpl.cpp
Source/WebCore/bindings/js/JSIDBObjectStoreCustom.cpp

index d7dcf0f..515052e 100644 (file)
@@ -1,5 +1,22 @@
 2016-01-05  Brady Eidson  <beidson@apple.com>
 
+        Modern IDB: Error message updates for two failing tests.
+        https://bugs.webkit.org/show_bug.cgi?id=152735
+
+        Reviewed by Alex Christensen.
+
+        - Update results to accommodate new error messages.
+        - openKeyCursor on IDBObjectStore has been removed, so remove that from the results.
+        - "undefined" and "null" are invalid keys, so update the keypath-basics test to reflect this.
+        
+        * platform/mac-wk1/TestExpectations:
+        * storage/indexeddb/deleted-objects-expected.txt:
+        * storage/indexeddb/keypath-basics-expected.txt:
+        * storage/indexeddb/resources/keypath-basics.js:
+        * storage/indexeddb/transaction-basics-expected.txt:
+
+2016-01-05  Brady Eidson  <beidson@apple.com>
+
         IndexedDB TestExpectations gardening.
 
         Reviewed by Alex Christensen.
index d62d095..696c340 100644 (file)
@@ -85,10 +85,6 @@ storage/indexeddb/dont-wedge.html [ Skip ]
 storage/indexeddb/intversion-long-queue.html [ Skip ]
 storage/indexeddb/transaction-starvation.html [ Skip ]
 
-# IDB tests with text failures related to error message differences
-storage/indexeddb/deleted-objects.html [ Failure ]
-storage/indexeddb/keypath-basics.html [ Failure ]
-
 # IDB tests with other text failures
 fast/history/page-cache-indexed-closed-db.html [ Failure ]
 storage/indexeddb/intversion-gated-on-delete.html [ Failure ]
index bf0eafa..eb9edee 100644 (file)
@@ -17,12 +17,12 @@ Expecting exception from deletedStore.put(0, 0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'put' on 'IDBObjectStore': The object store has been deleted.
+Exception message: Failed to store record in an IDBObjectStore: The object store has been deleted.
 Expecting exception from deletedStore.add(0, 0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'add' on 'IDBObjectStore': The object store has been deleted.
+Exception message: Failed to store record in an IDBObjectStore: The object store has been deleted.
 Expecting exception from deletedStore.delete(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
@@ -73,31 +73,6 @@ PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
 Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
-Expecting exception from deletedStore.openKeyCursor()
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
-Expecting exception from deletedStore.openKeyCursor(0)
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
-Expecting exception from deletedStore.openKeyCursor(0, 'next')
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
-Expecting exception from deletedStore.openKeyCursor(IDBKeyRange.only(0))
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
-Expecting exception from deletedStore.openKeyCursor(IDBKeyRange.only(0), 'next')
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
-Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.createIndex('name', 'path')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
index eaede54..7067408 100644 (file)
@@ -11,16 +11,6 @@ indexedDB.open(dbname)
 store = db.createObjectStore('name')
 PASS store.keyPath is null
 Deleted all object stores.
-store = db.createObjectStore('name', {keyPath: null})
-PASS store.keyPath is null
-index = store.createIndex('name', null)
-PASS index.keyPath is 'null'
-Deleted all object stores.
-store = db.createObjectStore('name', {keyPath: undefined})
-PASS store.keyPath is null
-index = store.createIndex('name', undefined)
-PASS index.keyPath is 'undefined'
-Deleted all object stores.
 store = db.createObjectStore('name', {keyPath: ''})
 PASS store.keyPath is ''
 index = store.createIndex('name', '')
@@ -154,514 +144,524 @@ Object store key path may not be empty or an array if autoIncrement is true
 Expecting exception from store = db.createObjectStore('storeName', {autoIncrement: true, keyPath: ''})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_ACCESS_ERR
-Exception message: InvalidAccessError: DOM IDBDatabase Exception 15
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
 Deleted all object stores.
 Expecting exception from store = db.createObjectStore('storeName', {autoIncrement: true, keyPath: ['a']})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_ACCESS_ERR
-Exception message: InvalidAccessError: DOM IDBDatabase Exception 15
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
 Deleted all object stores.
 Expecting exception from store = db.createObjectStore('storeName', {autoIncrement: true, keyPath: ['']})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_ACCESS_ERR
-Exception message: InvalidAccessError: DOM IDBDatabase Exception 15
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The autoIncrement option was set but the keyPath option was empty or an array.
 Deleted all object stores.
 
 Key paths which are never valid:
+Expecting exception from db.createObjectStore('name').createIndex('name', null)
+PASS Exception was thrown.
+PASS code is DOMException.SYNTAX_ERR
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
+Deleted all object stores.
+Expecting exception from db.createObjectStore('name').createIndex('name', undefined)
+PASS Exception was thrown.
+PASS code is DOMException.SYNTAX_ERR
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
+Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: ' '})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', ' ')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo '})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo ')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo bar'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo bar')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo. bar'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo. bar')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo .bar'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo .bar')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo..bar'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo..bar')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '+foo'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '+foo')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: 'foo%'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', 'foo%')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '1'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '1')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '1.0'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '1.0')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: []})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', [])
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0300'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0300')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0903'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0903')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0300'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0300')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u203F'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u203F')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u200C'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u200C')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u200D'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u200D')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u002D'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u002D')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0028'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0028')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0029'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0029')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00AB'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00AB')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00BB'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00BB')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0021'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0021')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u002B'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u002B')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00A2'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00A2')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u005E'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u005E')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00A6'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00A6')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00A0'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00A0')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u2028'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u2028')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u2029'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u2029')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u0000'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u0000')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\u00AD'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\u00AD')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\uD800'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\uD800')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\uE000'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\uE000')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\uFFFE'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\uFFFE')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '\uFFFF'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '\uFFFF')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u002D'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u002D')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u0028'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u0028')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u0029'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u0029')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00AB'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00AB')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00BB'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00BB')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u0021'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u0021')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u002B'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u002B')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00A2'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00A2')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u005E'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u005E')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00A6'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00A6')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00A0'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00A0')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u2028'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u2028')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u2029'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u2029')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u0000'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u0000')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\u00AD'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\u00AD')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\uD800'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\uD800')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\uE000'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\uE000')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\uFFFE'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\uFFFE')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 Expecting exception from db.createObjectStore('name', {keyPath: '_\uFFFF'})
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The keyPath option is not a valid key path.
 Expecting exception from db.createObjectStore('name').createIndex('name', '_\uFFFF')
 PASS Exception was thrown.
 PASS code is DOMException.SYNTAX_ERR
-Exception message: SyntaxError: DOM IDBDatabase Exception 12
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.
 Deleted all object stores.
 PASS successfullyParsed is true
 
index 40e848e..cc036aa 100644 (file)
@@ -15,8 +15,6 @@ function prepareDatabase()
     deleteAllObjectStores(db);
 
     testKeyPaths = [
-        { keyPath: "null", storeExpected: "null", indexExpected: "'null'" },
-        { keyPath: "undefined", storeExpected: "null", indexExpected: "'undefined'" },
         { keyPath: "''" },
         { keyPath: "'foo'" },
         { keyPath: "'foo.bar.baz'" },
@@ -78,6 +76,12 @@ function testInvalidKeyPaths()
 
     debug("");
     debug("Key paths which are never valid:");
+
+    evalAndExpectException("db.createObjectStore('name').createIndex('name', null)", "DOMException.SYNTAX_ERR");
+    deleteAllObjectStores(db);
+    evalAndExpectException("db.createObjectStore('name').createIndex('name', undefined)", "DOMException.SYNTAX_ERR");
+    deleteAllObjectStores(db);
+    
     testKeyPaths = [
         "' '",
         "'foo '",
@@ -141,6 +145,7 @@ function testInvalidKeyPaths()
         "'_\\uFFFE'", // Special
         "'_\\uFFFF'"  // Special
     ];
+   
     testKeyPaths.forEach(function (keyPath) {
         evalAndExpectException("db.createObjectStore('name', {keyPath: " + keyPath + "})", "DOMException.SYNTAX_ERR");
         evalAndExpectException("db.createObjectStore('name').createIndex('name', " + keyPath + ")", "DOMException.SYNTAX_ERR");
index ea53cf9..3f242bf 100644 (file)
@@ -23,7 +23,7 @@ Expecting exception from store.deleteIndex('indexFail')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-Exception message: An operation was called on an object on which it is not allowed or at a time when it is not allowed.
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The object store has been deleted.
 
 testSetVersionAbort2():
 PASS self.db.objectStoreNames is []
@@ -41,7 +41,7 @@ Expecting exception from store.deleteIndex('indexFail')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-Exception message: An operation was called on an object on which it is not allowed or at a time when it is not allowed.
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The object store has been deleted.
 store = db.createObjectStore('storeFail', null)
 index = store.createIndex('indexFail', 'x')
 
index df684f1..9500231 100644 (file)
@@ -1,3 +1,41 @@
+2016-01-05  Brady Eidson  <beidson@apple.com>
+
+        Modern IDB: Error message updates for two failing tests.
+        https://bugs.webkit.org/show_bug.cgi?id=152735
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Covered by existing tests).
+
+        Add error messages for various operations on deleted objects.
+        
+        * Modules/indexeddb/client/IDBCursorImpl.cpp:
+        (WebCore::IDBClient::IDBCursor::update):
+        (WebCore::IDBClient::IDBCursor::advance):
+        (WebCore::IDBClient::IDBCursor::continueFunction):
+        (WebCore::IDBClient::IDBCursor::deleteFunction):
+        
+        * Modules/indexeddb/client/IDBIndexImpl.cpp:
+        (WebCore::IDBClient::IDBIndex::openCursor):
+        (WebCore::IDBClient::IDBIndex::doCount):
+        (WebCore::IDBClient::IDBIndex::openKeyCursor):
+        (WebCore::IDBClient::IDBIndex::doGet):
+        (WebCore::IDBClient::IDBIndex::doGetKey):
+        
+        * Modules/indexeddb/client/IDBObjectStoreImpl.cpp:
+        (WebCore::IDBClient::IDBObjectStore::openCursor):
+        (WebCore::IDBClient::IDBObjectStore::get):
+        (WebCore::IDBClient::IDBObjectStore::putOrAdd):
+        (WebCore::IDBClient::IDBObjectStore::deleteFunction):
+        (WebCore::IDBClient::IDBObjectStore::clear):
+        (WebCore::IDBClient::IDBObjectStore::createIndex):
+        (WebCore::IDBClient::IDBObjectStore::index):
+        (WebCore::IDBClient::IDBObjectStore::deleteIndex):
+        (WebCore::IDBClient::IDBObjectStore::doCount):
+
+        * bindings/js/JSIDBObjectStoreCustom.cpp:
+        (WebCore::JSIDBObjectStore::createIndex):
+
 2016-01-05  Eric Carlson  <eric.carlson@apple.com>
 
         Avoid NULL deference in Page::updateIsPlayingMedia
index ff52eb9..6376069 100644 (file)
@@ -116,6 +116,7 @@ RefPtr<WebCore::IDBRequest> IDBCursor::update(JSC::ExecState& exec, Deprecated::
 
     if (sourcesDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'update' on 'IDBCursor': The cursor's source or effective object store has been deleted.");
         return nullptr;
     }
 
@@ -182,6 +183,7 @@ void IDBCursor::advance(unsigned long count, ExceptionCodeWithMessage& ec)
 
     if (sourcesDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'advance' on 'IDBCursor': The cursor's source or effective object store has been deleted.");
         return;
     }
 
@@ -238,6 +240,7 @@ void IDBCursor::continueFunction(const IDBKeyData& key, ExceptionCodeWithMessage
 
     if (sourcesDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'continue' on 'IDBCursor': The cursor's source or effective object store has been deleted.");
         return;
     }
 
@@ -293,6 +296,7 @@ RefPtr<WebCore::IDBRequest> IDBCursor::deleteFunction(ScriptExecutionContext* co
 
     if (sourcesDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'delete' on 'IDBCursor': The cursor's source or effective object store has been deleted.");
         return nullptr;
     }
 
index cae5494..58b5fed 100644 (file)
@@ -92,6 +92,7 @@ RefPtr<WebCore::IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context
 
     if (m_deleted || m_objectStore->isDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.");
         return nullptr;
     }
 
@@ -178,6 +179,7 @@ RefPtr<WebCore::IDBRequest> IDBIndex::doCount(ScriptExecutionContext& context, c
 {
     if (m_deleted || m_objectStore->isDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.");
         return nullptr;
     }
 
@@ -202,6 +204,7 @@ RefPtr<WebCore::IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* cont
 
     if (m_deleted || m_objectStore->isDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.");
         return nullptr;
     }
 
@@ -269,6 +272,7 @@ RefPtr<WebCore::IDBRequest> IDBIndex::doGet(ScriptExecutionContext& context, con
 {
     if (m_deleted || m_objectStore->isDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'get' on 'IDBIndex': The index or its object store has been deleted.");
         return nullptr;
     }
 
@@ -323,6 +327,7 @@ RefPtr<WebCore::IDBRequest> IDBIndex::doGetKey(ScriptExecutionContext& context,
 {
     if (m_deleted || m_objectStore->isDeleted()) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'getKey' on 'IDBIndex': The index or its object store has been deleted.");
         return nullptr;
     }
 
index 447012a..8b0d114 100644 (file)
@@ -117,6 +117,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::openCursor(ScriptExecutionContext* c
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -163,6 +164,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::get(ScriptExecutionContext* context,
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'get' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -194,6 +196,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::get(ScriptExecutionContext* context,
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'get' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -256,6 +259,7 @@ RefPtr<IDBRequest> IDBObjectStore::putOrAdd(JSC::ExecState& state, JSC::JSValue
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to store record in an IDBObjectStore: The object store has been deleted.");
         return nullptr;
     }
 
@@ -347,6 +351,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::deleteFunction(ScriptExecutionContex
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'delete' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -397,6 +402,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::clear(ScriptExecutionContext* contex
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'clear' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -415,6 +421,7 @@ RefPtr<WebCore::IDBIndex> IDBObjectStore::createIndex(ScriptExecutionContext* co
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'createIndex' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -469,6 +476,7 @@ RefPtr<WebCore::IDBIndex> IDBObjectStore::index(const String& indexName, Excepti
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'index' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
@@ -501,6 +509,7 @@ void IDBObjectStore::deleteIndex(const String& name, ExceptionCodeWithMessage& e
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'deleteIndex' on 'IDBObjectStore': The object store has been deleted.");
         return;
     }
 
@@ -588,6 +597,7 @@ RefPtr<WebCore::IDBRequest> IDBObjectStore::doCount(ScriptExecutionContext& cont
 
     if (m_deleted) {
         ec.code = IDBDatabaseException::InvalidStateError;
+        ec.message = ASCIILiteral("Failed to execute 'count' on 'IDBObjectStore': The object store has been deleted.");
         return nullptr;
     }
 
index 005012e..462270c 100644 (file)
@@ -32,6 +32,7 @@
 #include "JSIDBObjectStore.h"
 
 #include "IDBBindingUtilities.h"
+#include "IDBDatabaseException.h"
 #include "IDBKeyPath.h"
 #include "IDBObjectStore.h"
 #include "JSDOMBinding.h"
@@ -113,7 +114,14 @@ JSValue JSIDBObjectStore::createIndex(ExecState& state)
     IDBKeyPath keyPath;
     JSValue keyPathValue = state.argument(1);
     if (!keyPathValue.isUndefinedOrNull())
-        keyPath = idbKeyPathFromValue(&state, state.argument(1));
+        keyPath = idbKeyPathFromValue(&state, keyPathValue);
+    else {
+        ExceptionCodeWithMessage ec;
+        ec.code = IDBDatabaseException::SyntaxError;
+        ec.message = ASCIILiteral("Failed to execute 'createIndex' on 'IDBObjectStore': The keyPath argument contains an invalid key path.");
+        setDOMException(&state, ec);
+        return jsUndefined();
+    }
 
     if (state.hadException())
         return jsUndefined();