IndexedDB: Implement IDBTransaction.error and IDBRequest.error
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 May 2012 22:47:34 +0000 (22:47 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 31 May 2012 22:47:34 +0000 (22:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=87865

Patch by Alec Flett <alecflett@chromium.org> on 2012-05-31
Reviewed by Tony Chang.

Source/WebCore:

Added "error" attribute to IDBRequest and IDBTransaction. Update
IDBDatabaseError to honor the IDBDatabaseException behavior
of dealing with IDB-specific throws of DOMException codes,
as per the spec.

Existing tests which previously tested 'errorCode' and
'webkitErrorMessage' have been updated to use the new attribute.

* Modules/indexeddb/IDBCursor.cpp:
(WebCore::IDBCursor::advance):
* Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
(WebCore::IDBDatabaseBackendImpl::setVersion):
* Modules/indexeddb/IDBDatabaseError.h:
(WebCore::IDBDatabaseError::create):
(WebCore::IDBDatabaseError::code):
(WebCore::IDBDatabaseError::idbCode):
(WebCore::IDBDatabaseError::name):
(WebCore::IDBDatabaseError::IDBDatabaseError):
(IDBDatabaseError):
* Modules/indexeddb/IDBDatabaseException.cpp:
(WebCore):
(WebCore::getErrorEntry):
(WebCore::IDBDatabaseException::initializeDescription):
(WebCore::IDBDatabaseException::getErrorName):
(WebCore::IDBDatabaseException::getLegacyErrorCode):
* Modules/indexeddb/IDBDatabaseException.h:
(IDBDatabaseException):
* Modules/indexeddb/IDBObjectStore.cpp:
(WebCore::IDBObjectStore::createIndex):
* Modules/indexeddb/IDBRequest.cpp:
(WebCore::IDBRequest::error):
(WebCore):
(WebCore::IDBRequest::resetReadyState):
(WebCore::IDBRequest::abort):
(WebCore::IDBRequest::onError):
(WebCore::IDBRequest::onSuccess):
(WebCore::IDBRequest::onSuccessWithContinuation):
(WebCore::IDBRequest::dispatchEvent):
* Modules/indexeddb/IDBRequest.h:
(IDBRequest):
* Modules/indexeddb/IDBRequest.idl:
* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::error):
(WebCore):
(WebCore::IDBTransaction::setError):
* Modules/indexeddb/IDBTransaction.h:
(IDBTransaction):
* Modules/indexeddb/IDBTransaction.idl:

Source/WebKit/chromium:

IDBDatabaseError now honors IDB-specific DOMException codes,
so make sure that's how they are passed to/from chromium.

* src/WebIDBDatabaseError.cpp:
(WebKit::WebIDBDatabaseError::assign):

LayoutTests:

* storage/indexeddb/basics-expected.txt:
* storage/indexeddb/basics-workers-expected.txt:
* storage/indexeddb/create-and-remove-object-store-expected.txt:
* storage/indexeddb/cursor-continue-expected.txt:
* storage/indexeddb/cursor-update-expected.txt:
* storage/indexeddb/database-basics-expected.txt:
* storage/indexeddb/deleteIndex-expected.txt:
* storage/indexeddb/factory-cmp-expected.txt:
* storage/indexeddb/get-keyrange-expected.txt:
* storage/indexeddb/index-basics-expected.txt:
* storage/indexeddb/index-basics-workers-expected.txt:
* storage/indexeddb/index-count-expected.txt:
* storage/indexeddb/index-unique-expected.txt:
* storage/indexeddb/invalid-keys-expected.txt:
* storage/indexeddb/key-generator-expected.txt:
* storage/indexeddb/key-type-array-expected.txt:
* storage/indexeddb/keypath-edges-expected.txt:
* storage/indexeddb/keyrange-expected.txt:
* storage/indexeddb/objectstore-autoincrement-expected.txt:
* storage/indexeddb/objectstore-basics-expected.txt:
* storage/indexeddb/objectstore-basics-workers-expected.txt:
* storage/indexeddb/objectstore-count-expected.txt:
* storage/indexeddb/open-cursor-expected.txt:
* storage/indexeddb/readonly-expected.txt:
* storage/indexeddb/resources/basics.js:
(test):
(openCallback):
* storage/indexeddb/resources/create-and-remove-object-store.js:
(testCreateAndRemove):
(cleanDatabase):
(tryOnceMore):
* storage/indexeddb/resources/cursor-continue.js:
(ascendingErrorTestLessThan.request.onsuccess):
(ascendingErrorTestLessThan):
(ascendingErrorTestEqual.request.onsuccess):
(ascendingErrorTestEqual):
(descendingErrorTestGreaterThan.request.onsuccess):
(descendingErrorTestGreaterThan):
(descendingErrorTestEqual.request.onsuccess):
(descendingErrorTestEqual):
(onTransactionComplete):
* storage/indexeddb/resources/cursor-update.js:
(keyCursor):
* storage/indexeddb/resources/database-basics.js:
(testClose):
* storage/indexeddb/resources/database-quota.js:
(logError):
* storage/indexeddb/resources/deleteIndex.js:
(twiddleIndexes):
(postTwiddling):
* storage/indexeddb/resources/factory-cmp.js:
(testValidKeys):
(testInvalidKeys):
* storage/indexeddb/resources/get-keyrange.js:
(getNullTest):
* storage/indexeddb/resources/index-basics.js:
(index3Count):
* storage/indexeddb/resources/index-count.js:
* storage/indexeddb/resources/index-unique.js:
(addMoreDataFailed):
* storage/indexeddb/resources/invalid-keys.js:
* storage/indexeddb/resources/key-generator.js:
* storage/indexeddb/resources/key-type-array.js:
(testDepthLimits):
* storage/indexeddb/resources/keypath-edges.js:
* storage/indexeddb/resources/keyrange.js:
(test):
* storage/indexeddb/resources/objectstore-autoincrement.js:
(getAbrahamSuccess):
* storage/indexeddb/resources/objectstore-basics.js:
(setVersionSuccess):
(createIndex):
(addAgainFailure):
(removeSuccessButNotThere):
(testPreConditions.request.onsuccess):
(testPreConditions):
* storage/indexeddb/resources/objectstore-count.js:
* storage/indexeddb/resources/open-cursor.js:
(cursorWithKeySuccess):
(cursorSuccess):
* storage/indexeddb/resources/readonly.js:
(openSuccess):
* storage/indexeddb/resources/set_version_queue.js:
(connectionError):
* storage/indexeddb/resources/shared.js:
(unexpectedErrorCallback):
(evalAndExpectException):
* storage/indexeddb/resources/transaction-abort-workers.js:
(transactionAborted):
(transactionCompleted):
(timeoutTest.transaction.onabort):
(timeoutTest):
(errorTransactionAborted):
* storage/indexeddb/resources/transaction-abort.js:
(firstAdd):
(secondAdd):
(transactionAborted):
* storage/indexeddb/resources/transaction-after-close.js:
(firstTransactionComplete):
* storage/indexeddb/resources/transaction-and-objectstore-calls.js:
(created):
(afterComplete):
* storage/indexeddb/resources/transaction-basics.js:
(testInactiveAbortedTransaction):
(testInactiveCompletedTransaction):
(testInvalidMode):
* storage/indexeddb/resources/transaction-read-only.js:
(setVersionDone):
(gotCursor):
* storage/indexeddb/set_version_queue-expected.txt:
* storage/indexeddb/transaction-abort-expected.txt:
* storage/indexeddb/transaction-abort-workers-expected.txt:
* storage/indexeddb/transaction-after-close-expected.txt:
* storage/indexeddb/transaction-and-objectstore-calls-expected.txt:
* storage/indexeddb/transaction-basics-expected.txt:
* storage/indexeddb/transaction-read-only-expected.txt:

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

78 files changed:
LayoutTests/ChangeLog
LayoutTests/storage/indexeddb/basics-expected.txt
LayoutTests/storage/indexeddb/basics-shared-workers-expected.txt
LayoutTests/storage/indexeddb/basics-workers-expected.txt
LayoutTests/storage/indexeddb/create-and-remove-object-store-expected.txt
LayoutTests/storage/indexeddb/cursor-continue-expected.txt
LayoutTests/storage/indexeddb/cursor-update-expected.txt
LayoutTests/storage/indexeddb/database-basics-expected.txt
LayoutTests/storage/indexeddb/deleteIndex-expected.txt
LayoutTests/storage/indexeddb/factory-cmp-expected.txt
LayoutTests/storage/indexeddb/get-keyrange-expected.txt
LayoutTests/storage/indexeddb/index-basics-expected.txt
LayoutTests/storage/indexeddb/index-basics-workers-expected.txt
LayoutTests/storage/indexeddb/index-count-expected.txt
LayoutTests/storage/indexeddb/index-unique-expected.txt
LayoutTests/storage/indexeddb/invalid-keys-expected.txt
LayoutTests/storage/indexeddb/key-generator-expected.txt
LayoutTests/storage/indexeddb/key-type-array-expected.txt
LayoutTests/storage/indexeddb/keypath-edges-expected.txt
LayoutTests/storage/indexeddb/keyrange-expected.txt
LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
LayoutTests/storage/indexeddb/objectstore-basics-workers-expected.txt
LayoutTests/storage/indexeddb/objectstore-count-expected.txt
LayoutTests/storage/indexeddb/open-cursor-expected.txt
LayoutTests/storage/indexeddb/readonly-expected.txt
LayoutTests/storage/indexeddb/resources/basics.js
LayoutTests/storage/indexeddb/resources/create-and-remove-object-store.js
LayoutTests/storage/indexeddb/resources/cursor-continue.js
LayoutTests/storage/indexeddb/resources/cursor-update.js
LayoutTests/storage/indexeddb/resources/database-basics.js
LayoutTests/storage/indexeddb/resources/database-quota.js
LayoutTests/storage/indexeddb/resources/deleteIndex.js
LayoutTests/storage/indexeddb/resources/factory-cmp.js
LayoutTests/storage/indexeddb/resources/get-keyrange.js
LayoutTests/storage/indexeddb/resources/index-basics.js
LayoutTests/storage/indexeddb/resources/index-count.js
LayoutTests/storage/indexeddb/resources/index-unique.js
LayoutTests/storage/indexeddb/resources/invalid-keys.js
LayoutTests/storage/indexeddb/resources/key-generator.js
LayoutTests/storage/indexeddb/resources/key-type-array.js
LayoutTests/storage/indexeddb/resources/keypath-edges.js
LayoutTests/storage/indexeddb/resources/keyrange.js
LayoutTests/storage/indexeddb/resources/objectstore-autoincrement.js
LayoutTests/storage/indexeddb/resources/objectstore-basics.js
LayoutTests/storage/indexeddb/resources/objectstore-count.js
LayoutTests/storage/indexeddb/resources/open-cursor.js
LayoutTests/storage/indexeddb/resources/readonly.js
LayoutTests/storage/indexeddb/resources/set_version_queue.js
LayoutTests/storage/indexeddb/resources/shared.js
LayoutTests/storage/indexeddb/resources/transaction-abort-workers.js
LayoutTests/storage/indexeddb/resources/transaction-abort.js
LayoutTests/storage/indexeddb/resources/transaction-after-close.js
LayoutTests/storage/indexeddb/resources/transaction-and-objectstore-calls.js
LayoutTests/storage/indexeddb/resources/transaction-basics.js
LayoutTests/storage/indexeddb/resources/transaction-read-only.js
LayoutTests/storage/indexeddb/set_version_queue-expected.txt
LayoutTests/storage/indexeddb/transaction-abort-expected.txt
LayoutTests/storage/indexeddb/transaction-abort-workers-expected.txt
LayoutTests/storage/indexeddb/transaction-after-close-expected.txt
LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt
LayoutTests/storage/indexeddb/transaction-basics-expected.txt
LayoutTests/storage/indexeddb/transaction-read-only-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/IDBCursor.cpp
Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp
Source/WebCore/Modules/indexeddb/IDBDatabaseError.h
Source/WebCore/Modules/indexeddb/IDBDatabaseException.cpp
Source/WebCore/Modules/indexeddb/IDBDatabaseException.h
Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp
Source/WebCore/Modules/indexeddb/IDBRequest.cpp
Source/WebCore/Modules/indexeddb/IDBRequest.h
Source/WebCore/Modules/indexeddb/IDBRequest.idl
Source/WebCore/Modules/indexeddb/IDBTransaction.cpp
Source/WebCore/Modules/indexeddb/IDBTransaction.h
Source/WebCore/Modules/indexeddb/IDBTransaction.idl
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/WebIDBDatabaseError.cpp

index 6e20a03..36f331c 100644 (file)
@@ -1,3 +1,127 @@
+2012-05-31  Alec Flett  <alecflett@chromium.org>
+
+        IndexedDB: Implement IDBTransaction.error and IDBRequest.error
+        https://bugs.webkit.org/show_bug.cgi?id=87865
+
+        Reviewed by Tony Chang.
+
+        * storage/indexeddb/basics-expected.txt:
+        * storage/indexeddb/basics-workers-expected.txt:
+        * storage/indexeddb/create-and-remove-object-store-expected.txt:
+        * storage/indexeddb/cursor-continue-expected.txt:
+        * storage/indexeddb/cursor-update-expected.txt:
+        * storage/indexeddb/database-basics-expected.txt:
+        * storage/indexeddb/deleteIndex-expected.txt:
+        * storage/indexeddb/factory-cmp-expected.txt:
+        * storage/indexeddb/get-keyrange-expected.txt:
+        * storage/indexeddb/index-basics-expected.txt:
+        * storage/indexeddb/index-basics-workers-expected.txt:
+        * storage/indexeddb/index-count-expected.txt:
+        * storage/indexeddb/index-unique-expected.txt:
+        * storage/indexeddb/invalid-keys-expected.txt:
+        * storage/indexeddb/key-generator-expected.txt:
+        * storage/indexeddb/key-type-array-expected.txt:
+        * storage/indexeddb/keypath-edges-expected.txt:
+        * storage/indexeddb/keyrange-expected.txt:
+        * storage/indexeddb/objectstore-autoincrement-expected.txt:
+        * storage/indexeddb/objectstore-basics-expected.txt:
+        * storage/indexeddb/objectstore-basics-workers-expected.txt:
+        * storage/indexeddb/objectstore-count-expected.txt:
+        * storage/indexeddb/open-cursor-expected.txt:
+        * storage/indexeddb/readonly-expected.txt:
+        * storage/indexeddb/resources/basics.js:
+        (test):
+        (openCallback):
+        * storage/indexeddb/resources/create-and-remove-object-store.js:
+        (testCreateAndRemove):
+        (cleanDatabase):
+        (tryOnceMore):
+        * storage/indexeddb/resources/cursor-continue.js:
+        (ascendingErrorTestLessThan.request.onsuccess):
+        (ascendingErrorTestLessThan):
+        (ascendingErrorTestEqual.request.onsuccess):
+        (ascendingErrorTestEqual):
+        (descendingErrorTestGreaterThan.request.onsuccess):
+        (descendingErrorTestGreaterThan):
+        (descendingErrorTestEqual.request.onsuccess):
+        (descendingErrorTestEqual):
+        (onTransactionComplete):
+        * storage/indexeddb/resources/cursor-update.js:
+        (keyCursor):
+        * storage/indexeddb/resources/database-basics.js:
+        (testClose):
+        * storage/indexeddb/resources/database-quota.js:
+        (logError):
+        * storage/indexeddb/resources/deleteIndex.js:
+        (twiddleIndexes):
+        (postTwiddling):
+        * storage/indexeddb/resources/factory-cmp.js:
+        (testValidKeys):
+        (testInvalidKeys):
+        * storage/indexeddb/resources/get-keyrange.js:
+        (getNullTest):
+        * storage/indexeddb/resources/index-basics.js:
+        (index3Count):
+        * storage/indexeddb/resources/index-count.js:
+        * storage/indexeddb/resources/index-unique.js:
+        (addMoreDataFailed):
+        * storage/indexeddb/resources/invalid-keys.js:
+        * storage/indexeddb/resources/key-generator.js:
+        * storage/indexeddb/resources/key-type-array.js:
+        (testDepthLimits):
+        * storage/indexeddb/resources/keypath-edges.js:
+        * storage/indexeddb/resources/keyrange.js:
+        (test):
+        * storage/indexeddb/resources/objectstore-autoincrement.js:
+        (getAbrahamSuccess):
+        * storage/indexeddb/resources/objectstore-basics.js:
+        (setVersionSuccess):
+        (createIndex):
+        (addAgainFailure):
+        (removeSuccessButNotThere):
+        (testPreConditions.request.onsuccess):
+        (testPreConditions):
+        * storage/indexeddb/resources/objectstore-count.js:
+        * storage/indexeddb/resources/open-cursor.js:
+        (cursorWithKeySuccess):
+        (cursorSuccess):
+        * storage/indexeddb/resources/readonly.js:
+        (openSuccess):
+        * storage/indexeddb/resources/set_version_queue.js:
+        (connectionError):
+        * storage/indexeddb/resources/shared.js:
+        (unexpectedErrorCallback):
+        (evalAndExpectException):
+        * storage/indexeddb/resources/transaction-abort-workers.js:
+        (transactionAborted):
+        (transactionCompleted):
+        (timeoutTest.transaction.onabort):
+        (timeoutTest):
+        (errorTransactionAborted):
+        * storage/indexeddb/resources/transaction-abort.js:
+        (firstAdd):
+        (secondAdd):
+        (transactionAborted):
+        * storage/indexeddb/resources/transaction-after-close.js:
+        (firstTransactionComplete):
+        * storage/indexeddb/resources/transaction-and-objectstore-calls.js:
+        (created):
+        (afterComplete):
+        * storage/indexeddb/resources/transaction-basics.js:
+        (testInactiveAbortedTransaction):
+        (testInactiveCompletedTransaction):
+        (testInvalidMode):
+        * storage/indexeddb/resources/transaction-read-only.js:
+        (setVersionDone):
+        (gotCursor):
+        * storage/indexeddb/set_version_queue-expected.txt:
+        * storage/indexeddb/transaction-abort-expected.txt:
+        * storage/indexeddb/transaction-abort-workers-expected.txt:
+        * storage/indexeddb/transaction-after-close-expected.txt:
+        * storage/indexeddb/transaction-and-objectstore-calls-expected.txt:
+        * storage/indexeddb/transaction-basics-expected.txt:
+        * storage/indexeddb/transaction-read-only-expected.txt:
+
 2012-05-31  Ben Murdoch  <benm@google.com>
 
         Fix crash in V8Document::createTouchListCallback.
index 78704b6..d6f1429 100644 (file)
@@ -10,14 +10,21 @@ PASS 'result' in request is true
 Expecting exception from request.result
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 PASS 'errorCode' in request is true
 Expecting exception from request.errorCode
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 PASS 'webkitErrorMessage' in request is true
 Expecting exception from request.webkitErrorMessage
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
+Expecting exception from request.error
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
 PASS 'source' in request is true
 PASS request.source is indexedDB
 PASS 'transaction' in request is true
@@ -34,6 +41,8 @@ PASS 'errorCode' in event.target is true
 PASS event.target.errorCode is 0
 PASS 'webkitErrorMessage' in event.target is true
 PASS event.target.webkitErrorMessage is undefined.
+PASS 'error' in event.target is true
+PASS event.target.error is null
 PASS 'source' in event.target is true
 PASS request.source is indexedDB
 PASS 'transaction' in event.target is true
index be0c021..44a60d0 100644 (file)
@@ -11,14 +11,21 @@ PASS [Worker] 'result' in request is true
 [Worker] Expecting exception from request.result
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
 PASS [Worker] 'errorCode' in request is true
 [Worker] Expecting exception from request.errorCode
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
 PASS [Worker] 'webkitErrorMessage' in request is true
 [Worker] Expecting exception from request.webkitErrorMessage
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
+[Worker] Expecting exception from request.error
+PASS [Worker] Exception was thrown.
+PASS [Worker] code is DOMException.INVALID_STATE_ERR
+PASS [Worker] ename is 'InvalidStateError'
 PASS [Worker] 'source' in request is true
 PASS [Worker] request.source is indexedDB
 PASS [Worker] 'transaction' in request is true
@@ -35,6 +42,8 @@ PASS [Worker] 'errorCode' in event.target is true
 PASS [Worker] event.target.errorCode is 0
 PASS [Worker] 'webkitErrorMessage' in event.target is true
 PASS [Worker] event.target.webkitErrorMessage is undefined.
+PASS [Worker] 'error' in event.target is true
+PASS [Worker] event.target.error is null
 PASS [Worker] 'source' in event.target is true
 PASS [Worker] request.source is indexedDB
 PASS [Worker] 'transaction' in event.target is true
@@ -46,4 +55,3 @@ PASS [Worker] 'onerror' in event.target is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
-
index be0c021..205e373 100644 (file)
@@ -11,14 +11,21 @@ PASS [Worker] 'result' in request is true
 [Worker] Expecting exception from request.result
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
 PASS [Worker] 'errorCode' in request is true
 [Worker] Expecting exception from request.errorCode
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
 PASS [Worker] 'webkitErrorMessage' in request is true
 [Worker] Expecting exception from request.webkitErrorMessage
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS [Worker] ename is 'NotAllowedError'
+[Worker] Expecting exception from request.error
+PASS [Worker] Exception was thrown.
+PASS [Worker] code is DOMException.INVALID_STATE_ERR
+PASS [Worker] ename is 'InvalidStateError'
 PASS [Worker] 'source' in request is true
 PASS [Worker] request.source is indexedDB
 PASS [Worker] 'transaction' in request is true
@@ -35,6 +42,8 @@ PASS [Worker] 'errorCode' in event.target is true
 PASS [Worker] event.target.errorCode is 0
 PASS [Worker] 'webkitErrorMessage' in event.target is true
 PASS [Worker] event.target.webkitErrorMessage is undefined.
+PASS [Worker] 'error' in event.target is true
+PASS [Worker] event.target.error is null
 PASS [Worker] 'source' in event.target is true
 PASS [Worker] request.source is indexedDB
 PASS [Worker] 'transaction' in event.target is true
index d66d98d..626cce8 100644 (file)
@@ -12,24 +12,29 @@ Trying create
 Expecting exception from db.createObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Trying remove
 Expecting exception from db.deleteObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 result = db.setVersion('version 1')
 Trying create
 Expecting exception from db.createObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Trying remove
 Expecting exception from db.deleteObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Deleted all object stores.
 db.createObjectStore('tmp')
 Expecting exception from db.createObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.CONSTRAINT_ERR
+PASS ename is 'ConstraintError'
 trans = db.transaction(['tmp'])
 trans.objectStore('tmp').get(0)
 PASS event.target.result is undefined.
@@ -37,18 +42,22 @@ Trying create
 Expecting exception from db.createObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Trying remove
 Expecting exception from db.deleteObjectStore("some os")
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Trying create with store that already exists
 Expecting exception from db.createObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Trying remove with store that already exists
 Expecting exception from db.deleteObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 12caa6a..046594c 100644 (file)
@@ -83,6 +83,7 @@ PASS event.target.result.primaryKey is 3
 Expecting exception from event.target.result.continue(1)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 indexObject.openKeyCursor(null, 'next')
 PASS event.target.result.primaryKey is 0
@@ -91,6 +92,7 @@ PASS event.target.result.primaryKey is 3
 Expecting exception from event.target.result.continue(3.14159)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 indexObject.openKeyCursor(null, 'prev')
 PASS event.target.result.primaryKey is 17
@@ -99,6 +101,7 @@ PASS event.target.result.primaryKey is 15
 Expecting exception from event.target.result.continue('A bit3')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 indexObject.openKeyCursor(null, 'prev')
 PASS event.target.result.primaryKey is 17
@@ -108,9 +111,11 @@ cursor = event.target.result
 Expecting exception from event.target.result.continue('A bit2')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ffb5636..972ef34 100644 (file)
@@ -109,24 +109,28 @@ keyPathUpdateCursor()
 Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
 Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
 Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
 Expecting exception from event.target.result.update({id: 100 + counter, number: 100 + counter})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
@@ -161,24 +165,28 @@ PASS event.target.result.primaryKey is counter
 Expecting exception from event.target.result.update({id: counter, number: counter + 200})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 keyCursor()
 PASS event.target.result.key is counter + 100
 PASS event.target.result.primaryKey is counter
 Expecting exception from event.target.result.update({id: counter, number: counter + 200})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 keyCursor()
 PASS event.target.result.key is counter + 100
 PASS event.target.result.primaryKey is counter
 Expecting exception from event.target.result.update({id: counter, number: counter + 200})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 keyCursor()
 PASS event.target.result.key is counter + 100
 PASS event.target.result.primaryKey is counter
 Expecting exception from event.target.result.update({id: counter, number: counter + 200})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 keyCursor()
 PASS counter is 5
 transactionComplete()
index 434e375..4730f6e 100644 (file)
@@ -50,6 +50,7 @@ Now that the connection is closed, transaction creation should fail
 Expecting exception from db.transaction('test123')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Call twice, make sure it's harmless
 db.close()
 PASS successfullyParsed is true
index ae8064c..8254331 100644 (file)
@@ -13,21 +13,25 @@ Deleted all object stores.
 objectStore = db.createObjectStore('foo');
 Expecting exception from objectStore.deleteIndex('first')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 PASS objectStore.deleteIndex() threw exception TypeError: Not enough arguments.
 index = objectStore.createIndex('first', 'first');
 Expecting exception from objectStore.deleteIndex('FIRST')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 index = objectStore.createIndex('second', 'second');
 returnValue = objectStore.deleteIndex('first');
 PASS returnValue is undefined
 Expecting exception from db.createObjectStore('bar');
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Expecting exception from objectStore.deleteIndex('second')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 761801e..fb74a58 100644 (file)
@@ -209,201 +209,267 @@ compare invalid keys
 Expecting exception from indexedDB.cmp(void 0, true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(true, void 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(void 0, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', void 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(true, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(true, false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(false, true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(true, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(false, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(false, NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(NaN, false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(false, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(NaN, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(NaN, new Date(NaN))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(new Date(NaN), NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(NaN, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(new Date(NaN), 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', new Date(NaN))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(new Date(NaN), null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(null, new Date(NaN))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(new Date(NaN), 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', new Date(NaN))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(null, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(null, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp({}, null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(null, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp({}, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp({}, function () {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(function () {}, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp({}, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(function () {}, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', function () {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(function () {}, /regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(/regex/, function () {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(function () {}, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', function () {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(/regex/, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', /regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(/regex/, self)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self, /regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(/regex/, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', /regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', self)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self, self.document)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document, self)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', self)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', self.document)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document, self.document.body)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document.body, self.document)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', self.document)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp(self.document.body, 'valid')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from indexedDB.cmp('valid', self.document.body)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 compare identical keys
 PASS indexedDB.cmp(0, -0) is 0
index 3dc1fe0..4c11102 100644 (file)
@@ -43,6 +43,7 @@ PASS result is undefined
 Expecting exception from objectStore.get(null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 runIndexStoreTests()
 index.get(IDBKeyRange.only(3))
 PASS result.x is 3
@@ -63,6 +64,7 @@ PASS result is undefined
 Expecting exception from index.get(null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 runIndexKeyTests()
 index.getKey(IDBKeyRange.only(3))
 PASS result is 3
@@ -83,6 +85,7 @@ PASS result is undefined
 Expecting exception from index.getKey(null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 finishJSTest()
 PASS successfullyParsed is true
 
index b733315..51d7494 100644 (file)
@@ -119,10 +119,12 @@ Passing an invalid key into indexObject.get({}).
 Expecting exception from indexObject.get({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into indexObject.getKey({}).
 Expecting exception from indexObject.getKey({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index e7506be..f6e1b3c 100644 (file)
@@ -120,10 +120,12 @@ PASS [Worker] event.target.result is 2
 [Worker] Expecting exception from indexObject.get({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] Passing an invalid key into indexObject.getKey({}).
 [Worker] Expecting exception from indexObject.getKey({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6e2707d..900a938 100644 (file)
@@ -92,12 +92,15 @@ PASS index is non-null.
 Expecting exception from index.count(NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from index.count({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from index.count(/regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 test = {"key":0,"expected":1}
 request = index.count(test.key)
index d33afa5..fb107fa 100644 (file)
@@ -22,6 +22,7 @@ transaction.objectStore('store').put({x: 1}, 'bar')
 addMoreDataFailed():
 event.preventDefault()
 PASS event.target.errorCode is IDBDatabaseException.CONSTRAINT_ERR
+PASS event.target.error.name is 'ConstraintError'
 transaction.objectStore('store').put({x: 0}, 'foo')
 changeDataSuccess():
 transaction.objectStore('store').index('index').openCursor(IDBKeyRange.lowerBound(1))
index 5b156a0..4e550a2 100644 (file)
@@ -13,51 +13,67 @@ db.createObjectStore('foo');
 Expecting exception from request = objectStore.put('value', void 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', (function() { return arguments; }()))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', new Error)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', function () {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', JSON)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', Math)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', new Date(NaN))
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', /regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', self)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', self.document)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from request = objectStore.put('value', self.document.body)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2df54ff..6531e11 100644 (file)
@@ -162,6 +162,7 @@ PASS Got "a" for key: 1
 PASS Got "b" for key: 9007199254740992
 Error event fired auto-incrementing past 2^53 (as expected)
 PASS event.target.errorCode is IDBDatabaseException.DATA_ERR
+PASS event.target.error.name is 'DataError'
 event.preventDefault()
 PASS Got "d" for key: 2
 db.close()
index 9b094f4..6d945cc 100644 (file)
@@ -176,87 +176,104 @@ testing invalid array key: [ void 0 ]
 Expecting exception from store.put('value', [ void 0 ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ true ]
 Expecting exception from store.put('value', [ true ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ false ]
 Expecting exception from store.put('value', [ false ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ NaN ]
 Expecting exception from store.put('value', [ NaN ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ null ]
 Expecting exception from store.put('value', [ null ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ {} ]
 Expecting exception from store.put('value', [ {} ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ function () {} ]
 Expecting exception from store.put('value', [ function () {} ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ /regex/ ]
 Expecting exception from store.put('value', [ /regex/ ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ self ]
 Expecting exception from store.put('value', [ self ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ self.document ]
 Expecting exception from store.put('value', [ self.document ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: [ self.document.body ]
 Expecting exception from store.put('value', [ self.document.body ]);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: cyclic_array
 Expecting exception from store.put('value', cyclic_array);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: cyclic_array2
 Expecting exception from store.put('value', cyclic_array2);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: cyclic_array3
 Expecting exception from store.put('value', cyclic_array3);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: cyclic_array4
 Expecting exception from store.put('value', cyclic_array4);
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testing invalid array key: Array(1000)
 Expecting exception from store.put('value', Array(1000));
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 PASS indexedDB.cmp(makeArrayOfDepth(25), 0) is 1
 PASS indexedDB.cmp(makeArrayOfDepth(250), 0) is 1
 Expecting exception from indexedDB.cmp(makeArrayOfDepth(2500), 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 PASS successfullyParsed is true
 
index 842ba6e..b12bb18 100644 (file)
@@ -22,16 +22,19 @@ Key path doesn't resolve to a value; should yield null, should throw DATA_ERR
 Expecting exception from store.put(null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path doesn't resolve to a value; should yield null, should throw DATA_ERR
 Expecting exception from store.put({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path resolves to a value that is invalid key; should yield 'invalid' key, should throw DATA_ERR
 Expecting exception from store.put({foo: null})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path resolves to a value that is valid key; should yield 'string' key, should succeed
 store.put({foo: 'zoo'})
@@ -45,11 +48,13 @@ Key path doesn't resolve to a value; should yield null but insertion would fail,
 Expecting exception from store.put(null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path doesn't resolve to a value; should yield null but insertion would fail, so put request should raise exception
 Expecting exception from store.put('string')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path doesn't resolve to a value; should yield null, key should be generated, put request should succeed
 store.put({})
@@ -59,6 +64,7 @@ Key path resolves to a value that is invalid key; should yield 'invalid' key, sh
 Expecting exception from store.put({foo: null})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Key path resolves to a value that is valid key; should yield 'string' key, should succeed
 store.put({foo: 'zoo'})
index 9c1c7f2..40a6092 100644 (file)
@@ -213,38 +213,47 @@ Passing an invalid key into only({})
 Expecting exception from IDBKeyRange.only({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into upperBound({})
 Expecting exception from IDBKeyRange.upperBound({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into lowerBound({})
 Expecting exception from IDBKeyRange.lowerBound({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into bound(null, {})
 Expecting exception from IDBKeyRange.bound(null, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into bound({},null)
 Expecting exception from IDBKeyRange.bound({}, null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into bound({}, {})
 Expecting exception from IDBKeyRange.bound({}, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Lower key greater than higher key, bound(4, 3)
 Expecting exception from IDBKeyRange.bound(4, 3)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Equal keys, either of the bounds is open, bound(4, 4, true, false)
 Expecting exception from IDBKeyRange.bound(4, 4, true, false)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Equal keys, either of the bounds is open, bound(4, 4, false, true)
 Expecting exception from IDBKeyRange.bound(4, 4, false, true)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Equal keys, either of the bounds is open, bound(4, 4, true, true)
 Expecting exception from IDBKeyRange.bound(4, 4, true, true)
 PASS Exception was thrown.
index 0e22f3b..ccaa9a3 100644 (file)
@@ -62,6 +62,7 @@ Try adding with no key to object store without auto increment.
 Expecting exception from store.add({name: 'Adam'})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 store.add({name: 'Adam'}, 1)
 addAdamSuccess():
 PASS event.target.result is 1
index 35d3de4..48d2fa6 100644 (file)
@@ -51,7 +51,8 @@ PASS db.createObjectStore('storeWithKeyGenerator', {autoIncrement: true}).autoIn
 Ask for an index that doesn't exist:
 Expecting exception from store.index('asdf')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 createIndex():
 index = store.createIndex('indexName', 'x', {unique: true})
 PASS index is non-null.
@@ -61,7 +62,8 @@ PASS index is non-null.
 Ask for an index that doesn't exist:
 Expecting exception from store.index('asdf')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 db.setVersion("version fail")
 PASS db.version is "version fail"
 setVersionTrans = event.target.result
@@ -95,6 +97,7 @@ PASS event.target.result is "key"
 event.target.source.add({x: 'foo'}, 'zzz')
 addAgainFailure():
 PASS event.target.errorCode is IDBDatabaseException.CONSTRAINT_ERR
+PASS event.target.error.name is 'ConstraintError'
 event.preventDefault()
 db.transaction(['storeName'], 'readwrite')
 store = transaction.objectStore('storeName')
@@ -102,6 +105,7 @@ store.add({x: 'somevalue'}, 'somekey')
 Expecting exception from store.add({x: 'othervalue'}, null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 db.transaction(['storeName'], 'readwrite')
 store = transaction.objectStore('storeName')
 Ensure invalid key pointed at by index keyPath is ignored
@@ -126,18 +130,22 @@ Passing an invalid key into store.get().
 Expecting exception from store.get({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into store.delete().
 Expecting exception from store.delete({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into store.add().
 Expecting exception from store.add(null, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Passing an invalid key into store.put().
 Expecting exception from store.put(null, {})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 testPreConditions():
 db.setVersion('precondition version')
@@ -151,36 +159,44 @@ The object store uses in-line keys and the key parameter was provided.
 Expecting exception from storeWithInLineKeys.put({key: 1}, 'key')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
 Expecting exception from storeWithOutOfLineKeys.put({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
 Expecting exception from storeWithInLineKeys.put({key: null})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
 Expecting exception from storeWithInLineKeys.put({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The key parameter was provided but does not contain a valid key.
 Expecting exception from storeWithOutOfLineKeys.put({}, null)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 IDBObjectStore.add()
 The object store uses in-line keys and the key parameter was provided.
 Expecting exception from storeWithInLineKeys.add({key: 1}, 'key')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
 Expecting exception from storeWithOutOfLineKeys.add({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
 Expecting exception from storeWithInLineKeys.add({key: null})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
 Expecting exception from storeWithInLineKeys.add({})
 PASS Exception was thrown.
index f31fa8e..58edde0 100644 (file)
@@ -52,7 +52,8 @@ PASS [Worker] db.createObjectStore('storeWithKeyGenerator', {autoIncrement: true
 [Worker] Ask for an index that doesn't exist:
 [Worker] Expecting exception from store.index('asdf')
 PASS [Worker] Exception was thrown.
-PASS [Worker] code is IDBDatabaseException.NOT_FOUND_ERR
+PASS [Worker] code is DOMException.NOT_FOUND_ERR
+PASS [Worker] ename is 'NotFoundError'
 [Worker] createIndex():
 [Worker] index = store.createIndex('indexName', 'x', {unique: true})
 PASS [Worker] index is non-null.
@@ -62,7 +63,8 @@ PASS [Worker] index is non-null.
 [Worker] Ask for an index that doesn't exist:
 [Worker] Expecting exception from store.index('asdf')
 PASS [Worker] Exception was thrown.
-PASS [Worker] code is IDBDatabaseException.NOT_FOUND_ERR
+PASS [Worker] code is DOMException.NOT_FOUND_ERR
+PASS [Worker] ename is 'NotFoundError'
 [Worker] db.setVersion("version fail")
 PASS [Worker] db.version is "version fail"
 [Worker] setVersionTrans = event.target.result
@@ -96,6 +98,7 @@ PASS [Worker] event.target.result is "key"
 [Worker] event.target.source.add({x: 'foo'}, 'zzz')
 [Worker] addAgainFailure():
 PASS [Worker] event.target.errorCode is IDBDatabaseException.CONSTRAINT_ERR
+PASS [Worker] event.target.error.name is 'ConstraintError'
 [Worker] event.preventDefault()
 [Worker] db.transaction(['storeName'], 'readwrite')
 [Worker] store = transaction.objectStore('storeName')
@@ -103,6 +106,7 @@ PASS [Worker] event.target.errorCode is IDBDatabaseException.CONSTRAINT_ERR
 [Worker] Expecting exception from store.add({x: 'othervalue'}, null)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] db.transaction(['storeName'], 'readwrite')
 [Worker] store = transaction.objectStore('storeName')
 [Worker] Ensure invalid key pointed at by index keyPath is ignored
@@ -127,18 +131,22 @@ PASS [Worker] event.target.result is undefined
 [Worker] Expecting exception from store.get({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] Passing an invalid key into store.delete().
 [Worker] Expecting exception from store.delete({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] Passing an invalid key into store.add().
 [Worker] Expecting exception from store.add(null, {})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] Passing an invalid key into store.put().
 [Worker] Expecting exception from store.put(null, {})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] 
 [Worker] testPreConditions():
 [Worker] db.setVersion('precondition version')
@@ -152,36 +160,44 @@ PASS [Worker] code is IDBDatabaseException.DATA_ERR
 [Worker] Expecting exception from storeWithInLineKeys.put({key: 1}, 'key')
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
 [Worker] Expecting exception from storeWithOutOfLineKeys.put({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
 [Worker] Expecting exception from storeWithInLineKeys.put({key: null})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
 [Worker] Expecting exception from storeWithInLineKeys.put({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The key parameter was provided but does not contain a valid key.
 [Worker] Expecting exception from storeWithOutOfLineKeys.put({}, null)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] 
 [Worker] IDBObjectStore.add()
 [Worker] The object store uses in-line keys and the key parameter was provided.
 [Worker] Expecting exception from storeWithInLineKeys.add({key: 1}, 'key')
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses out-of-line keys and has no key generator and the key parameter was not provided.
 [Worker] Expecting exception from storeWithOutOfLineKeys.add({})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.
 [Worker] Expecting exception from storeWithInLineKeys.add({key: null})
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.DATA_ERR
+PASS [Worker] ename is 'DataError'
 [Worker] The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.
 [Worker] Expecting exception from storeWithInLineKeys.add({})
 PASS [Worker] Exception was thrown.
index b3c0271..5f9da8c 100644 (file)
@@ -84,12 +84,15 @@ PASS store is non-null.
 Expecting exception from store.count(NaN)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from store.count({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 Expecting exception from store.count(/regex/)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 test = {"key":0,"expected":1}
 request = store.count(test.key)
index cc88c1b..beff9b8 100644 (file)
@@ -25,6 +25,7 @@ Passing an invalid key into .continue({}).
 Expecting exception from event.target.result.continue({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Opening an empty cursor.
 objectStore.openCursor(keyRange)
@@ -41,6 +42,7 @@ Passing an invalid key into .continue({}).
 Expecting exception from cursor.continue({})
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.DATA_ERR
+PASS ename is 'DataError'
 
 Opening an empty cursor.
 objectStore.openCursor("InexistentKey")
index 63e7889..59e8bcf 100644 (file)
@@ -12,6 +12,9 @@ PASS request.result is still [object IDBDatabase]
 trying to set readonly property request.errorCode
 request.errorCode = 666
 PASS request.errorCode is still 0
+trying to set readonly property request.error
+request.error = {}
+PASS request.error is still null
 trying to set readonly property request.source
 request.source = this
 PASS request.source is still [object IDBFactory]
index 6d7bdb9..c17e92a 100644 (file)
@@ -10,11 +10,12 @@ function test()
     removeVendorPrefixes();
     request = evalAndLog("indexedDB.open('basics')");
     shouldBeTrue("'result' in request");
-    evalAndExpectException("request.result", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("request.result", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     shouldBeTrue("'errorCode' in request");
-    evalAndExpectException("request.errorCode", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("request.errorCode", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     shouldBeTrue("'webkitErrorMessage' in request");
-    evalAndExpectException("request.webkitErrorMessage", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("request.webkitErrorMessage", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
+    evalAndExpectException("request.error", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
     shouldBeTrue("'source' in request");
     shouldBe("request.source", "indexedDB");
     shouldBeTrue("'transaction' in request");
@@ -38,6 +39,8 @@ function openCallback(evt)
     shouldBe("event.target.errorCode", "0");
     shouldBeTrue("'webkitErrorMessage' in event.target");
     shouldBeUndefined("event.target.webkitErrorMessage");
+    shouldBeTrue("'error' in event.target");
+    shouldBeNull("event.target.error");
     shouldBeTrue("'source' in event.target");
     shouldBe("request.source", "indexedDB");
     shouldBeTrue("'transaction' in event.target");
index 6509294..51e2a61 100644 (file)
@@ -27,9 +27,9 @@ function openSuccess()
 function testCreateAndRemove()
 {
     debug("Trying create");
-    evalAndExpectException('db.createObjectStore("some os")', "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException('db.createObjectStore("some os")', "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     debug("Trying remove");
-    evalAndExpectException('db.deleteObjectStore("some os")', "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException('db.deleteObjectStore("some os")', "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
 }
 
 function cleanDatabase()
@@ -37,7 +37,7 @@ function cleanDatabase()
     deleteAllObjectStores(db);
 
     os = evalAndLog("db.createObjectStore('tmp')");
-    evalAndExpectException("db.createObjectStore('tmp')", "IDBDatabaseException.CONSTRAINT_ERR");
+    evalAndExpectException("db.createObjectStore('tmp')", "IDBDatabaseException.CONSTRAINT_ERR", "'ConstraintError'");
     event.target.result.oncomplete = setVersionComplete;
 }
 
@@ -56,9 +56,9 @@ function tryOnceMore()
     testCreateAndRemove();
 
     debug("Trying create with store that already exists");
-    evalAndExpectException("db.createObjectStore('tmp')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("db.createObjectStore('tmp')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     debug("Trying remove with store that already exists");
-    evalAndExpectException("db.deleteObjectStore('tmp')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("db.deleteObjectStore('tmp')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
 
     finishJSTest();
 }
index 1ff167f..5f5ae35 100644 (file)
@@ -184,7 +184,7 @@ function ascendingErrorTestLessThan()
             evalAndLog("event.target.result.continue(3.14159)");
         } else if (self.stage == 1) {
             shouldBe("event.target.result.primaryKey", "3");
-            evalAndExpectException("event.target.result.continue(1)", "IDBDatabaseException.DATA_ERR");
+            evalAndExpectException("event.target.result.continue(1)", "IDBDatabaseException.DATA_ERR", "'DataError'");
             ascendingErrorTestEqual();
             return;
         } else {
@@ -206,7 +206,7 @@ function ascendingErrorTestEqual()
             evalAndLog("event.target.result.continue(3.14159)");
         } else if (self.stage == 1) {
             shouldBe("event.target.result.primaryKey", "3");
-            evalAndExpectException("event.target.result.continue(3.14159)", "IDBDatabaseException.DATA_ERR");
+            evalAndExpectException("event.target.result.continue(3.14159)", "IDBDatabaseException.DATA_ERR", "'DataError'");
             descendingErrorTestGreaterThan();
             return;
         } else {
@@ -228,7 +228,7 @@ function descendingErrorTestGreaterThan()
             evalAndLog("event.target.result.continue('A bit2')");
         } else if (self.stage == 1) {
             shouldBe("event.target.result.primaryKey", "15");
-            evalAndExpectException("event.target.result.continue('A bit3')", "IDBDatabaseException.DATA_ERR");
+            evalAndExpectException("event.target.result.continue('A bit3')", "IDBDatabaseException.DATA_ERR", "'DataError'");
             descendingErrorTestEqual();
             return;
         } else {
@@ -251,7 +251,7 @@ function descendingErrorTestEqual()
         } else if (self.stage == 1) {
             shouldBe("event.target.result.primaryKey", "15");
             evalAndLog("cursor = event.target.result");
-            evalAndExpectException("event.target.result.continue('A bit2')", "IDBDatabaseException.DATA_ERR");
+            evalAndExpectException("event.target.result.continue('A bit2')", "IDBDatabaseException.DATA_ERR", "'DataError'");
             self.trans.oncomplete = onTransactionComplete;
             return;
         } else {
@@ -263,7 +263,7 @@ function descendingErrorTestEqual()
 
 function onTransactionComplete()
 {
-    evalAndExpectException("cursor.continue()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("cursor.continue()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
     finishJSTest();
 }
 
index 37d3ac6..b3060d4 100644 (file)
@@ -157,7 +157,7 @@ function keyPathUpdateCursor()
         return;
     }
 
-    evalAndExpectException("event.target.result.update({id: 100 + counter, number: 100 + counter})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("event.target.result.update({id: 100 + counter, number: 100 + counter})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     request = evalAndLog("event.target.result.update({id: counter, number: 100 + counter++})");
     request.onsuccess = function() { evalAndLog("event.target.source.continue()"); };
@@ -197,7 +197,7 @@ function keyCursor()
     shouldBe("event.target.result.primaryKey", "counter");
 
     evalAndExpectException("event.target.result.update({id: counter, number: counter + 200})",
-                           "IDBDatabaseException.NOT_ALLOWED_ERR");
+                           "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
 
     counter++;
     event.target.result.continue();
index fe5ab9e..ebfad91 100644 (file)
@@ -106,7 +106,7 @@ function testClose()
 {
     evalAndLog("db.close()");
     debug("Now that the connection is closed, transaction creation should fail");
-    evalAndExpectException("db.transaction('test123')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("db.transaction('test123')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     debug("Call twice, make sure it's harmless");
     evalAndLog("db.close()");
     finishJSTest();
index bd20d15..55cd4b4 100644 (file)
@@ -84,7 +84,7 @@ function addData()
 
 function logError()
 {
-    debug("Error function called: (" + event.target.errorCode + ") " + event.target.webkitErrorMessage);
+    debug("Error function called: (" + event.target.error.name + ") " + event.target.webkitErrorMessage);
     evalAndLog("event.preventDefault()");
 }
 
index 4cb5bed..244ae56 100644 (file)
@@ -31,10 +31,10 @@ function twiddleIndexes()
     deleteAllObjectStores(db);
 
     objectStore = evalAndLog("objectStore = db.createObjectStore('foo');");
-    evalAndExpectException("objectStore.deleteIndex('first')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("objectStore.deleteIndex('first')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     shouldThrow("objectStore.deleteIndex()"); // TypeError: not enough arguments.
     index = evalAndLog("index = objectStore.createIndex('first', 'first');");
-    evalAndExpectException("objectStore.deleteIndex('FIRST')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("objectStore.deleteIndex('FIRST')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     index = evalAndLog("index = objectStore.createIndex('second', 'second');");
     returnValue = evalAndLog("returnValue = objectStore.deleteIndex('first');");
     shouldBe("returnValue", "undefined");
@@ -42,8 +42,8 @@ function twiddleIndexes()
 
 function postTwiddling()
 {
-    evalAndExpectException("db.createObjectStore('bar');", "IDBDatabaseException.NOT_ALLOWED_ERR");
-    evalAndExpectException("objectStore.deleteIndex('second')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("db.createObjectStore('bar');", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
+    evalAndExpectException("objectStore.deleteIndex('second')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
     finishJSTest();
 }
 
index d17f7c6..a107104 100644 (file)
@@ -36,7 +36,7 @@ function testValidKeys()
         "new Date(0)",
         "new Date(1000)",
         "new Date(1317399931023)",
-        
+
         "''",
         "'\x00'",
         "'a'",
@@ -64,7 +64,7 @@ function testValidKeys()
         "[new Date(0)]",
         "[new Date(1000)]",
         "[new Date(1317399931023)]",
-        
+
         "['']",
         "['\x00']",
         "['a']",
@@ -78,7 +78,7 @@ function testValidKeys()
         "['\uFFFD']", // U+FFFD REPLACEMENT CHARACTER
 
         "[[]]",
-        
+
         "[[], []]",
         "[[], [], []]",
 
@@ -121,12 +121,12 @@ function testInvalidKeys()
     for (i = 0; i < invalidKeys.length - 1; i += 1) {
         key1 = invalidKeys[i];
         key2 = invalidKeys[i + 1];
-        evalAndExpectException("indexedDB.cmp(" + key1 + ", " + key2 + ")", "IDBDatabaseException.DATA_ERR");
-        evalAndExpectException("indexedDB.cmp(" + key2 + ", " + key1 + ")", "IDBDatabaseException.DATA_ERR");
-        evalAndExpectException("indexedDB.cmp(" + key1 + ", 'valid')", "IDBDatabaseException.DATA_ERR");
-        evalAndExpectException("indexedDB.cmp('valid', " + key1 + ")", "IDBDatabaseException.DATA_ERR");
-        evalAndExpectException("indexedDB.cmp(" + key2 + ", 'valid')", "IDBDatabaseException.DATA_ERR");
-        evalAndExpectException("indexedDB.cmp('valid', " + key2 + ")", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("indexedDB.cmp(" + key1 + ", " + key2 + ")", "IDBDatabaseException.DATA_ERR", "'DataError'");
+        evalAndExpectException("indexedDB.cmp(" + key2 + ", " + key1 + ")", "IDBDatabaseException.DATA_ERR", "'DataError'");
+        evalAndExpectException("indexedDB.cmp(" + key1 + ", 'valid')", "IDBDatabaseException.DATA_ERR", "'DataError'");
+        evalAndExpectException("indexedDB.cmp('valid', " + key1 + ")", "IDBDatabaseException.DATA_ERR", "'DataError'");
+        evalAndExpectException("indexedDB.cmp(" + key2 + ", 'valid')", "IDBDatabaseException.DATA_ERR", "'DataError'");
+        evalAndExpectException("indexedDB.cmp('valid', " + key2 + ")", "IDBDatabaseException.DATA_ERR", "'DataError'");
     }
 }
 
index 8eec84d..810f530 100644 (file)
@@ -175,7 +175,7 @@ function getBadOnlyTest(store, method, resultPath, finish)
 
 function getNullTest(store, method, resultPath, finish)
 {
-    evalAndExpectException(store + "." + method + "(null)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException(store + "." + method + "(null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
     evalAndLog(finish);
 }
 
index 6da2bdf..b18871b 100644 (file)
@@ -327,10 +327,10 @@ function index3Count(evt)
     shouldBe("event.target.result", "2");
 
     debug("Passing an invalid key into indexObject.get({}).");
-    evalAndExpectException("indexObject.get({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("indexObject.get({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into indexObject.getKey({}).");
-    evalAndExpectException("indexObject.getKey({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("indexObject.getKey({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     finishJSTest();
 }
index 452c347..4d4cd40 100644 (file)
@@ -122,9 +122,9 @@ function verifyCountWithKey()
     store = evalAndLog("index = trans.objectStore('storeName').index('indexName')");
     shouldBeNonNull("index");
 
-    evalAndExpectException("index.count(NaN)", "IDBDatabaseException.DATA_ERR");
-    evalAndExpectException("index.count({})", "IDBDatabaseException.DATA_ERR");
-    evalAndExpectException("index.count(/regex/)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("index.count(NaN)", "IDBDatabaseException.DATA_ERR", "'DataError'");
+    evalAndExpectException("index.count({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
+    evalAndExpectException("index.count(/regex/)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     var tests = [
         { key: 0, expected: 1 },
index 629e364..3a2e361 100644 (file)
@@ -66,6 +66,7 @@ function addMoreDataFailed()
     evalAndLog("event.preventDefault()");
 
     shouldBe("event.target.errorCode", "IDBDatabaseException.CONSTRAINT_ERR");
+    shouldBe("event.target.error.name", "'ConstraintError'");
 
     // Update the 'foo' entry in object store, changing the value of x.
     request = evalAndLog("transaction.objectStore('store').put({x: 0}, 'foo')");
index 4ab914f..d36a098 100644 (file)
@@ -54,9 +54,9 @@ function testInvalidKeys()
     ];
 
     invalidKeys.forEach(function(key) {
-        evalAndExpectException("request = objectStore.put('value', " + key + ")", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("request = objectStore.put('value', " + key + ")", "IDBDatabaseException.DATA_ERR", "'DataError'");
     });
-    
+
     finishJSTest();
 }
 
index 73701b2..d9e04b2 100644 (file)
@@ -221,6 +221,7 @@ defineTest(
         request.onerror = function () {
             debug("Error event fired auto-incrementing past 2^53 (as expected)");
             shouldBe("event.target.errorCode", "IDBDatabaseException.DATA_ERR");
+            shouldBe("event.target.error.name", "'DataError'");
             evalAndLog("event.preventDefault()");
         };
         evalAndLog("store_t1.put('d', 2)");
index f0a4704..1416507 100644 (file)
@@ -161,7 +161,7 @@ function testInvalidArrayKeys()
 
     invalidKeys.forEach(function (key) {
         debug("testing invalid array key: " + key);
-        evalAndExpectException("store.put('value', " + key + ");", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("store.put('value', " + key + ");", "IDBDatabaseException.DATA_ERR", "'DataError'");
         debug("");
     });
 
@@ -181,7 +181,7 @@ function testDepthLimits()
 {
     shouldBe("indexedDB.cmp(makeArrayOfDepth(25), 0)", "1");
     shouldBe("indexedDB.cmp(makeArrayOfDepth(250), 0)", "1");
-    evalAndExpectException("indexedDB.cmp(makeArrayOfDepth(2500), 0)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("indexedDB.cmp(makeArrayOfDepth(2500), 0)", "IDBDatabaseException.DATA_ERR", "'DataError'");
     debug("");
 
     finishJSTest();
index 4cb42fe..b16803a 100644 (file)
@@ -44,15 +44,15 @@ function testKeyPaths()
 
     debug("");
     debug("Key path doesn't resolve to a value; should yield null, should throw DATA_ERR");
-    evalAndExpectException("store.put(null)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put(null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("");
     debug("Key path doesn't resolve to a value; should yield null, should throw DATA_ERR");
-    evalAndExpectException("store.put({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("");
     debug("Key path resolves to a value that is invalid key; should yield 'invalid' key, should throw DATA_ERR");
-    evalAndExpectException("store.put({foo: null})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put({foo: null})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("");
     debug("Key path resolves to a value that is valid key; should yield 'string' key, should succeed");
@@ -76,11 +76,11 @@ function testKeyPathsAndGenerator()
 
     debug("");
     debug("Key path doesn't resolve to a value; should yield null but insertion would fail, so put request should raise exception");
-    evalAndExpectException("store.put(null)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put(null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("");
     debug("Key path doesn't resolve to a value; should yield null but insertion would fail, so put request should raise exception");
-    evalAndExpectException("store.put('string')", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put('string')", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("");
     debug("Key path doesn't resolve to a value; should yield null, key should be generated, put request should succeed");
@@ -91,7 +91,7 @@ function testKeyPathsAndGenerator()
 
         debug("");
         debug("Key path resolves to a value that is invalid key; should yield 'invalid' key, should throw DATA_ERR");
-        evalAndExpectException("store.put({foo: null})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("store.put({foo: null})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("");
         debug("Key path resolves to a value that is valid key; should yield 'string' key, should succeed");
index e2e4a8b..9af1ad7 100644 (file)
@@ -119,31 +119,31 @@ function test()
     checkBoundKeyRange("'aaf'", "'abf'", true, true);
 
     debug("Passing an invalid key into only({})");
-    evalAndExpectException("IDBKeyRange.only({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.only({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into upperBound({})");
-    evalAndExpectException("IDBKeyRange.upperBound({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.upperBound({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into lowerBound({})");
-    evalAndExpectException("IDBKeyRange.lowerBound({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.lowerBound({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into bound(null, {})");
-    evalAndExpectException("IDBKeyRange.bound(null, {})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound(null, {})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into bound({},null)");
-    evalAndExpectException("IDBKeyRange.bound({}, null)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound({}, null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into bound({}, {})");
-    evalAndExpectException("IDBKeyRange.bound({}, {})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound({}, {})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Lower key greater than higher key, bound(4, 3)");
-    evalAndExpectException("IDBKeyRange.bound(4, 3)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound(4, 3)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Equal keys, either of the bounds is open, bound(4, 4, true, false)");
-    evalAndExpectException("IDBKeyRange.bound(4, 4, true, false)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound(4, 4, true, false)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Equal keys, either of the bounds is open, bound(4, 4, false, true)");
-    evalAndExpectException("IDBKeyRange.bound(4, 4, false, true)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("IDBKeyRange.bound(4, 4, false, true)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Equal keys, either of the bounds is open, bound(4, 4, true, true)");
     evalAndExpectException("IDBKeyRange.bound(4, 4, true, true)", "IDBDatabaseException.DATA_ERR");
index 8a29e93..862a055 100644 (file)
@@ -140,7 +140,7 @@ function getAbrahamSuccess()
 
     self.store = evalAndLog("store = trans.objectStore('PlainOldStore')");
     debug("Try adding with no key to object store without auto increment.");
-    evalAndExpectException("store.add({name: 'Adam'})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.add({name: 'Adam'})", "IDBDatabaseException.DATA_ERR", "'DataError'");
     request = evalAndLog("store.add({name: 'Adam'}, 1)");
     request.onsuccess = addAdamSuccess;
     request.onerror = unexpectedErrorCallback;
index 2028cfa..5cff429 100644 (file)
@@ -76,7 +76,7 @@ function setVersionSuccess(evt)
     // FIXME: test all of object store's methods.
 
     debug("Ask for an index that doesn't exist:");
-    evalAndExpectException("store.index('asdf')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("store.index('asdf')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     createIndex();
 }
 
@@ -90,7 +90,7 @@ function createIndex()
     shouldBeNonNull("index");
 
     debug("Ask for an index that doesn't exist:");
-    evalAndExpectException("store.index('asdf')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("store.index('asdf')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     trans.oncomplete = testSetVersionAbort;
 }
 
@@ -176,6 +176,7 @@ function addAgainFailure(evt)
     event = evt;
     debug("addAgainFailure():");
     shouldBe("event.target.errorCode", "IDBDatabaseException.CONSTRAINT_ERR");
+    shouldBe("event.target.error.name", "'ConstraintError'");
 
     evalAndLog("event.preventDefault()");
 
@@ -184,7 +185,7 @@ function addAgainFailure(evt)
     var store = evalAndLog("store = transaction.objectStore('storeName')");
 
     evalAndLog("store.add({x: 'somevalue'}, 'somekey')");
-    evalAndExpectException("store.add({x: 'othervalue'}, null)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.add({x: 'othervalue'}, null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     transaction = evalAndLog("db.transaction(['storeName'], 'readwrite')");
     transaction.onabort = unexpectedErrorCallback;
@@ -244,16 +245,16 @@ function removeSuccessButNotThere(evt)
     var store = evalAndLog("store = event.target.source");
 
     debug("Passing an invalid key into store.get().");
-    evalAndExpectException("store.get({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.get({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into store.delete().");
-    evalAndExpectException("store.delete({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.delete({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into store.add().");
-    evalAndExpectException("store.add(null, {})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.add(null, {})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     debug("Passing an invalid key into store.put().");
-    evalAndExpectException("store.put(null, {})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.put(null, {})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     testPreConditions();
 }
@@ -273,30 +274,30 @@ function testPreConditions()
         debug("");
         debug("IDBObjectStore.put()");
         debug("The object store uses in-line keys and the key parameter was provided.");
-        evalAndExpectException("storeWithInLineKeys.put({key: 1}, 'key')", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithInLineKeys.put({key: 1}, 'key')", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses out-of-line keys and has no key generator and the key parameter was not provided.");
-        evalAndExpectException("storeWithOutOfLineKeys.put({})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithOutOfLineKeys.put({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.");
-        evalAndExpectException("storeWithInLineKeys.put({key: null})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithInLineKeys.put({key: null})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.");
-        evalAndExpectException("storeWithInLineKeys.put({})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithInLineKeys.put({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The key parameter was provided but does not contain a valid key.");
-        evalAndExpectException("storeWithOutOfLineKeys.put({}, null)", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithOutOfLineKeys.put({}, null)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("");
         debug("IDBObjectStore.add()");
         debug("The object store uses in-line keys and the key parameter was provided.");
-        evalAndExpectException("storeWithInLineKeys.add({key: 1}, 'key')", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithInLineKeys.add({key: 1}, 'key')", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses out-of-line keys and has no key generator and the key parameter was not provided.");
-        evalAndExpectException("storeWithOutOfLineKeys.add({})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithOutOfLineKeys.add({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses in-line keys and the result of evaluating the object store's key path yields a value and that value is not a valid key.");
-        evalAndExpectException("storeWithInLineKeys.add({key: null})", "IDBDatabaseException.DATA_ERR");
+        evalAndExpectException("storeWithInLineKeys.add({key: null})", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
         debug("The object store uses in-line keys but no key generator and the result of evaluating the object store's key path does not yield a value.");
         evalAndExpectException("storeWithInLineKeys.add({})", "IDBDatabaseException.DATA_ERR");
index e15d892..89503f7 100644 (file)
@@ -113,9 +113,9 @@ function verifyCountWithKey()
     store = evalAndLog("store = trans.objectStore('storeName')");
     shouldBeNonNull("store");
 
-    evalAndExpectException("store.count(NaN)", "IDBDatabaseException.DATA_ERR");
-    evalAndExpectException("store.count({})", "IDBDatabaseException.DATA_ERR");
-    evalAndExpectException("store.count(/regex/)", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("store.count(NaN)", "IDBDatabaseException.DATA_ERR", "'DataError'");
+    evalAndExpectException("store.count({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
+    evalAndExpectException("store.count(/regex/)", "IDBDatabaseException.DATA_ERR", "'DataError'");
 
     var tests = [
         { key: 0, expected: 1 },
index bcc2733..431c139 100644 (file)
@@ -32,7 +32,7 @@ function cursorWithKeySuccess()
     shouldBeEqualToString("cursor.value", "myValue");
     debug("");
     debug("Passing an invalid key into .continue({}).");
-    evalAndExpectException("cursor.continue({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("cursor.continue({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
     debug("");
     openEmptyCursorWithKey();
 }
@@ -72,7 +72,7 @@ function cursorSuccess()
     shouldBeEqualToString("cursor.value", "myValue");
     debug("");
     debug("Passing an invalid key into .continue({}).");
-    evalAndExpectException("event.target.result.continue({})", "IDBDatabaseException.DATA_ERR");
+    evalAndExpectException("event.target.result.continue({})", "IDBDatabaseException.DATA_ERR", "'DataError'");
     debug("");
     openEmptyCursor();
 }
index f4304c8..982c4e8 100644 (file)
@@ -32,6 +32,7 @@ function openSuccess()
 {
     setReadonlyProperty("request.result", "Infinity");
     setReadonlyProperty("request.errorCode", "666");
+    setReadonlyProperty("request.error", "{}");
     setReadonlyProperty("request.source", "this");
     setReadonlyProperty("request.transaction", "this");
     setReadonlyProperty("request.readyState", "666");
index aaa345d..d25f20e 100644 (file)
@@ -103,9 +103,10 @@ function blocked3(event)
 
 function connectionError(event, connectionId)
 {
-    debug("")
+    debug("");
     testPassed("connection[" + connectionId + "] got error event");
-    shouldBe("event.target.errorCode", "IDBDatabaseException.ABORT_ERR")
+    shouldBe("event.target.errorCode", "DOMException.ABORT_ERR");
+    shouldBe("event.target.error.name", "'AbortError'");
     if ('webkitErrorMessage' in event.target) {
         shouldBe("event.target.webkitErrorMessage.length > 0", "true");
         debug(event.target.webkitErrorMessage);
index 39bd4cb..d0309f7 100644 (file)
@@ -49,7 +49,7 @@ function unexpectedSuccessCallback()
 
 function unexpectedErrorCallback(event)
 {
-    testFailed("Error function called unexpectedly: (" + event.target.errorCode + ") " + event.target.webkitErrorMessage);
+    testFailed("Error function called unexpectedly: (" + event.target.error.name + ") " + event.target.webkitErrorMessage);
     finishJSTest();
 }
 
@@ -71,16 +71,20 @@ function unexpectedBlockedCallback()
     finishJSTest();
 }
 
-function evalAndExpectException(cmd, expected)
+function evalAndExpectException(cmd, exceptionCode, exceptionName)
 {
     debug("Expecting exception from " + cmd);
     try {
         eval(cmd);
-        testFailed("No exception thrown! Should have been " + expected);
+        testFailed("No exception thrown! Should have been " + exceptionCode);
     } catch (e) {
         code = e.code;
         testPassed("Exception was thrown.");
-        shouldBe("code", expected);
+        shouldBe("code", exceptionCode);
+        if (exceptionName) {
+            ename = e.name;
+            shouldBe("ename", exceptionName);
+        }
     }
 }
 
index e504895..1ba0df0 100644 (file)
@@ -39,7 +39,7 @@ function createTransaction()
 function transactionAborted()
 {
     testPassed("Transaction aborted");
-    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
     recursionTest();
 }
 
@@ -72,7 +72,7 @@ function recurse(count)
 function transactionCompleted()
 {
     testPassed("transaction completed");
-    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
 
     debug("");
     debug("trying a timeout callback:");
@@ -89,7 +89,7 @@ function timeoutTest()
     transaction.oncomplete = unexpectedCompleteCallback;
     transaction.onabort = function () {
         testPassed("transaction started in setTimeout() callback aborted");
-        evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+        evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
 
         errorTest();
     };
@@ -121,7 +121,7 @@ function errorHandler(e)
 function errorTransactionAborted()
 {
     testPassed("Transaction aborted");
-    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
     finishJSTest();
 }
 
index ff61301..833e6b8 100644 (file)
@@ -58,18 +58,26 @@ function startTest()
 
 function firstAdd()
 {
-    shouldBe("event.target.errorCode", "IDBDatabaseException.ABORT_ERR");
+    shouldBe("event.target.errorCode", "DOMException.ABORT_ERR");
+    shouldBe("event.target.error.name", "'AbortError'");
+    firstDOMError = event.target.error;
+    // FIXME: Ambiguous spec. See: https://www.w3.org/Bugs/Public/show_bug.cgi?id=17236
+    evalAndExpectException("trans.error", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
+
     shouldBeFalse("firstError");
     shouldBeFalse("secondError");
     shouldBeFalse("abortFired");
     firstError = true;
 
-    evalAndExpectException("store.add({x: 'value4', y: 'zzz4'}, 'key4')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("store.add({x: 'value4', y: 'zzz4'}, 'key4')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
 }
 
 function secondAdd()
 {
-    shouldBe("event.target.errorCode", "IDBDatabaseException.ABORT_ERR");
+    shouldBe("event.target.errorCode", "DOMException.ABORT_ERR");
+    shouldBe("event.target.error.name", "'AbortError'");
+    // FIXME: Ambiguous spec. See: https://www.w3.org/Bugs/Public/show_bug.cgi?id=17236
+    evalAndExpectException("trans.error", "DOMException.INVALID_STATE_ERR", "'InvalidStateError'");
     shouldBeTrue("firstError");
     shouldBeFalse("secondError");
     shouldBeFalse("abortFired");
@@ -81,9 +89,10 @@ function transactionAborted()
     shouldBeTrue("firstError");
     shouldBeTrue("secondError");
     shouldBeFalse("abortFired");
+    shouldBe("trans.error", "firstDOMError");
     abortFired = true;
 
-    evalAndExpectException("store.add({x: 'value5', y: 'zzz5'}, 'key5')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("store.add({x: 'value5', y: 'zzz5'}, 'key5')", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
     finishJSTest();
 }
 
index a4859f7..ac88793 100644 (file)
@@ -54,7 +54,7 @@ function runFirstRegularTransaction()
 function firstTransactionComplete()
 {
     evalAndLog("db.close()");
-    evalAndExpectException("db.transaction(['store'], 'readwrite')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("db.transaction(['store'], 'readwrite')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
 
     debug("")
     debug("verify that we can reopen the db after calling close")
index e349143..7bb5ef4 100644 (file)
@@ -38,49 +38,49 @@ function created()
 {
     trans = evalAndLog("trans = db.transaction(['a'])");
     evalAndLog("trans.objectStore('a')");
-    evalAndExpectException("trans.objectStore('b')", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('b')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     trans = evalAndLog("trans = db.transaction(['a'])");
     evalAndLog("trans.objectStore('a')");
-    evalAndExpectException("trans.objectStore('b')", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('b')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     trans = evalAndLog("trans = db.transaction(['b'])");
     evalAndLog("trans.objectStore('b')");
-    evalAndExpectException("trans.objectStore('a')", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('a')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     trans = evalAndLog("trans = db.transaction(['a', 'b'])");
     evalAndLog("trans.objectStore('a')");
     evalAndLog("trans.objectStore('b')");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     trans = evalAndLog("trans = db.transaction(['b', 'a'])");
     evalAndLog("trans.objectStore('a')");
     evalAndLog("trans.objectStore('b')");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     debug("Passing a string as the first argument is a shortcut for just one object store:");
     trans = evalAndLog("trans = db.transaction('a')");
     evalAndLog("trans.objectStore('a')");
-    evalAndExpectException("trans.objectStore('b')", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("trans.objectStore('x')", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("trans.objectStore('b')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("trans.objectStore('x')", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     shouldThrow("trans = db.transaction()");
     debug("");
 
-    evalAndExpectException("db.transaction(['x'])", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction(['x'])", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction(['a', 'x'])", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction(['x', 'x'])", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction(['a', 'x', 'b'])", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("db.transaction(['x'])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction(['x'])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction(['a', 'x'])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction(['x', 'x'])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction(['a', 'x', 'b'])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     debug("Exception thrown when no stores specified:");
@@ -88,16 +88,16 @@ function created()
     debug("");
 
     debug("{} coerces to a string - so no match, but not a type error:");
-    evalAndExpectException("db.transaction({})", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction({mode:0})", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("db.transaction({})", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction({mode:0})", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     debug("Overriding the default string coercion makes these work:");
     evalAndLog("db.transaction({toString:function(){return 'a';}})");
     evalAndLog("db.transaction([{toString:function(){return 'a';}}])");
     debug("... but you still need to specify a real store:");
-    evalAndExpectException("db.transaction([{toString:function(){return 'x';}}])", "IDBDatabaseException.NOT_FOUND_ERR");
-    evalAndExpectException("db.transaction([{toString:function(){return 'x';}}])", "IDBDatabaseException.NOT_FOUND_ERR");
+    evalAndExpectException("db.transaction([{toString:function(){return 'x';}}])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
+    evalAndExpectException("db.transaction([{toString:function(){return 'x';}}])", "DOMException.NOT_FOUND_ERR", "'NotFoundError'");
     debug("");
 
     trans = evalAndLog("trans = db.transaction(['store'])");
@@ -115,8 +115,8 @@ function afterComplete()
     debug("transaction complete, ensuring methods fail");
     shouldBeNonNull("trans");
     shouldBeNonNull("store");
-    evalAndExpectException("trans.objectStore('store')", "IDBDatabaseException.NOT_ALLOWED_ERR");
-    evalAndExpectException("store.index('index')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("trans.objectStore('store')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
+    evalAndExpectException("store.index('index')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
 
     finishJSTest();
 }
index ce852c9..8fa7016 100644 (file)
@@ -111,18 +111,18 @@ function testInactiveAbortedTransaction()
 {
     debug("");
     debug("testInactiveAbortedTransaction():");
-    evalAndExpectException("index.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.openKeyCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.getKey(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.count()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-
-    evalAndExpectException("store.put(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.add(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.delete(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.clear()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("index.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.openKeyCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.getKey(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.count()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+
+    evalAndExpectException("store.put(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.add(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.delete(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.clear()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
 
     testSetVersionAbort4();
 }
@@ -153,18 +153,18 @@ function testInactiveCompletedTransaction()
 {
     debug("");
     debug("testInactiveCompletedTransaction():");
-    evalAndExpectException("index.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.openKeyCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.getKey(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("index.count()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-
-    evalAndExpectException("store.put(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.add(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.delete(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.clear()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
-    evalAndExpectException("store.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR");
+    evalAndExpectException("index.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.openKeyCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.getKey(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("index.count()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+
+    evalAndExpectException("store.put(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.add(0, 0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.delete(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.clear()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.get(0)", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
+    evalAndExpectException("store.openCursor()", "IDBDatabaseException.TRANSACTION_INACTIVE_ERR", "'TransactionInactiveError'");
 
     testSetVersionAbort5();
 }
@@ -279,7 +279,7 @@ function testInvalidMode()
 {
     debug("");
     debug("Verify that specifying an invalid mode raises an exception");
-    evalAndExpectException("db.transaction(['storeName'], 'lsakjdf')", "IDBDatabaseException.NOT_ALLOWED_ERR");
+    evalAndExpectException("db.transaction(['storeName'], 'lsakjdf')", "IDBDatabaseException.NOT_ALLOWED_ERR", "'NotAllowedError'");
     finishJSTest();
 }
 
index d943a31..a75a7c0 100644 (file)
@@ -36,10 +36,10 @@ function cleanDatabase()
 function setVersionDone()
 {
     trans = evalAndLog("trans = db.transaction('store')");
-    evalAndExpectException("trans.objectStore('store').put('a', 'b')", "IDBDatabaseException.READ_ONLY_ERR");
+    evalAndExpectException("trans.objectStore('store').put('a', 'b')", "IDBDatabaseException.READ_ONLY_ERR", "'ReadOnlyError'");
 
     trans = evalAndLog("trans = db.transaction('store')");
-    evalAndExpectException("trans.objectStore('store').delete('x')", "IDBDatabaseException.READ_ONLY_ERR");
+    evalAndExpectException("trans.objectStore('store').delete('x')", "IDBDatabaseException.READ_ONLY_ERR", "'ReadOnlyError'");
 
     trans = evalAndLog("trans = db.transaction('store')");
     cur = evalAndLog("cur = trans.objectStore('store').openCursor()");
@@ -50,7 +50,7 @@ function setVersionDone()
 function gotCursor()
 {
     shouldBeFalse("!event.target.result");
-    evalAndExpectException("event.target.result.delete()", "IDBDatabaseException.READ_ONLY_ERR");
+    evalAndExpectException("event.target.result.delete()", "IDBDatabaseException.READ_ONLY_ERR", "'ReadOnlyError'");
 
     finishJSTest();
 }
index cd03f73..74a66ed 100644 (file)
@@ -53,17 +53,20 @@ Note: This means that a connection can receive a blocked event after its close()
 PASS event.version is "version 3"
 
 PASS connection[0] got error event
-PASS event.target.errorCode is IDBDatabaseException.ABORT_ERR
+PASS event.target.errorCode is DOMException.ABORT_ERR
+PASS event.target.error.name is 'AbortError'
 PASS event.target.webkitErrorMessage.length > 0 is true
 Connection was closed before set version transaction was created
 
 PASS connection[2] got error event
-PASS event.target.errorCode is IDBDatabaseException.ABORT_ERR
+PASS event.target.errorCode is DOMException.ABORT_ERR
+PASS event.target.error.name is 'AbortError'
 PASS event.target.webkitErrorMessage.length > 0 is true
 Connection was closed before set version transaction was created
 
 PASS connection[3] got error event
-PASS event.target.errorCode is IDBDatabaseException.ABORT_ERR
+PASS event.target.errorCode is DOMException.ABORT_ERR
+PASS event.target.error.name is 'AbortError'
 PASS event.target.webkitErrorMessage.length > 0 is true
 Connection was closed before set version transaction was created
 
index 7c2e261..92a1b36 100644 (file)
@@ -21,23 +21,36 @@ trans.oncomplete = unexpectedCompleteCallback
 store = trans.objectStore('storeName')
 store.add({x: 'value2', y: 'zzz2'}, 'key2')
 store.add({x: 'value3', y: 'zzz3'}, 'key3')
-PASS event.target.errorCode is IDBDatabaseException.ABORT_ERR
+PASS event.target.errorCode is DOMException.ABORT_ERR
+PASS event.target.error.name is 'AbortError'
+Expecting exception from trans.error
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
 PASS firstError is false
 PASS secondError is false
 PASS abortFired is false
 Expecting exception from store.add({x: 'value4', y: 'zzz4'}, 'key4')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
-PASS event.target.errorCode is IDBDatabaseException.ABORT_ERR
+PASS ename is 'TransactionInactiveError'
+PASS event.target.errorCode is DOMException.ABORT_ERR
+PASS event.target.error.name is 'AbortError'
+Expecting exception from trans.error
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
 PASS firstError is true
 PASS secondError is false
 PASS abortFired is false
 PASS firstError is true
 PASS secondError is true
 PASS abortFired is false
+PASS trans.error is firstDOMError
 Expecting exception from store.add({x: 'value5', y: 'zzz5'}, 'key5')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 9765a23..d703fba 100644 (file)
@@ -20,6 +20,7 @@ PASS [Worker] Transaction aborted
 [Worker] Expecting exception from store.get(0)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS [Worker] ename is 'TransactionInactiveError'
 [Worker] 
 [Worker] recursionTest():
 [Worker] transaction = db.transaction('store')
@@ -48,6 +49,7 @@ PASS [Worker] transaction completed
 [Worker] Expecting exception from store.get(0)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS [Worker] ename is 'TransactionInactiveError'
 [Worker] 
 [Worker] trying a timeout callback:
 [Worker] setTimeout(timeoutTest, 0)
@@ -59,6 +61,7 @@ PASS [Worker] transaction started in setTimeout() callback aborted
 [Worker] Expecting exception from store.get(0)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS [Worker] ename is 'TransactionInactiveError'
 [Worker] 
 [Worker] errorTest():
 [Worker] self.old_onerror = self.onerror
@@ -74,6 +77,7 @@ PASS [Worker] Transaction aborted
 [Worker] Expecting exception from store.get(0)
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS [Worker] ename is 'TransactionInactiveError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 98046b4..a583c52 100644 (file)
@@ -20,6 +20,7 @@ db.close()
 Expecting exception from db.transaction(['store'], 'readwrite')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 
 verify that we can reopen the db after calling close
 indexedDB.open('transaction-after-close')
index 807f0c2..478d3cc 100644 (file)
@@ -19,70 +19,85 @@ trans = db.transaction(['a'])
 trans.objectStore('a')
 Expecting exception from trans.objectStore('b')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 trans = db.transaction(['a'])
 trans.objectStore('a')
 Expecting exception from trans.objectStore('b')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 trans = db.transaction(['b'])
 trans.objectStore('b')
 Expecting exception from trans.objectStore('a')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 trans = db.transaction(['a', 'b'])
 trans.objectStore('a')
 trans.objectStore('b')
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 trans = db.transaction(['b', 'a'])
 trans.objectStore('a')
 trans.objectStore('b')
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 Passing a string as the first argument is a shortcut for just one object store:
 trans = db.transaction('a')
 trans.objectStore('a')
 Expecting exception from trans.objectStore('b')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from trans.objectStore('x')
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 PASS trans = db.transaction() threw exception TypeError: Type error.
 
 Expecting exception from db.transaction(['x'])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction(['x'])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction(['a', 'x'])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction(['x', 'x'])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction(['a', 'x', 'b'])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 Exception thrown when no stores specified:
 Expecting exception from db.transaction([])
@@ -92,10 +107,12 @@ PASS code is DOMException.INVALID_ACCESS_ERR
 {} coerces to a string - so no match, but not a type error:
 Expecting exception from db.transaction({})
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction({mode:0})
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 Overriding the default string coercion makes these work:
 db.transaction({toString:function(){return 'a';}})
@@ -103,10 +120,12 @@ db.transaction([{toString:function(){return 'a';}}])
 ... but you still need to specify a real store:
 Expecting exception from db.transaction([{toString:function(){return 'x';}}])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 Expecting exception from db.transaction([{toString:function(){return 'x';}}])
 PASS Exception was thrown.
-PASS code is IDBDatabaseException.NOT_FOUND_ERR
+PASS code is DOMException.NOT_FOUND_ERR
+PASS ename is 'NotFoundError'
 
 trans = db.transaction(['store'])
 PASS trans is non-null.
@@ -119,9 +138,11 @@ PASS store is non-null.
 Expecting exception from trans.objectStore('store')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 Expecting exception from store.index('index')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b49beae..5fc2515 100644 (file)
@@ -54,36 +54,47 @@ testInactiveAbortedTransaction():
 Expecting exception from index.openCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.openKeyCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.get(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.getKey(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.count()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.put(0, 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.add(0, 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.delete(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.clear()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.get(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.openCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 
 testSetVersionAbort4():
 PASS self.db.objectStoreNames is []
@@ -100,36 +111,47 @@ testInactiveCompletedTransaction():
 Expecting exception from index.openCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.openKeyCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.get(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.getKey(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from index.count()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.put(0, 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.add(0, 0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.delete(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.clear()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.get(0)
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 Expecting exception from store.openCursor()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.TRANSACTION_INACTIVE_ERR
+PASS ename is 'TransactionInactiveError'
 
 testSetVersionAbort5():
 PASS db.objectStoreNames is ['storeFail']
@@ -173,6 +195,7 @@ Verify that specifying an invalid mode raises an exception
 Expecting exception from db.transaction(['storeName'], 'lsakjdf')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.NOT_ALLOWED_ERR
+PASS ename is 'NotAllowedError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 35f114a..c604612 100644 (file)
@@ -16,16 +16,19 @@ trans = db.transaction('store')
 Expecting exception from trans.objectStore('store').put('a', 'b')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.READ_ONLY_ERR
+PASS ename is 'ReadOnlyError'
 trans = db.transaction('store')
 Expecting exception from trans.objectStore('store').delete('x')
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.READ_ONLY_ERR
+PASS ename is 'ReadOnlyError'
 trans = db.transaction('store')
 cur = trans.objectStore('store').openCursor()
 PASS !event.target.result is false
 Expecting exception from event.target.result.delete()
 PASS Exception was thrown.
 PASS code is IDBDatabaseException.READ_ONLY_ERR
+PASS ename is 'ReadOnlyError'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6ccd1ad..8825026 100644 (file)
@@ -1,3 +1,59 @@
+2012-05-31  Alec Flett  <alecflett@chromium.org>
+
+        IndexedDB: Implement IDBTransaction.error and IDBRequest.error
+        https://bugs.webkit.org/show_bug.cgi?id=87865
+
+        Reviewed by Tony Chang.
+
+        Added "error" attribute to IDBRequest and IDBTransaction. Update
+        IDBDatabaseError to honor the IDBDatabaseException behavior
+        of dealing with IDB-specific throws of DOMException codes,
+        as per the spec.
+
+        Existing tests which previously tested 'errorCode' and
+        'webkitErrorMessage' have been updated to use the new attribute.
+
+        * Modules/indexeddb/IDBCursor.cpp:
+        (WebCore::IDBCursor::advance):
+        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
+        (WebCore::IDBDatabaseBackendImpl::setVersion):
+        * Modules/indexeddb/IDBDatabaseError.h:
+        (WebCore::IDBDatabaseError::create):
+        (WebCore::IDBDatabaseError::code):
+        (WebCore::IDBDatabaseError::idbCode):
+        (WebCore::IDBDatabaseError::name):
+        (WebCore::IDBDatabaseError::IDBDatabaseError):
+        (IDBDatabaseError):
+        * Modules/indexeddb/IDBDatabaseException.cpp:
+        (WebCore):
+        (WebCore::getErrorEntry):
+        (WebCore::IDBDatabaseException::initializeDescription):
+        (WebCore::IDBDatabaseException::getErrorName):
+        (WebCore::IDBDatabaseException::getLegacyErrorCode):
+        * Modules/indexeddb/IDBDatabaseException.h:
+        (IDBDatabaseException):
+        * Modules/indexeddb/IDBObjectStore.cpp:
+        (WebCore::IDBObjectStore::createIndex):
+        * Modules/indexeddb/IDBRequest.cpp:
+        (WebCore::IDBRequest::error):
+        (WebCore):
+        (WebCore::IDBRequest::resetReadyState):
+        (WebCore::IDBRequest::abort):
+        (WebCore::IDBRequest::onError):
+        (WebCore::IDBRequest::onSuccess):
+        (WebCore::IDBRequest::onSuccessWithContinuation):
+        (WebCore::IDBRequest::dispatchEvent):
+        * Modules/indexeddb/IDBRequest.h:
+        (IDBRequest):
+        * Modules/indexeddb/IDBRequest.idl:
+        * Modules/indexeddb/IDBTransaction.cpp:
+        (WebCore::IDBTransaction::error):
+        (WebCore):
+        (WebCore::IDBTransaction::setError):
+        * Modules/indexeddb/IDBTransaction.h:
+        (IDBTransaction):
+        * Modules/indexeddb/IDBTransaction.idl:
+
 2012-05-31  James Robinson  <jamesr@chromium.org>
 
         [chromium] Assertion failures during compositor startup in lost context situations
index 22538c3..de4ec08 100644 (file)
@@ -158,8 +158,8 @@ void IDBCursor::advance(unsigned long count, ExceptionCode& ec)
     }
 
     if (!count) {
-        // FIXME: spec says we should throw a JavaScript TypeError
-        ec = TYPE_MISMATCH_ERR;
+        // FIXME: should be a JavaScript TypeError. See https://bugs.webkit.org/show_bug.cgi?id=85513
+        ec = IDBDatabaseException::IDB_TYPE_MISMATCH_ERR;
         return;
     }
 
index 096ee85..3b29731 100644 (file)
@@ -213,8 +213,7 @@ void IDBDatabaseBackendImpl::setVersion(const String& version, PassRefPtr<IDBCal
     RefPtr<IDBCallbacks> callbacks = prpCallbacks;
     RefPtr<IDBDatabaseCallbacks> databaseCallbacks = prpDatabaseCallbacks;
     if (!m_databaseCallbacksSet.contains(databaseCallbacks)) {
-        // FIXME: IDBDatabaseError doesn't yet do proper translation of IDB-specific uses of error codes, this should be IDB_ABORT_ERR
-        callbacks->onError(IDBDatabaseError::createWithoutOffset(ABORT_ERR, "Connection was closed before set version transaction was created"));
+        callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "Connection was closed before set version transaction was created"));
         return;
     }
     for (DatabaseCallbacksSet::const_iterator it = m_databaseCallbacksSet.begin(); it != m_databaseCallbacksSet.end(); ++it) {
index 8b42f17..76ff09f 100644 (file)
@@ -41,28 +41,22 @@ public:
     {
         ASSERT(code >= IDBDatabaseException::IDBDatabaseExceptionOffset);
         ASSERT(code < IDBDatabaseException::IDBDatabaseExceptionMax);
-        return adoptRef(new IDBDatabaseError(code - IDBDatabaseException::IDBDatabaseExceptionOffset, message));
-    }
-
-    static PassRefPtr<IDBDatabaseError> createWithoutOffset(unsigned short code, const String& message)
-    {
-        ASSERT(code < IDBDatabaseException::IDBDatabaseExceptionOffset);
         return adoptRef(new IDBDatabaseError(code, message));
     }
 
     ~IDBDatabaseError() { }
 
-    unsigned short code() const { return m_code; }
-    void setCode(unsigned short value) { m_code = value; }
+    unsigned short code() const { return IDBDatabaseException::getLegacyErrorCode(m_code); }
+    unsigned short idbCode() const { return m_code; }
     const String& message() const { return m_message; }
-    void setMessage(const String& value) { m_message = value; }
+    const String name() const { return IDBDatabaseException::getErrorName(m_code); };
 
 private:
     IDBDatabaseError(unsigned short code, const String& message)
-        : m_code(code), m_message(message) { }
+            : m_code(code), m_message(message) { }
 
-    unsigned short m_code;
-    String m_message;
+    const unsigned short m_code;
+    const String m_message;
 };
 
 } // namespace WebCore
index 0e1e5c4..e52c329 100644 (file)
@@ -61,30 +61,57 @@ static const struct IDBDatabaseExceptionNameDescription {
     { "TimeoutError", "A lock for the transaction could not be obtained in a reasonable time.", TIMEOUT_ERR }, // FIXME: This isn't used yet.
     { "QuotaExceededError", "The operation failed because there was not enough remaining storage space, or the storage quota was reached and the user declined to give more space to the database.", QUOTA_EXCEEDED_ERR }, // FIXME: This isn't used yet
     { "SyntaxError", "The keypath argument contains an invalid key path.", SYNTAX_ERR },
-    { "DataCloneError", "The data being stored could not be cloned by the internal structured cloning algorithm.", DATA_CLONE_ERR }
+    { "DataCloneError", "The data being stored could not be cloned by the internal structured cloning algorithm.", DATA_CLONE_ERR },
+    // FIXME: should be a JavaScript TypeError. See https://bugs.webkit.org/show_bug.cgi?id=85513
+    { "TypeMismatchError", "This should be a TypeError", TYPE_MISMATCH_ERR },
+    { "NotSupportedError", "Cannot use multiEntry indexed with an array keypath", NOT_SUPPORTED_ERR },
 };
 
-bool IDBDatabaseException::initializeDescription(ExceptionCode ec, ExceptionCodeDescription* description)
+static const IDBDatabaseExceptionNameDescription* getErrorEntry(ExceptionCode ec)
 {
-    if (ec < IDBDatabaseExceptionOffset || ec > IDBDatabaseExceptionMax)
-        return false;
+    if (ec < IDBDatabaseException::IDBDatabaseExceptionOffset || ec > IDBDatabaseException::IDBDatabaseExceptionMax)
+        return 0;
 
     size_t tableSize = WTF_ARRAY_LENGTH(idbDatabaseExceptions);
     size_t tableIndex = ec - IDBDatabaseException::UNKNOWN_ERR;
 
-    const IDBDatabaseExceptionNameDescription* entry = tableIndex < tableSize ? &idbDatabaseExceptions[tableIndex] : 0;
+    return tableIndex < tableSize ? &idbDatabaseExceptions[tableIndex] : 0;
+}
+
+bool IDBDatabaseException::initializeDescription(ExceptionCode ec, ExceptionCodeDescription* description)
+{
+    const IDBDatabaseExceptionNameDescription* entry = getErrorEntry(ec);
+    if (!entry)
+        return false;
 
     description->typeName = "DOM IDBDatabase";
     description->code = (entry && entry->legacyCode) ? entry->legacyCode : ec - IDBDatabaseExceptionOffset;
     description->type = IDBDatabaseExceptionType;
 
-
     description->name = entry ? entry->name : 0;
     description->description = entry ? entry->description : 0;
 
     return true;
 }
 
+String IDBDatabaseException::getErrorName(ExceptionCode ec)
+{
+    const IDBDatabaseExceptionNameDescription* entry = getErrorEntry(ec);
+    ASSERT(entry);
+    if (!entry)
+        return "UnknownError";
+
+    return entry->name;
+}
+
+ExceptionCode IDBDatabaseException::getLegacyErrorCode(ExceptionCode ec)
+{
+    const IDBDatabaseExceptionNameDescription* entry = getErrorEntry(ec);
+    ASSERT(entry);
+
+    return (entry && entry->legacyCode) ? entry->legacyCode : ec - IDBDatabaseExceptionOffset;
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(INDEXED_DATABASE)
index edc8cb0..35123d5 100644 (file)
@@ -65,6 +65,8 @@ public:
         IDB_QUOTA_EXCEEDED_ERR,
         IDB_SYNTAX_ERR,
         IDB_DATA_CLONE_ERR,
+        IDB_TYPE_MISMATCH_ERR,
+        IDB_NOT_SUPPORTED_ERR,
     };
 
     static int ErrorCodeToExceptionCode(int errorCode)
@@ -75,6 +77,8 @@ public:
     }
 
     static bool initializeDescription(ExceptionCode, ExceptionCodeDescription*);
+    static String getErrorName(ExceptionCode);
+    static ExceptionCode getLegacyErrorCode(ExceptionCode);
 
 private:
     IDBDatabaseException(const ExceptionCodeDescription& description)
index 4d2a19c..7b245e6 100644 (file)
@@ -238,7 +238,7 @@ PassRefPtr<IDBIndex> IDBObjectStore::createIndex(const String& name, const IDBKe
     options.get("multiEntry", multiEntry);
 
     if (keyPath.type() == IDBKeyPath::ArrayType && multiEntry) {
-        ec = NOT_SUPPORTED_ERR;
+        ec = IDBDatabaseException::IDB_NOT_SUPPORTED_ERR;
         return 0;
     }
 
index ee340c7..a316f8d 100644 (file)
@@ -85,6 +85,15 @@ PassRefPtr<IDBAny> IDBRequest::result(ExceptionCode& ec) const
     return m_result;
 }
 
+PassRefPtr<DOMError> IDBRequest::error(ExceptionCode& ec) const
+{
+    if (m_readyState != DONE) {
+        ec = IDBDatabaseException::IDB_INVALID_STATE_ERR;
+        return 0;
+    }
+    return m_error;
+}
+
 unsigned short IDBRequest::errorCode(ExceptionCode& ec) const
 {
     if (m_readyState != DONE) {
@@ -142,6 +151,7 @@ bool IDBRequest::resetReadyState(IDBTransaction* transaction)
     m_readyState = PENDING;
     m_result.clear();
     m_errorCode = 0;
+    m_error.clear();
     m_errorMessage = String();
 
     IDBPendingTransactionMonitor::removePendingTransaction(m_transaction->backend());
@@ -172,9 +182,10 @@ void IDBRequest::abort()
     m_enqueuedEvents.clear();
 
     m_errorCode = 0;
+    m_error.clear();
     m_errorMessage = String();
     m_result.clear();
-    onError(IDBDatabaseError::createWithoutOffset(ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
+    onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "The transaction was aborted, so the request cannot be fulfilled."));
 }
 
 void IDBRequest::setCursorType(IDBCursorBackendInterface::CursorType cursorType)
@@ -200,6 +211,8 @@ void IDBRequest::onError(PassRefPtr<IDBDatabaseError> error)
 {
     ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
     m_errorCode = error->code();
+    ASSERT(!m_error);
+    m_error = DOMError::create(IDBDatabaseException::getErrorName(error->idbCode()));
     m_errorMessage = error->message();
     m_cursor.clear();
     enqueueEvent(Event::create(eventNames().errorEvent, true, true));
@@ -213,7 +226,7 @@ static PassRefPtr<Event> createSuccessEvent()
 void IDBRequest::onSuccess(PassRefPtr<DOMStringList> domStringList)
 {
     IDB_TRACE("IDBRequest::onSuccess(DOMStringList)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     m_result = IDBAny::create(domStringList);
     enqueueEvent(createSuccessEvent());
 }
@@ -221,7 +234,7 @@ void IDBRequest::onSuccess(PassRefPtr<DOMStringList> domStringList)
 void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
 {
     IDB_TRACE("IDBRequest::onSuccess(IDBCursor)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     ASSERT(m_cursorType != IDBCursorBackendInterface::InvalidCursorType);
     RefPtr<IDBCursor> cursor;
     if (m_cursorType == IDBCursorBackendInterface::IndexKeyCursor)
@@ -236,7 +249,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBCursorBackendInterface> backend)
 void IDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
 {
     IDB_TRACE("IDBRequest::onSuccess(IDBDatabase)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     if (m_contextStopped || !scriptExecutionContext())
         return;
 
@@ -250,7 +263,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> backend)
 void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
 {
     IDB_TRACE("IDBRequest::onSuccess(IDBKey)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     if (idbKey && idbKey->isValid())
         m_result = IDBAny::create(idbKey);
     else
@@ -261,7 +274,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBKey> idbKey)
 void IDBRequest::onSuccess(PassRefPtr<IDBTransactionBackendInterface> prpBackend)
 {
     IDB_TRACE("IDBRequest::onSuccess(IDBTransaction)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     RefPtr<IDBTransactionBackendInterface> backend = prpBackend;
 
     if (m_contextStopped || !scriptExecutionContext()) {
@@ -286,7 +299,7 @@ void IDBRequest::onSuccess(PassRefPtr<IDBTransactionBackendInterface> prpBackend
 void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptValue)
 {
     IDB_TRACE("IDBRequest::onSuccess(SerializedScriptValue)");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     m_result = IDBAny::create(serializedScriptValue);
     m_cursor.clear();
     enqueueEvent(createSuccessEvent());
@@ -295,7 +308,7 @@ void IDBRequest::onSuccess(PassRefPtr<SerializedScriptValue> serializedScriptVal
 void IDBRequest::onSuccessWithContinuation()
 {
     IDB_TRACE("IDBRequest::onSuccessWithContinuation");
-    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
+    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_error && !m_result);
     ASSERT(m_cursor);
     setResultCursor(m_cursor, m_cursorType);
     m_cursor.clear();
@@ -387,8 +400,10 @@ bool IDBRequest::dispatchEvent(PassRefPtr<Event> event)
 
     if (m_transaction && event->type() != eventNames().blockedEvent) {
         // If an error event and the default wasn't prevented...
-        if (dontPreventDefault && event->type() == eventNames().errorEvent)
+        if (dontPreventDefault && event->type() == eventNames().errorEvent) {
+            m_transaction->setError(m_error);
             m_transaction->backend()->abort();
+        }
         m_transaction->backend()->didCompleteTaskEvents();
     }
     return dontPreventDefault;
index 055d001..e104d8f 100644 (file)
@@ -32,6 +32,7 @@
 #if ENABLE(INDEXED_DATABASE)
 
 #include "ActiveDOMObject.h"
+#include "DOMError.h"
 #include "DOMStringList.h"
 #include "Event.h"
 #include "EventListener.h"
@@ -53,6 +54,7 @@ public:
 
     PassRefPtr<IDBAny> result(ExceptionCode&) const;
     unsigned short errorCode(ExceptionCode&) const;
+    PassRefPtr<DOMError> error(ExceptionCode&) const;
     String webkitErrorMessage(ExceptionCode&) const;
     PassRefPtr<IDBAny> source() const;
     PassRefPtr<IDBTransaction> transaction() const;
@@ -109,6 +111,7 @@ protected:
     RefPtr<IDBAny> m_result;
     unsigned short m_errorCode;
     String m_errorMessage;
+    RefPtr<DOMError> m_error;
 
 private:
     // EventTarget
index 7cd3415..1e49415 100644 (file)
@@ -38,8 +38,11 @@ module storage {
             getter raises (IDBDatabaseException);
         readonly attribute unsigned short errorCode
             getter raises (IDBDatabaseException);
+        readonly attribute DOMError error
+            getter raises (IDBDatabaseException);
         readonly attribute [TreatReturnedNullStringAs=Undefined] DOMString webkitErrorMessage
             getter raises (IDBDatabaseException);
+
         readonly attribute IDBAny source;
         readonly attribute IDBTransaction transaction;
 
index e9d3b97..f5c744b 100644 (file)
@@ -118,6 +118,26 @@ IDBDatabase* IDBTransaction::db() const
     return m_database.get();
 }
 
+PassRefPtr<DOMError> IDBTransaction::error(ExceptionCode& ec) const
+{
+    if (!m_transactionFinished) {
+        ec = IDBDatabaseException::IDB_INVALID_STATE_ERR;
+        return 0;
+    }
+    return m_error;
+}
+
+void IDBTransaction::setError(PassRefPtr<DOMError> error)
+{
+    ASSERT(!m_transactionFinished);
+    ASSERT(error);
+
+    // The first error to be set is the true cause of the
+    // transaction abort.
+    if (!m_error)
+        m_error = error;
+}
+
 PassRefPtr<IDBObjectStore> IDBTransaction::objectStore(const String& name, ExceptionCode& ec)
 {
     if (m_transactionFinished) {
index 641f62b..1cebe9c 100644 (file)
@@ -29,6 +29,7 @@
 #if ENABLE(INDEXED_DATABASE)
 
 #include "ActiveDOMObject.h"
+#include "DOMError.h"
 #include "DOMStringList.h"
 #include "Event.h"
 #include "EventListener.h"
@@ -70,6 +71,9 @@ public:
 
     const String& mode() const;
     IDBDatabase* db() const;
+    PassRefPtr<DOMError> error(ExceptionCode&) const;
+    void setError(PassRefPtr<DOMError>);
+
     PassRefPtr<IDBObjectStore> objectStore(const String& name, ExceptionCode&);
     void abort();
 
@@ -129,6 +133,7 @@ private:
     const unsigned short m_mode;
     bool m_transactionFinished; // Is it possible that we'll fire any more events or allow any new requests? If not, we're finished.
     bool m_contextStopped;
+    RefPtr<DOMError> m_error;
 
     ListHashSet<IDBRequest*> m_childRequests;
 
index b585108..a0e54c0 100644 (file)
@@ -39,6 +39,9 @@ module storage {
         // Properties
         readonly attribute DOMString mode;
         readonly attribute IDBDatabase db;
+        readonly attribute DOMError error 
+            getter raises (IDBDatabaseException);
+
         // Methods
         IDBObjectStore objectStore (in DOMString name)
             raises (IDBDatabaseException);
index 376f4a3..bf151b9 100644 (file)
@@ -1,3 +1,16 @@
+2012-05-31  Alec Flett  <alecflett@chromium.org>
+
+        IndexedDB: Implement IDBTransaction.error and IDBRequest.error
+        https://bugs.webkit.org/show_bug.cgi?id=87865
+
+        Reviewed by Tony Chang.
+
+        IDBDatabaseError now honors IDB-specific DOMException codes,
+        so make sure that's how they are passed to/from chromium.
+
+        * src/WebIDBDatabaseError.cpp:
+        (WebKit::WebIDBDatabaseError::assign):
+
 2012-05-31  James Robinson  <jamesr@chromium.org>
 
         [chromium] Assertion failures during compositor startup in lost context situations
index c454b48..ea580b4 100644 (file)
@@ -47,7 +47,7 @@ void WebIDBDatabaseError::assign(const WebIDBDatabaseError& value)
 
 void WebIDBDatabaseError::assign(unsigned short code, const WebString& message)
 {
-    m_private = IDBDatabaseError::createWithoutOffset(code, message);
+    m_private = IDBDatabaseError::create(code, message);
 }
 
 void WebIDBDatabaseError::reset()
@@ -57,7 +57,7 @@ void WebIDBDatabaseError::reset()
 
 unsigned short WebIDBDatabaseError::code() const
 {
-    return m_private->code();
+    return m_private->idbCode();
 }
 
 WebString WebIDBDatabaseError::message() const