IDB: Reimport storage/indexeddb tests from Blink
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Feb 2014 01:56:01 +0000 (01:56 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Feb 2014 01:56:01 +0000 (01:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=128636

Reviewed by Tim Horton.

* resources/js-test.js: Added.
* storage/indexeddb/aborted-versionchange-closes-expected.txt:
* storage/indexeddb/aborted-versionchange-closes.html:
* storage/indexeddb/basics-expected.txt:
* storage/indexeddb/basics-shared-workers-expected.txt:
* storage/indexeddb/basics-shared-workers.html:
* storage/indexeddb/basics-workers-expected.txt:
* storage/indexeddb/basics-workers.html:
* storage/indexeddb/basics.html:
* storage/indexeddb/clone-exception-expected.txt:
* storage/indexeddb/clone-exception.html:
* storage/indexeddb/closed-cursor-expected.txt: Added.
* storage/indexeddb/closed-cursor.html: Added.
* storage/indexeddb/connection-leak-expected.txt: Added.
* storage/indexeddb/connection-leak.html: Added.
* storage/indexeddb/create-and-remove-object-store-expected.txt:
* storage/indexeddb/create-and-remove-object-store.html:
* storage/indexeddb/create-object-store-options-expected.txt:
* storage/indexeddb/create-object-store-options.html:
* storage/indexeddb/createIndex-after-failure-expected.txt:
* storage/indexeddb/createIndex-after-failure.html:
* storage/indexeddb/createObjectStore-name-argument-required-expected.txt:
* storage/indexeddb/createObjectStore-name-argument-required.html:
* storage/indexeddb/createObjectStore-null-name.html:
* storage/indexeddb/cursor-added-bug.html:
* storage/indexeddb/cursor-advance-expected.txt:
* storage/indexeddb/cursor-advance-workers-expected.txt:
* storage/indexeddb/cursor-advance-workers.html:
* storage/indexeddb/cursor-advance.html:
* storage/indexeddb/cursor-basics-expected.txt: Added.
* storage/indexeddb/cursor-basics.html: Added.
* storage/indexeddb/cursor-cast-expected.txt: Added.
* storage/indexeddb/cursor-cast.html: Added.
* storage/indexeddb/cursor-continue-dir-expected.txt:
* storage/indexeddb/cursor-continue-dir.html:
* storage/indexeddb/cursor-continue-expected.txt:
* storage/indexeddb/cursor-continue-validity-expected.txt:
* storage/indexeddb/cursor-continue-validity.html:
* storage/indexeddb/cursor-continue.html:
* storage/indexeddb/cursor-continueprimarykey-expected.txt: Added.
* storage/indexeddb/cursor-continueprimarykey.html: Added.
* storage/indexeddb/cursor-delete.html:
* storage/indexeddb/cursor-finished-expected.txt:
* storage/indexeddb/cursor-finished.html:
* storage/indexeddb/cursor-inconsistency.html:
* storage/indexeddb/cursor-index-delete.html:
* storage/indexeddb/cursor-key-order.html:
* storage/indexeddb/cursor-leak-expected.txt:
* storage/indexeddb/cursor-leak.html: Added.
* storage/indexeddb/cursor-overloads-expected.txt:
* storage/indexeddb/cursor-overloads.html:
* storage/indexeddb/cursor-prev-no-duplicate.html:
* storage/indexeddb/cursor-primary-key-order.html:
* storage/indexeddb/cursor-properties.html:
* storage/indexeddb/cursor-request-cycle-expected.txt: Added.
* storage/indexeddb/cursor-request-cycle.html: Added.
* storage/indexeddb/cursor-reverse-bug.html:
* storage/indexeddb/cursor-skip-deleted.html:
* storage/indexeddb/cursor-update-expected.txt:
* storage/indexeddb/cursor-update-value-argument-required-expected.txt:
* storage/indexeddb/cursor-update-value-argument-required.html:
* storage/indexeddb/cursor-update.html:
* storage/indexeddb/cursor-value.html:
* storage/indexeddb/data-corruption-expected.txt:
* storage/indexeddb/data-corruption.html:
* storage/indexeddb/database-basics-expected.txt:
* storage/indexeddb/database-basics.html:
* storage/indexeddb/database-close-expected.txt:
* storage/indexeddb/database-close.html:
* storage/indexeddb/database-closepending-flag-expected.txt:
* storage/indexeddb/database-closepending-flag.html:
* storage/indexeddb/database-deletepending-flag.html:
* storage/indexeddb/database-name-undefined-expected.txt:
* storage/indexeddb/database-name-undefined.html:
* storage/indexeddb/database-odd-names.html:
* storage/indexeddb/database-wrapper-expected.txt:
* storage/indexeddb/database-wrapper.html:
* storage/indexeddb/delete-closed-database-object-expected.txt:
* storage/indexeddb/delete-closed-database-object.html:
* storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html:
* storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt:
* storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html:
* storage/indexeddb/delete-range.html:
* storage/indexeddb/deleteIndex-bug110792-expected.txt:
* storage/indexeddb/deleteIndex-bug110792.html:
* storage/indexeddb/deleteIndex-expected.txt:
* storage/indexeddb/deleteIndex.html:
* storage/indexeddb/deleteObjectStore-name-argument-required-expected.txt:
* storage/indexeddb/deleteObjectStore-name-argument-required.html:
* storage/indexeddb/deleteObjectStore-null-name.html:
* storage/indexeddb/deleted-objects-expected.txt:
* storage/indexeddb/deleted-objects.html:
* storage/indexeddb/deletedatabase-blocked.html:
* storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers.html:
* storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange.html:
* storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt:
* storage/indexeddb/deletedatabase-delayed-by-versionchange.html:
* storage/indexeddb/deletedatabase-not-blocked.html:
* storage/indexeddb/deletedatabase-transaction.html:
* storage/indexeddb/dont-commit-on-blocked.html:
* storage/indexeddb/dont-wedge.html:
* storage/indexeddb/duplicates.html:
* storage/indexeddb/error-causes-abort-by-default.html:
* storage/indexeddb/events-expected.txt:
* storage/indexeddb/events.html:
* storage/indexeddb/exception-in-event-aborts-expected.txt:
* storage/indexeddb/exception-in-event-aborts.html:
* storage/indexeddb/exceptions-expected.txt:
* storage/indexeddb/exceptions.html:
* storage/indexeddb/factory-basics-expected.txt:
* storage/indexeddb/factory-basics-workers-expected.txt:
* storage/indexeddb/factory-basics-workers.html:
* storage/indexeddb/factory-basics.html:
* storage/indexeddb/factory-cmp-expected.txt:
* storage/indexeddb/factory-cmp.html:
* storage/indexeddb/factory-deletedatabase.html:
* storage/indexeddb/get-keyrange-expected.txt:
* storage/indexeddb/get-keyrange.html:
* storage/indexeddb/index-basics-expected.txt:
* storage/indexeddb/index-basics-workers-expected.txt:
* storage/indexeddb/index-basics-workers.html:
* storage/indexeddb/index-basics.html:
* storage/indexeddb/index-count-expected.txt:
* storage/indexeddb/index-count.html:
* storage/indexeddb/index-cursor.html:
* storage/indexeddb/index-duplicate-keypaths.html:
* storage/indexeddb/index-get-key-argument-required-expected.txt:
* storage/indexeddb/index-get-key-argument-required.html:
* storage/indexeddb/index-multientry.html:
* storage/indexeddb/index-population.html:
* storage/indexeddb/index-unique.html:
* storage/indexeddb/interfaces.html:
* storage/indexeddb/intversion-abort-in-initial-upgradeneeded.html:
* storage/indexeddb/intversion-bad-parameters-expected.txt:
* storage/indexeddb/intversion-bad-parameters.html:
* storage/indexeddb/intversion-blocked.html:
* storage/indexeddb/intversion-close-between-events.html:
* storage/indexeddb/intversion-close-in-oncomplete-expected.txt:
* storage/indexeddb/intversion-close-in-oncomplete.html:
* storage/indexeddb/intversion-close-in-upgradeneeded-expected.txt:
* storage/indexeddb/intversion-close-in-upgradeneeded.html:
* storage/indexeddb/intversion-encoding.html:
* storage/indexeddb/intversion-gated-on-delete.html:
* storage/indexeddb/intversion-long-queue-expected.txt:
* storage/indexeddb/intversion-long-queue.html:
* storage/indexeddb/intversion-omit-parameter.html:
* storage/indexeddb/intversion-open-in-upgradeneeded.html:
* storage/indexeddb/intversion-open-with-version.html:
* storage/indexeddb/intversion-pending-version-changes-ascending-expected.txt: Added.
* storage/indexeddb/intversion-pending-version-changes-ascending.html: Added.
* storage/indexeddb/intversion-pending-version-changes-descending-expected.txt: Added.
* storage/indexeddb/intversion-pending-version-changes-descending.html: Added.
* storage/indexeddb/intversion-pending-version-changes-same-expected.txt: Added.
* storage/indexeddb/intversion-pending-version-changes-same.html: Added.
* storage/indexeddb/intversion-persistence.html:
* storage/indexeddb/intversion-revert-on-abort.html:
* storage/indexeddb/intversion-two-opens-no-versions.html:
* storage/indexeddb/intversion-upgrades-expected.txt:
* storage/indexeddb/intversion-upgrades.html:
* storage/indexeddb/invalid-keys-expected.txt:
* storage/indexeddb/invalid-keys.html:
* storage/indexeddb/key-generator.html:
* storage/indexeddb/key-sort-order-across-types.html:
* storage/indexeddb/key-sort-order-date.html:
* storage/indexeddb/key-type-array-expected.txt:
* storage/indexeddb/key-type-array.html:
* storage/indexeddb/key-type-binary-expected.txt: Added.
* storage/indexeddb/key-type-binary.html: Added.
* storage/indexeddb/key-type-infinity.html:
* storage/indexeddb/keypath-arrays-expected.txt:
* storage/indexeddb/keypath-arrays.html:
* storage/indexeddb/keypath-basics-expected.txt:
* storage/indexeddb/keypath-basics.html:
* storage/indexeddb/keypath-edges-expected.txt:
* storage/indexeddb/keypath-edges.html:
* storage/indexeddb/keypath-fetch-key.html:
* storage/indexeddb/keypath-intrinsic-properties.html:
* storage/indexeddb/keyrange-expected.txt:
* storage/indexeddb/keyrange-required-arguments-expected.txt:
* storage/indexeddb/keyrange-required-arguments.html:
* storage/indexeddb/keyrange.html:
* storage/indexeddb/lazy-index-population-expected.txt:
* storage/indexeddb/lazy-index-population.html:
* storage/indexeddb/lazy-index-types.html:
* storage/indexeddb/legacy-constants.html:
* storage/indexeddb/list-ordering.html:
* storage/indexeddb/metadata-race-expected.txt: Added.
* storage/indexeddb/metadata-race.html: Added.
* storage/indexeddb/metadata.html:
* storage/indexeddb/mutating-cursor.html:
* storage/indexeddb/noblobs-expected.txt:
* storage/indexeddb/noblobs.html:
* storage/indexeddb/object-lookups-in-versionchange-expected.txt:
* storage/indexeddb/object-lookups-in-versionchange.html:
* storage/indexeddb/objectStore-required-arguments-expected.txt:
* storage/indexeddb/objectStore-required-arguments.html:
* storage/indexeddb/objectstore-autoincrement-expected.txt:
* storage/indexeddb/objectstore-autoincrement.html:
* storage/indexeddb/objectstore-basics-expected.txt:
* storage/indexeddb/objectstore-basics-workers-expected.txt:
* storage/indexeddb/objectstore-basics-workers.html:
* storage/indexeddb/objectstore-basics.html:
* storage/indexeddb/objectstore-clear.html:
* storage/indexeddb/objectstore-count-expected.txt:
* storage/indexeddb/objectstore-count.html:
* storage/indexeddb/objectstore-cursor-expected.txt:
* storage/indexeddb/objectstore-cursor.html:
* storage/indexeddb/objectstore-keycursor-expected.txt: Added.
* storage/indexeddb/objectstore-keycursor.html: Added.
* storage/indexeddb/objectstore-removeobjectstore.html:
* storage/indexeddb/odd-strings.html:
* storage/indexeddb/open-bad-versions.html:
* storage/indexeddb/open-cursor-expected.txt:
* storage/indexeddb/open-cursor.html:
* storage/indexeddb/open-during-transaction.html:
* storage/indexeddb/open-ordering.html:
* storage/indexeddb/open-twice-workers.html:
* storage/indexeddb/opencursor-key.html:
* storage/indexeddb/optional-arguments-expected.txt: Added.
* storage/indexeddb/optional-arguments.html: Added.
* storage/indexeddb/pending-activity-workers.html:
* storage/indexeddb/pending-activity.html:
* storage/indexeddb/pending-version-change-on-exit.html:
* storage/indexeddb/pending-version-change-stuck-works-with-terminate.html:
* storage/indexeddb/pending-version-change-stuck.html:
* storage/indexeddb/persistence.html:
* storage/indexeddb/prefetch-bugfix-108071-expected.txt:
* storage/indexeddb/prefetch-bugfix-108071.html:
* storage/indexeddb/prefetch-invalidation-expected.txt: Added.
* storage/indexeddb/prefetch-invalidation.html: Added.
* storage/indexeddb/prefetch-race-expected.txt: Added.
* storage/indexeddb/prefetch-race.html: Added.
* storage/indexeddb/queued-commands.html:
* storage/indexeddb/readonly-properties.html:
* storage/indexeddb/readonly.html:
* storage/indexeddb/removed-expected.txt:
* storage/indexeddb/removed.html:
* storage/indexeddb/request-continue-abort.html:
* storage/indexeddb/request-event-propagation.html:
* storage/indexeddb/request-leak-expected.txt: Added.
* storage/indexeddb/request-leak.html: Added.
* storage/indexeddb/request-result-cache-expected.txt: Added.
* storage/indexeddb/request-result-cache.html: Added.
* storage/indexeddb/resources/aborted-versionchange-closes.js:
* storage/indexeddb/resources/basics.js:
* storage/indexeddb/resources/create-and-remove-object-store.js:
* storage/indexeddb/resources/create-object-store-options.js:
* storage/indexeddb/resources/createIndex-after-failure.js:
* storage/indexeddb/resources/createObjectStore-name-argument-required.js:
* storage/indexeddb/resources/createObjectStore-null-name.js:
* storage/indexeddb/resources/cursor-added-bug.js:
* storage/indexeddb/resources/cursor-advance.js:
* storage/indexeddb/resources/cursor-basics.js: Added.
* storage/indexeddb/resources/cursor-continue-dir.js:
* storage/indexeddb/resources/cursor-continue-validity.js:
* storage/indexeddb/resources/cursor-continue.js:
* storage/indexeddb/resources/cursor-continueprimarykey.js: Added.
* storage/indexeddb/resources/cursor-delete.js:
* storage/indexeddb/resources/cursor-inconsistency.js:
* storage/indexeddb/resources/cursor-index-delete.js:
* storage/indexeddb/resources/cursor-key-order.js:
* storage/indexeddb/resources/cursor-prev-no-duplicate.js:
* storage/indexeddb/resources/cursor-primary-key-order.js:
* storage/indexeddb/resources/cursor-properties.js:
* storage/indexeddb/resources/cursor-reverse-bug.js:
* storage/indexeddb/resources/cursor-skip-deleted.js:
* storage/indexeddb/resources/cursor-update-value-argument-required.js:
* storage/indexeddb/resources/cursor-update.js:
* storage/indexeddb/resources/cursor-value.js:
* storage/indexeddb/resources/data-corruption.js:
* storage/indexeddb/resources/database-basics.js:
* storage/indexeddb/resources/database-close.js:
* storage/indexeddb/resources/database-closepending-flag.js:
* storage/indexeddb/resources/database-deletepending-flag.js:
* storage/indexeddb/resources/database-name-undefined.js:
* storage/indexeddb/resources/database-odd-names.js:
* storage/indexeddb/resources/database-quota.js:
* storage/indexeddb/resources/database-wrapper.js:
* storage/indexeddb/resources/delete-closed-database-object.js:
* storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js:
* storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js:
* storage/indexeddb/resources/delete-range.js:
* storage/indexeddb/resources/deleteIndex.js:
* storage/indexeddb/resources/deleteObjectStore-name-argument-required.js:
* storage/indexeddb/resources/deleteObjectStore-null-name.js:
* storage/indexeddb/resources/deleted-objects.js:
* storage/indexeddb/resources/deletedatabase-blocked.js:
* storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js:
* storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js:
* storage/indexeddb/resources/deletedatabase-not-blocked.js:
* storage/indexeddb/resources/dont-commit-on-blocked-worker.js:
* storage/indexeddb/resources/dont-wedge.js:
* storage/indexeddb/resources/duplicates.js:
* storage/indexeddb/resources/error-causes-abort-by-default.js:
* storage/indexeddb/resources/events.js:
* storage/indexeddb/resources/exception-in-event-aborts.js:
* storage/indexeddb/resources/exceptions.js:
* storage/indexeddb/resources/factory-basics.js:
* storage/indexeddb/resources/factory-cmp.js:
* storage/indexeddb/resources/factory-deletedatabase.js:
* storage/indexeddb/resources/get-keyrange.js:
* storage/indexeddb/resources/index-basics.js:
* storage/indexeddb/resources/index-count.js:
* storage/indexeddb/resources/index-cursor.js:
* storage/indexeddb/resources/index-duplicate-keypaths.js:
* storage/indexeddb/resources/index-get-key-argument-required.js:
* storage/indexeddb/resources/index-multientry.js:
* storage/indexeddb/resources/index-population.js:
* storage/indexeddb/resources/index-unique.js:
* storage/indexeddb/resources/interfaces.js:
* storage/indexeddb/resources/intversion-abort-in-initial-upgradeneeded.js:
* storage/indexeddb/resources/intversion-bad-parameters.js:
* storage/indexeddb/resources/intversion-blocked.js:
* storage/indexeddb/resources/intversion-close-between-events.js:
* storage/indexeddb/resources/intversion-close-in-oncomplete.js:
* storage/indexeddb/resources/intversion-close-in-upgradeneeded.js:
* storage/indexeddb/resources/intversion-encoding.js:
* storage/indexeddb/resources/intversion-gated-on-delete.js:
* storage/indexeddb/resources/intversion-long-queue.js:
* storage/indexeddb/resources/intversion-omit-parameter.js:
* storage/indexeddb/resources/intversion-open-in-upgradeneeded.js:
* storage/indexeddb/resources/intversion-open-with-version.js:
* storage/indexeddb/resources/intversion-pending-version-changes-ascending.js: Added.
* storage/indexeddb/resources/intversion-pending-version-changes-descending.js: Added.
* storage/indexeddb/resources/intversion-pending-version-changes-same.js: Added.
* storage/indexeddb/resources/intversion-persistence.js:
* storage/indexeddb/resources/intversion-revert-on-abort.js:
* storage/indexeddb/resources/intversion-two-opens-no-versions.js:
* storage/indexeddb/resources/intversion-upgrades.js:
* storage/indexeddb/resources/invalid-keys.js:
* storage/indexeddb/resources/key-generator.js:
* storage/indexeddb/resources/key-sort-order-across-types.js:
* storage/indexeddb/resources/key-sort-order-date.js:
* storage/indexeddb/resources/key-type-array.js:
* storage/indexeddb/resources/key-type-binary.js: Added.
* storage/indexeddb/resources/key-type-infinity.js:
* storage/indexeddb/resources/keypath-arrays.js:
* storage/indexeddb/resources/keypath-basics.js:
* storage/indexeddb/resources/keypath-edges.js:
* storage/indexeddb/resources/keypath-fetch-key.js:
* storage/indexeddb/resources/keypath-intrinsic-properties.js:
* storage/indexeddb/resources/keyrange-required-arguments.js:
* storage/indexeddb/resources/keyrange.js:
* storage/indexeddb/resources/lazy-index-types.js:
* storage/indexeddb/resources/legacy-constants.js:
* storage/indexeddb/resources/list-ordering.js:
* storage/indexeddb/resources/metadata.js:
* storage/indexeddb/resources/mutating-cursor.js:
* storage/indexeddb/resources/objectStore-required-arguments.js:
* storage/indexeddb/resources/objectstore-autoincrement.js:
* storage/indexeddb/resources/objectstore-basics.js:
* storage/indexeddb/resources/objectstore-clear.js:
* storage/indexeddb/resources/objectstore-count.js:
* storage/indexeddb/resources/objectstore-cursor.js:
* storage/indexeddb/resources/objectstore-keycursor.js:
* storage/indexeddb/resources/objectstore-removeobjectstore.js:
* storage/indexeddb/resources/odd-strings.js:
* storage/indexeddb/resources/open-cursor.js:
* storage/indexeddb/resources/open-during-transaction.js:
* storage/indexeddb/resources/open-ordering.js:
* storage/indexeddb/resources/open-twice.js:
* storage/indexeddb/resources/opencursor-key.js:
* storage/indexeddb/resources/pending-activity.js:
* storage/indexeddb/resources/pending-version-change-on-exit.js:
* storage/indexeddb/resources/pending-version-change-stuck.js:
* storage/indexeddb/resources/persistence.js:
* storage/indexeddb/resources/prefetch-bugfix-108071.js:
* storage/indexeddb/resources/queued-commands.js:
* storage/indexeddb/resources/readonly-properties.js:
* storage/indexeddb/resources/readonly.js:
* storage/indexeddb/resources/removed.js:
* storage/indexeddb/resources/request-continue-abort.js:
* storage/indexeddb/resources/request-event-propagation.js:
* storage/indexeddb/resources/set_version_blocked.js:
* storage/indexeddb/resources/setversion-blocked-by-versionchange-close.js:
* storage/indexeddb/resources/setversion-not-blocked.js:
* storage/indexeddb/resources/shared.js:
* storage/indexeddb/resources/transaction-abort.js:
* storage/indexeddb/resources/transaction-active-flag.js:
* storage/indexeddb/resources/transaction-after-close.js:
* storage/indexeddb/resources/transaction-and-objectstore-calls.js:
* storage/indexeddb/resources/transaction-basics.js:
* storage/indexeddb/resources/transaction-complete-workers.js:
* storage/indexeddb/resources/transaction-coordination-across-databases.js:
* storage/indexeddb/resources/transaction-coordination-within-database.js:
* storage/indexeddb/resources/transaction-crash-on-abort.js:
* storage/indexeddb/resources/transaction-error.js:
* storage/indexeddb/resources/transaction-event-propagation.js:
* storage/indexeddb/resources/transaction-read-only.js:
* storage/indexeddb/resources/transaction-readwrite-exclusive.js:
* storage/indexeddb/resources/transaction-rollback.js:
* storage/indexeddb/resources/transaction-scope-sequencing.js:
* storage/indexeddb/resources/transaction-starvation.js:
* storage/indexeddb/resources/transaction-storeNames-required.js:
* storage/indexeddb/resources/unblocked-version-changes.js:
* storage/indexeddb/resources/unprefix.js:
* storage/indexeddb/resources/value-undefined.js:
* storage/indexeddb/resources/values-odd-types.js:
* storage/indexeddb/resources/version-change-abort.js:
* storage/indexeddb/resources/version-change-exclusive.js:
* storage/indexeddb/resources/versionchangerequest-activedomobject.js:
* storage/indexeddb/set_version_blocked.html:
* storage/indexeddb/setversion-blocked-by-versionchange-close-expected.txt:
* storage/indexeddb/setversion-blocked-by-versionchange-close.html:
* storage/indexeddb/setversion-not-blocked.html:
* storage/indexeddb/structured-clone-expected.txt:
* storage/indexeddb/structured-clone.html:
* storage/indexeddb/transaction-abort-expected.txt:
* storage/indexeddb/transaction-abort.html:
* storage/indexeddb/transaction-active-flag-expected.txt:
* storage/indexeddb/transaction-active-flag.html:
* storage/indexeddb/transaction-after-close-expected.txt:
* storage/indexeddb/transaction-after-close.html:
* storage/indexeddb/transaction-and-objectstore-calls-expected.txt:
* storage/indexeddb/transaction-and-objectstore-calls.html:
* storage/indexeddb/transaction-basics-expected.txt:
* storage/indexeddb/transaction-basics.html:
* storage/indexeddb/transaction-complete-with-js-recursion-cross-frame.html:
* storage/indexeddb/transaction-complete-with-js-recursion.html:
* storage/indexeddb/transaction-complete-workers-expected.txt:
* storage/indexeddb/transaction-complete-workers.html:
* storage/indexeddb/transaction-coordination-across-databases.html:
* storage/indexeddb/transaction-coordination-within-database.html:
* storage/indexeddb/transaction-crash-in-tasks.html:
* storage/indexeddb/transaction-crash-on-abort.html:
* storage/indexeddb/transaction-error-expected.txt:
* storage/indexeddb/transaction-error.html:
* storage/indexeddb/transaction-event-propagation.html:
* storage/indexeddb/transaction-ordering-expected.txt: Added.
* storage/indexeddb/transaction-ordering.html: Added.
* storage/indexeddb/transaction-read-only-expected.txt:
* storage/indexeddb/transaction-read-only.html:
* storage/indexeddb/transaction-readwrite-exclusive.html:
* storage/indexeddb/transaction-rollback.html:
* storage/indexeddb/transaction-scope-sequencing.html:
* storage/indexeddb/transaction-starvation.html:
* storage/indexeddb/transaction-storeNames-required-expected.txt:
* storage/indexeddb/transaction-storeNames-required.html:
* storage/indexeddb/unblocked-version-changes-expected.txt:
* storage/indexeddb/unblocked-version-changes.html:
* storage/indexeddb/unprefix-workers.html:
* storage/indexeddb/unprefix.html:
* storage/indexeddb/value-undefined.html:
* storage/indexeddb/values-odd-types.html:
* storage/indexeddb/version-change-abort-expected.txt:
* storage/indexeddb/version-change-abort.html:
* storage/indexeddb/version-change-exclusive-expected.txt:
* storage/indexeddb/version-change-exclusive.html:
* storage/indexeddb/versionchangerequest-activedomobject.html:

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

450 files changed:
LayoutTests/ChangeLog
LayoutTests/resources/js-test.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/aborted-versionchange-closes-expected.txt
LayoutTests/storage/indexeddb/aborted-versionchange-closes.html
LayoutTests/storage/indexeddb/basics-expected.txt
LayoutTests/storage/indexeddb/basics-shared-workers-expected.txt
LayoutTests/storage/indexeddb/basics-shared-workers.html
LayoutTests/storage/indexeddb/basics-workers-expected.txt
LayoutTests/storage/indexeddb/basics-workers.html
LayoutTests/storage/indexeddb/basics.html
LayoutTests/storage/indexeddb/clone-exception-expected.txt
LayoutTests/storage/indexeddb/clone-exception.html
LayoutTests/storage/indexeddb/closed-cursor-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/closed-cursor.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/connection-leak-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/connection-leak.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/create-and-remove-object-store-expected.txt
LayoutTests/storage/indexeddb/create-and-remove-object-store.html
LayoutTests/storage/indexeddb/create-object-store-options-expected.txt
LayoutTests/storage/indexeddb/create-object-store-options.html
LayoutTests/storage/indexeddb/createIndex-after-failure-expected.txt
LayoutTests/storage/indexeddb/createIndex-after-failure.html
LayoutTests/storage/indexeddb/createObjectStore-name-argument-required-expected.txt
LayoutTests/storage/indexeddb/createObjectStore-name-argument-required.html
LayoutTests/storage/indexeddb/createObjectStore-null-name.html
LayoutTests/storage/indexeddb/cursor-added-bug.html
LayoutTests/storage/indexeddb/cursor-advance-expected.txt
LayoutTests/storage/indexeddb/cursor-advance-workers-expected.txt
LayoutTests/storage/indexeddb/cursor-advance-workers.html
LayoutTests/storage/indexeddb/cursor-advance.html
LayoutTests/storage/indexeddb/cursor-basics-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-basics.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-cast-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-cast.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-continue-dir-expected.txt
LayoutTests/storage/indexeddb/cursor-continue-dir.html
LayoutTests/storage/indexeddb/cursor-continue-expected.txt
LayoutTests/storage/indexeddb/cursor-continue-validity-expected.txt
LayoutTests/storage/indexeddb/cursor-continue-validity.html
LayoutTests/storage/indexeddb/cursor-continue.html
LayoutTests/storage/indexeddb/cursor-continueprimarykey-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-continueprimarykey.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-delete.html
LayoutTests/storage/indexeddb/cursor-finished-expected.txt
LayoutTests/storage/indexeddb/cursor-finished.html
LayoutTests/storage/indexeddb/cursor-inconsistency.html
LayoutTests/storage/indexeddb/cursor-index-delete.html
LayoutTests/storage/indexeddb/cursor-key-order.html
LayoutTests/storage/indexeddb/cursor-leak-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-leak.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-overloads-expected.txt
LayoutTests/storage/indexeddb/cursor-overloads.html
LayoutTests/storage/indexeddb/cursor-prev-no-duplicate.html
LayoutTests/storage/indexeddb/cursor-primary-key-order.html
LayoutTests/storage/indexeddb/cursor-properties.html
LayoutTests/storage/indexeddb/cursor-request-cycle-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-request-cycle.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/cursor-reverse-bug.html
LayoutTests/storage/indexeddb/cursor-skip-deleted.html
LayoutTests/storage/indexeddb/cursor-update-expected.txt
LayoutTests/storage/indexeddb/cursor-update-value-argument-required-expected.txt
LayoutTests/storage/indexeddb/cursor-update-value-argument-required.html
LayoutTests/storage/indexeddb/cursor-update.html
LayoutTests/storage/indexeddb/cursor-value.html
LayoutTests/storage/indexeddb/data-corruption-expected.txt
LayoutTests/storage/indexeddb/data-corruption.html
LayoutTests/storage/indexeddb/database-basics-expected.txt
LayoutTests/storage/indexeddb/database-basics.html
LayoutTests/storage/indexeddb/database-close-expected.txt
LayoutTests/storage/indexeddb/database-close.html
LayoutTests/storage/indexeddb/database-closepending-flag-expected.txt
LayoutTests/storage/indexeddb/database-closepending-flag.html
LayoutTests/storage/indexeddb/database-deletepending-flag.html
LayoutTests/storage/indexeddb/database-name-undefined-expected.txt
LayoutTests/storage/indexeddb/database-name-undefined.html
LayoutTests/storage/indexeddb/database-odd-names.html
LayoutTests/storage/indexeddb/database-wrapper-expected.txt
LayoutTests/storage/indexeddb/database-wrapper.html
LayoutTests/storage/indexeddb/delete-closed-database-object-expected.txt
LayoutTests/storage/indexeddb/delete-closed-database-object.html
LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html
LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt
LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html
LayoutTests/storage/indexeddb/delete-range.html
LayoutTests/storage/indexeddb/deleteIndex-bug110792-expected.txt
LayoutTests/storage/indexeddb/deleteIndex-bug110792.html
LayoutTests/storage/indexeddb/deleteIndex-expected.txt
LayoutTests/storage/indexeddb/deleteIndex.html
LayoutTests/storage/indexeddb/deleteObjectStore-name-argument-required-expected.txt
LayoutTests/storage/indexeddb/deleteObjectStore-name-argument-required.html
LayoutTests/storage/indexeddb/deleteObjectStore-null-name.html
LayoutTests/storage/indexeddb/deleted-objects-expected.txt
LayoutTests/storage/indexeddb/deleted-objects.html
LayoutTests/storage/indexeddb/deletedatabase-blocked.html
LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers.html
LayoutTests/storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange.html
LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt
LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange.html
LayoutTests/storage/indexeddb/deletedatabase-not-blocked.html
LayoutTests/storage/indexeddb/deletedatabase-transaction.html
LayoutTests/storage/indexeddb/dont-commit-on-blocked.html
LayoutTests/storage/indexeddb/dont-wedge.html
LayoutTests/storage/indexeddb/duplicates.html
LayoutTests/storage/indexeddb/error-causes-abort-by-default.html
LayoutTests/storage/indexeddb/events-expected.txt
LayoutTests/storage/indexeddb/events.html
LayoutTests/storage/indexeddb/exception-in-event-aborts-expected.txt
LayoutTests/storage/indexeddb/exception-in-event-aborts.html
LayoutTests/storage/indexeddb/exceptions-expected.txt
LayoutTests/storage/indexeddb/exceptions.html
LayoutTests/storage/indexeddb/factory-basics-expected.txt
LayoutTests/storage/indexeddb/factory-basics-workers-expected.txt
LayoutTests/storage/indexeddb/factory-basics-workers.html
LayoutTests/storage/indexeddb/factory-basics.html
LayoutTests/storage/indexeddb/factory-cmp-expected.txt
LayoutTests/storage/indexeddb/factory-cmp.html
LayoutTests/storage/indexeddb/factory-deletedatabase.html
LayoutTests/storage/indexeddb/get-keyrange-expected.txt
LayoutTests/storage/indexeddb/get-keyrange.html
LayoutTests/storage/indexeddb/index-basics-expected.txt
LayoutTests/storage/indexeddb/index-basics-workers-expected.txt
LayoutTests/storage/indexeddb/index-basics-workers.html
LayoutTests/storage/indexeddb/index-basics.html
LayoutTests/storage/indexeddb/index-count-expected.txt
LayoutTests/storage/indexeddb/index-count.html
LayoutTests/storage/indexeddb/index-cursor.html
LayoutTests/storage/indexeddb/index-duplicate-keypaths.html
LayoutTests/storage/indexeddb/index-get-key-argument-required-expected.txt
LayoutTests/storage/indexeddb/index-get-key-argument-required.html
LayoutTests/storage/indexeddb/index-multientry.html
LayoutTests/storage/indexeddb/index-population.html
LayoutTests/storage/indexeddb/index-unique.html
LayoutTests/storage/indexeddb/interfaces.html
LayoutTests/storage/indexeddb/intversion-abort-in-initial-upgradeneeded.html
LayoutTests/storage/indexeddb/intversion-bad-parameters-expected.txt
LayoutTests/storage/indexeddb/intversion-bad-parameters.html
LayoutTests/storage/indexeddb/intversion-blocked.html
LayoutTests/storage/indexeddb/intversion-close-between-events.html
LayoutTests/storage/indexeddb/intversion-close-in-oncomplete-expected.txt
LayoutTests/storage/indexeddb/intversion-close-in-oncomplete.html
LayoutTests/storage/indexeddb/intversion-close-in-upgradeneeded-expected.txt
LayoutTests/storage/indexeddb/intversion-close-in-upgradeneeded.html
LayoutTests/storage/indexeddb/intversion-encoding.html
LayoutTests/storage/indexeddb/intversion-gated-on-delete.html
LayoutTests/storage/indexeddb/intversion-long-queue-expected.txt
LayoutTests/storage/indexeddb/intversion-long-queue.html
LayoutTests/storage/indexeddb/intversion-omit-parameter.html
LayoutTests/storage/indexeddb/intversion-open-in-upgradeneeded.html
LayoutTests/storage/indexeddb/intversion-open-with-version.html
LayoutTests/storage/indexeddb/intversion-pending-version-changes-ascending-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-pending-version-changes-ascending.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-pending-version-changes-descending-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-pending-version-changes-descending.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-pending-version-changes-same-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-pending-version-changes-same.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/intversion-persistence.html
LayoutTests/storage/indexeddb/intversion-revert-on-abort.html
LayoutTests/storage/indexeddb/intversion-two-opens-no-versions.html
LayoutTests/storage/indexeddb/intversion-upgrades-expected.txt
LayoutTests/storage/indexeddb/intversion-upgrades.html
LayoutTests/storage/indexeddb/invalid-keys-expected.txt
LayoutTests/storage/indexeddb/invalid-keys.html
LayoutTests/storage/indexeddb/key-generator.html
LayoutTests/storage/indexeddb/key-sort-order-across-types.html
LayoutTests/storage/indexeddb/key-sort-order-date.html
LayoutTests/storage/indexeddb/key-type-array-expected.txt
LayoutTests/storage/indexeddb/key-type-array.html
LayoutTests/storage/indexeddb/key-type-binary-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/key-type-binary.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/key-type-infinity.html
LayoutTests/storage/indexeddb/keypath-arrays-expected.txt
LayoutTests/storage/indexeddb/keypath-arrays.html
LayoutTests/storage/indexeddb/keypath-basics-expected.txt
LayoutTests/storage/indexeddb/keypath-basics.html
LayoutTests/storage/indexeddb/keypath-edges-expected.txt
LayoutTests/storage/indexeddb/keypath-edges.html
LayoutTests/storage/indexeddb/keypath-fetch-key.html
LayoutTests/storage/indexeddb/keypath-intrinsic-properties.html
LayoutTests/storage/indexeddb/keyrange-expected.txt
LayoutTests/storage/indexeddb/keyrange-required-arguments-expected.txt
LayoutTests/storage/indexeddb/keyrange-required-arguments.html
LayoutTests/storage/indexeddb/keyrange.html
LayoutTests/storage/indexeddb/lazy-index-population-expected.txt
LayoutTests/storage/indexeddb/lazy-index-population.html
LayoutTests/storage/indexeddb/lazy-index-types.html
LayoutTests/storage/indexeddb/legacy-constants.html
LayoutTests/storage/indexeddb/list-ordering.html
LayoutTests/storage/indexeddb/metadata-race-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/metadata-race.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/metadata.html
LayoutTests/storage/indexeddb/mutating-cursor.html
LayoutTests/storage/indexeddb/noblobs-expected.txt
LayoutTests/storage/indexeddb/noblobs.html
LayoutTests/storage/indexeddb/object-lookups-in-versionchange-expected.txt
LayoutTests/storage/indexeddb/object-lookups-in-versionchange.html
LayoutTests/storage/indexeddb/objectStore-required-arguments-expected.txt
LayoutTests/storage/indexeddb/objectStore-required-arguments.html
LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
LayoutTests/storage/indexeddb/objectstore-autoincrement.html
LayoutTests/storage/indexeddb/objectstore-basics-expected.txt
LayoutTests/storage/indexeddb/objectstore-basics-workers-expected.txt
LayoutTests/storage/indexeddb/objectstore-basics-workers.html
LayoutTests/storage/indexeddb/objectstore-basics.html
LayoutTests/storage/indexeddb/objectstore-clear.html
LayoutTests/storage/indexeddb/objectstore-count-expected.txt
LayoutTests/storage/indexeddb/objectstore-count.html
LayoutTests/storage/indexeddb/objectstore-cursor-expected.txt
LayoutTests/storage/indexeddb/objectstore-cursor.html
LayoutTests/storage/indexeddb/objectstore-keycursor-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/objectstore-keycursor.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/objectstore-removeobjectstore.html
LayoutTests/storage/indexeddb/odd-strings.html
LayoutTests/storage/indexeddb/open-bad-versions.html
LayoutTests/storage/indexeddb/open-cursor-expected.txt
LayoutTests/storage/indexeddb/open-cursor.html
LayoutTests/storage/indexeddb/open-during-transaction.html
LayoutTests/storage/indexeddb/open-ordering.html
LayoutTests/storage/indexeddb/open-twice-workers.html
LayoutTests/storage/indexeddb/opencursor-key.html
LayoutTests/storage/indexeddb/optional-arguments-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/optional-arguments.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/pending-activity-workers.html
LayoutTests/storage/indexeddb/pending-activity.html
LayoutTests/storage/indexeddb/pending-version-change-on-exit.html
LayoutTests/storage/indexeddb/pending-version-change-stuck-works-with-terminate.html
LayoutTests/storage/indexeddb/pending-version-change-stuck.html
LayoutTests/storage/indexeddb/persistence.html
LayoutTests/storage/indexeddb/prefetch-bugfix-108071-expected.txt
LayoutTests/storage/indexeddb/prefetch-bugfix-108071.html
LayoutTests/storage/indexeddb/prefetch-invalidation-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/prefetch-invalidation.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/prefetch-race-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/prefetch-race.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/queued-commands.html
LayoutTests/storage/indexeddb/readonly-properties.html
LayoutTests/storage/indexeddb/readonly.html
LayoutTests/storage/indexeddb/removed-expected.txt
LayoutTests/storage/indexeddb/removed.html
LayoutTests/storage/indexeddb/request-continue-abort.html
LayoutTests/storage/indexeddb/request-event-propagation.html
LayoutTests/storage/indexeddb/request-leak-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/request-leak.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/request-result-cache-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/request-result-cache.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/aborted-versionchange-closes.js
LayoutTests/storage/indexeddb/resources/basics.js
LayoutTests/storage/indexeddb/resources/create-and-remove-object-store.js
LayoutTests/storage/indexeddb/resources/create-object-store-options.js
LayoutTests/storage/indexeddb/resources/createIndex-after-failure.js
LayoutTests/storage/indexeddb/resources/createObjectStore-name-argument-required.js
LayoutTests/storage/indexeddb/resources/createObjectStore-null-name.js
LayoutTests/storage/indexeddb/resources/cursor-added-bug.js
LayoutTests/storage/indexeddb/resources/cursor-advance.js
LayoutTests/storage/indexeddb/resources/cursor-basics.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/cursor-continue-dir.js
LayoutTests/storage/indexeddb/resources/cursor-continue-validity.js
LayoutTests/storage/indexeddb/resources/cursor-continue.js
LayoutTests/storage/indexeddb/resources/cursor-continueprimarykey.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/cursor-delete.js
LayoutTests/storage/indexeddb/resources/cursor-inconsistency.js
LayoutTests/storage/indexeddb/resources/cursor-index-delete.js
LayoutTests/storage/indexeddb/resources/cursor-key-order.js
LayoutTests/storage/indexeddb/resources/cursor-prev-no-duplicate.js
LayoutTests/storage/indexeddb/resources/cursor-primary-key-order.js
LayoutTests/storage/indexeddb/resources/cursor-properties.js
LayoutTests/storage/indexeddb/resources/cursor-reverse-bug.js
LayoutTests/storage/indexeddb/resources/cursor-skip-deleted.js
LayoutTests/storage/indexeddb/resources/cursor-update-value-argument-required.js
LayoutTests/storage/indexeddb/resources/cursor-update.js
LayoutTests/storage/indexeddb/resources/cursor-value.js
LayoutTests/storage/indexeddb/resources/data-corruption.js
LayoutTests/storage/indexeddb/resources/database-basics.js
LayoutTests/storage/indexeddb/resources/database-close.js
LayoutTests/storage/indexeddb/resources/database-closepending-flag.js
LayoutTests/storage/indexeddb/resources/database-deletepending-flag.js
LayoutTests/storage/indexeddb/resources/database-name-undefined.js
LayoutTests/storage/indexeddb/resources/database-odd-names.js
LayoutTests/storage/indexeddb/resources/database-quota.js
LayoutTests/storage/indexeddb/resources/database-wrapper.js
LayoutTests/storage/indexeddb/resources/delete-closed-database-object.js
LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js
LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js
LayoutTests/storage/indexeddb/resources/delete-range.js
LayoutTests/storage/indexeddb/resources/deleteIndex.js
LayoutTests/storage/indexeddb/resources/deleteObjectStore-name-argument-required.js
LayoutTests/storage/indexeddb/resources/deleteObjectStore-null-name.js
LayoutTests/storage/indexeddb/resources/deleted-objects.js
LayoutTests/storage/indexeddb/resources/deletedatabase-blocked.js
LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js
LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js
LayoutTests/storage/indexeddb/resources/deletedatabase-not-blocked.js
LayoutTests/storage/indexeddb/resources/dont-commit-on-blocked-worker.js
LayoutTests/storage/indexeddb/resources/dont-wedge.js
LayoutTests/storage/indexeddb/resources/duplicates.js
LayoutTests/storage/indexeddb/resources/error-causes-abort-by-default.js
LayoutTests/storage/indexeddb/resources/events.js
LayoutTests/storage/indexeddb/resources/exception-in-event-aborts.js
LayoutTests/storage/indexeddb/resources/exceptions.js
LayoutTests/storage/indexeddb/resources/factory-basics.js
LayoutTests/storage/indexeddb/resources/factory-cmp.js
LayoutTests/storage/indexeddb/resources/factory-deletedatabase.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-cursor.js
LayoutTests/storage/indexeddb/resources/index-duplicate-keypaths.js
LayoutTests/storage/indexeddb/resources/index-get-key-argument-required.js
LayoutTests/storage/indexeddb/resources/index-multientry.js
LayoutTests/storage/indexeddb/resources/index-population.js
LayoutTests/storage/indexeddb/resources/index-unique.js
LayoutTests/storage/indexeddb/resources/interfaces.js
LayoutTests/storage/indexeddb/resources/intversion-abort-in-initial-upgradeneeded.js
LayoutTests/storage/indexeddb/resources/intversion-bad-parameters.js
LayoutTests/storage/indexeddb/resources/intversion-blocked.js
LayoutTests/storage/indexeddb/resources/intversion-close-between-events.js
LayoutTests/storage/indexeddb/resources/intversion-close-in-oncomplete.js
LayoutTests/storage/indexeddb/resources/intversion-close-in-upgradeneeded.js
LayoutTests/storage/indexeddb/resources/intversion-encoding.js
LayoutTests/storage/indexeddb/resources/intversion-gated-on-delete.js
LayoutTests/storage/indexeddb/resources/intversion-long-queue.js
LayoutTests/storage/indexeddb/resources/intversion-omit-parameter.js
LayoutTests/storage/indexeddb/resources/intversion-open-in-upgradeneeded.js
LayoutTests/storage/indexeddb/resources/intversion-open-with-version.js
LayoutTests/storage/indexeddb/resources/intversion-pending-version-changes-ascending.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/intversion-pending-version-changes-descending.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/intversion-pending-version-changes-same.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/intversion-persistence.js
LayoutTests/storage/indexeddb/resources/intversion-revert-on-abort.js
LayoutTests/storage/indexeddb/resources/intversion-two-opens-no-versions.js
LayoutTests/storage/indexeddb/resources/intversion-upgrades.js
LayoutTests/storage/indexeddb/resources/invalid-keys.js
LayoutTests/storage/indexeddb/resources/key-generator.js
LayoutTests/storage/indexeddb/resources/key-sort-order-across-types.js
LayoutTests/storage/indexeddb/resources/key-sort-order-date.js
LayoutTests/storage/indexeddb/resources/key-type-array.js
LayoutTests/storage/indexeddb/resources/key-type-binary.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/key-type-infinity.js
LayoutTests/storage/indexeddb/resources/keypath-arrays.js
LayoutTests/storage/indexeddb/resources/keypath-basics.js
LayoutTests/storage/indexeddb/resources/keypath-edges.js
LayoutTests/storage/indexeddb/resources/keypath-fetch-key.js
LayoutTests/storage/indexeddb/resources/keypath-intrinsic-properties.js
LayoutTests/storage/indexeddb/resources/keyrange-required-arguments.js
LayoutTests/storage/indexeddb/resources/keyrange.js
LayoutTests/storage/indexeddb/resources/lazy-index-types.js
LayoutTests/storage/indexeddb/resources/legacy-constants.js
LayoutTests/storage/indexeddb/resources/list-ordering.js
LayoutTests/storage/indexeddb/resources/metadata.js
LayoutTests/storage/indexeddb/resources/mutating-cursor.js
LayoutTests/storage/indexeddb/resources/objectStore-required-arguments.js
LayoutTests/storage/indexeddb/resources/objectstore-autoincrement.js
LayoutTests/storage/indexeddb/resources/objectstore-basics.js
LayoutTests/storage/indexeddb/resources/objectstore-clear.js
LayoutTests/storage/indexeddb/resources/objectstore-count.js
LayoutTests/storage/indexeddb/resources/objectstore-cursor.js
LayoutTests/storage/indexeddb/resources/objectstore-keycursor.js [new file with mode: 0644]
LayoutTests/storage/indexeddb/resources/objectstore-removeobjectstore.js
LayoutTests/storage/indexeddb/resources/odd-strings.js
LayoutTests/storage/indexeddb/resources/open-cursor.js
LayoutTests/storage/indexeddb/resources/open-during-transaction.js
LayoutTests/storage/indexeddb/resources/open-ordering.js
LayoutTests/storage/indexeddb/resources/open-twice.js
LayoutTests/storage/indexeddb/resources/opencursor-key.js
LayoutTests/storage/indexeddb/resources/pending-activity.js
LayoutTests/storage/indexeddb/resources/pending-version-change-on-exit.js
LayoutTests/storage/indexeddb/resources/pending-version-change-stuck.js
LayoutTests/storage/indexeddb/resources/persistence.js
LayoutTests/storage/indexeddb/resources/prefetch-bugfix-108071.js
LayoutTests/storage/indexeddb/resources/queued-commands.js
LayoutTests/storage/indexeddb/resources/readonly-properties.js
LayoutTests/storage/indexeddb/resources/readonly.js
LayoutTests/storage/indexeddb/resources/removed.js
LayoutTests/storage/indexeddb/resources/request-continue-abort.js
LayoutTests/storage/indexeddb/resources/request-event-propagation.js
LayoutTests/storage/indexeddb/resources/set_version_blocked.js
LayoutTests/storage/indexeddb/resources/setversion-blocked-by-versionchange-close.js
LayoutTests/storage/indexeddb/resources/setversion-not-blocked.js
LayoutTests/storage/indexeddb/resources/shared.js
LayoutTests/storage/indexeddb/resources/transaction-abort.js
LayoutTests/storage/indexeddb/resources/transaction-active-flag.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-complete-workers.js
LayoutTests/storage/indexeddb/resources/transaction-coordination-across-databases.js
LayoutTests/storage/indexeddb/resources/transaction-coordination-within-database.js
LayoutTests/storage/indexeddb/resources/transaction-crash-on-abort.js
LayoutTests/storage/indexeddb/resources/transaction-error.js
LayoutTests/storage/indexeddb/resources/transaction-event-propagation.js
LayoutTests/storage/indexeddb/resources/transaction-read-only.js
LayoutTests/storage/indexeddb/resources/transaction-readwrite-exclusive.js
LayoutTests/storage/indexeddb/resources/transaction-rollback.js
LayoutTests/storage/indexeddb/resources/transaction-scope-sequencing.js
LayoutTests/storage/indexeddb/resources/transaction-starvation.js
LayoutTests/storage/indexeddb/resources/transaction-storeNames-required.js
LayoutTests/storage/indexeddb/resources/unblocked-version-changes.js
LayoutTests/storage/indexeddb/resources/unprefix.js
LayoutTests/storage/indexeddb/resources/value-undefined.js
LayoutTests/storage/indexeddb/resources/values-odd-types.js
LayoutTests/storage/indexeddb/resources/version-change-abort.js
LayoutTests/storage/indexeddb/resources/version-change-exclusive.js
LayoutTests/storage/indexeddb/resources/versionchangerequest-activedomobject.js
LayoutTests/storage/indexeddb/set_version_blocked.html
LayoutTests/storage/indexeddb/setversion-blocked-by-versionchange-close-expected.txt
LayoutTests/storage/indexeddb/setversion-blocked-by-versionchange-close.html
LayoutTests/storage/indexeddb/setversion-not-blocked.html
LayoutTests/storage/indexeddb/structured-clone-expected.txt
LayoutTests/storage/indexeddb/structured-clone.html
LayoutTests/storage/indexeddb/transaction-abort-expected.txt
LayoutTests/storage/indexeddb/transaction-abort.html
LayoutTests/storage/indexeddb/transaction-active-flag-expected.txt
LayoutTests/storage/indexeddb/transaction-active-flag.html
LayoutTests/storage/indexeddb/transaction-after-close-expected.txt
LayoutTests/storage/indexeddb/transaction-after-close.html
LayoutTests/storage/indexeddb/transaction-and-objectstore-calls-expected.txt
LayoutTests/storage/indexeddb/transaction-and-objectstore-calls.html
LayoutTests/storage/indexeddb/transaction-basics-expected.txt
LayoutTests/storage/indexeddb/transaction-basics.html
LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion-cross-frame.html
LayoutTests/storage/indexeddb/transaction-complete-with-js-recursion.html
LayoutTests/storage/indexeddb/transaction-complete-workers-expected.txt
LayoutTests/storage/indexeddb/transaction-complete-workers.html
LayoutTests/storage/indexeddb/transaction-coordination-across-databases.html
LayoutTests/storage/indexeddb/transaction-coordination-within-database.html
LayoutTests/storage/indexeddb/transaction-crash-in-tasks.html
LayoutTests/storage/indexeddb/transaction-crash-on-abort.html
LayoutTests/storage/indexeddb/transaction-error-expected.txt
LayoutTests/storage/indexeddb/transaction-error.html
LayoutTests/storage/indexeddb/transaction-event-propagation.html
LayoutTests/storage/indexeddb/transaction-ordering-expected.txt [new file with mode: 0644]
LayoutTests/storage/indexeddb/transaction-ordering.html [new file with mode: 0644]
LayoutTests/storage/indexeddb/transaction-read-only-expected.txt
LayoutTests/storage/indexeddb/transaction-read-only.html
LayoutTests/storage/indexeddb/transaction-readwrite-exclusive.html
LayoutTests/storage/indexeddb/transaction-rollback.html
LayoutTests/storage/indexeddb/transaction-scope-sequencing.html
LayoutTests/storage/indexeddb/transaction-starvation.html
LayoutTests/storage/indexeddb/transaction-storeNames-required-expected.txt
LayoutTests/storage/indexeddb/transaction-storeNames-required.html
LayoutTests/storage/indexeddb/unblocked-version-changes-expected.txt
LayoutTests/storage/indexeddb/unblocked-version-changes.html
LayoutTests/storage/indexeddb/unprefix-workers.html
LayoutTests/storage/indexeddb/unprefix.html
LayoutTests/storage/indexeddb/value-undefined.html
LayoutTests/storage/indexeddb/values-odd-types.html
LayoutTests/storage/indexeddb/version-change-abort-expected.txt
LayoutTests/storage/indexeddb/version-change-abort.html
LayoutTests/storage/indexeddb/version-change-exclusive-expected.txt
LayoutTests/storage/indexeddb/version-change-exclusive.html
LayoutTests/storage/indexeddb/versionchangerequest-activedomobject.html

index da1635f..7284e29 100644 (file)
@@ -1,3 +1,460 @@
+2014-02-11  Brady Eidson  <beidson@apple.com>
+
+        IDB: Reimport storage/indexeddb tests from Blink
+        https://bugs.webkit.org/show_bug.cgi?id=128636
+
+        Reviewed by Tim Horton.
+
+        * resources/js-test.js: Added.
+        * storage/indexeddb/aborted-versionchange-closes-expected.txt:
+        * storage/indexeddb/aborted-versionchange-closes.html:
+        * storage/indexeddb/basics-expected.txt:
+        * storage/indexeddb/basics-shared-workers-expected.txt:
+        * storage/indexeddb/basics-shared-workers.html:
+        * storage/indexeddb/basics-workers-expected.txt:
+        * storage/indexeddb/basics-workers.html:
+        * storage/indexeddb/basics.html:
+        * storage/indexeddb/clone-exception-expected.txt:
+        * storage/indexeddb/clone-exception.html:
+        * storage/indexeddb/closed-cursor-expected.txt: Added.
+        * storage/indexeddb/closed-cursor.html: Added.
+        * storage/indexeddb/connection-leak-expected.txt: Added.
+        * storage/indexeddb/connection-leak.html: Added.
+        * storage/indexeddb/create-and-remove-object-store-expected.txt:
+        * storage/indexeddb/create-and-remove-object-store.html:
+        * storage/indexeddb/create-object-store-options-expected.txt:
+        * storage/indexeddb/create-object-store-options.html:
+        * storage/indexeddb/createIndex-after-failure-expected.txt:
+        * storage/indexeddb/createIndex-after-failure.html:
+        * storage/indexeddb/createObjectStore-name-argument-required-expected.txt:
+        * storage/indexeddb/createObjectStore-name-argument-required.html:
+        * storage/indexeddb/createObjectStore-null-name.html:
+        * storage/indexeddb/cursor-added-bug.html:
+        * storage/indexeddb/cursor-advance-expected.txt:
+        * storage/indexeddb/cursor-advance-workers-expected.txt:
+        * storage/indexeddb/cursor-advance-workers.html:
+        * storage/indexeddb/cursor-advance.html:
+        * storage/indexeddb/cursor-basics-expected.txt: Added.
+        * storage/indexeddb/cursor-basics.html: Added.
+        * storage/indexeddb/cursor-cast-expected.txt: Added.
+        * storage/indexeddb/cursor-cast.html: Added.
+        * storage/indexeddb/cursor-continue-dir-expected.txt:
+        * storage/indexeddb/cursor-continue-dir.html:
+        * storage/indexeddb/cursor-continue-expected.txt:
+        * storage/indexeddb/cursor-continue-validity-expected.txt:
+        * storage/indexeddb/cursor-continue-validity.html:
+        * storage/indexeddb/cursor-continue.html:
+        * storage/indexeddb/cursor-continueprimarykey-expected.txt: Added.
+        * storage/indexeddb/cursor-continueprimarykey.html: Added.
+        * storage/indexeddb/cursor-delete.html:
+        * storage/indexeddb/cursor-finished-expected.txt:
+        * storage/indexeddb/cursor-finished.html:
+        * storage/indexeddb/cursor-inconsistency.html:
+        * storage/indexeddb/cursor-index-delete.html:
+        * storage/indexeddb/cursor-key-order.html:
+        * storage/indexeddb/cursor-leak-expected.txt: 
+        * storage/indexeddb/cursor-leak.html: Added.
+        * storage/indexeddb/cursor-overloads-expected.txt:
+        * storage/indexeddb/cursor-overloads.html:
+        * storage/indexeddb/cursor-prev-no-duplicate.html:
+        * storage/indexeddb/cursor-primary-key-order.html:
+        * storage/indexeddb/cursor-properties.html:
+        * storage/indexeddb/cursor-request-cycle-expected.txt: Added.
+        * storage/indexeddb/cursor-request-cycle.html: Added.
+        * storage/indexeddb/cursor-reverse-bug.html:
+        * storage/indexeddb/cursor-skip-deleted.html:
+        * storage/indexeddb/cursor-update-expected.txt:
+        * storage/indexeddb/cursor-update-value-argument-required-expected.txt:
+        * storage/indexeddb/cursor-update-value-argument-required.html:
+        * storage/indexeddb/cursor-update.html:
+        * storage/indexeddb/cursor-value.html:
+        * storage/indexeddb/data-corruption-expected.txt:
+        * storage/indexeddb/data-corruption.html:
+        * storage/indexeddb/database-basics-expected.txt:
+        * storage/indexeddb/database-basics.html:
+        * storage/indexeddb/database-close-expected.txt:
+        * storage/indexeddb/database-close.html:
+        * storage/indexeddb/database-closepending-flag-expected.txt:
+        * storage/indexeddb/database-closepending-flag.html:
+        * storage/indexeddb/database-deletepending-flag.html:
+        * storage/indexeddb/database-name-undefined-expected.txt:
+        * storage/indexeddb/database-name-undefined.html:
+        * storage/indexeddb/database-odd-names.html:
+        * storage/indexeddb/database-wrapper-expected.txt:
+        * storage/indexeddb/database-wrapper.html:
+        * storage/indexeddb/delete-closed-database-object-expected.txt:
+        * storage/indexeddb/delete-closed-database-object.html:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-open-success.html:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt:
+        * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html:
+        * storage/indexeddb/delete-range.html:
+        * storage/indexeddb/deleteIndex-bug110792-expected.txt:
+        * storage/indexeddb/deleteIndex-bug110792.html:
+        * storage/indexeddb/deleteIndex-expected.txt:
+        * storage/indexeddb/deleteIndex.html:
+        * storage/indexeddb/deleteObjectStore-name-argument-required-expected.txt:
+        * storage/indexeddb/deleteObjectStore-name-argument-required.html:
+        * storage/indexeddb/deleteObjectStore-null-name.html:
+        * storage/indexeddb/deleted-objects-expected.txt:
+        * storage/indexeddb/deleted-objects.html:
+        * storage/indexeddb/deletedatabase-blocked.html:
+        * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange-workers.html:
+        * storage/indexeddb/deletedatabase-delayed-by-open-and-versionchange.html:
+        * storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt:
+        * storage/indexeddb/deletedatabase-delayed-by-versionchange.html:
+        * storage/indexeddb/deletedatabase-not-blocked.html:
+        * storage/indexeddb/deletedatabase-transaction.html:
+        * storage/indexeddb/dont-commit-on-blocked.html:
+        * storage/indexeddb/dont-wedge.html:
+        * storage/indexeddb/duplicates.html:
+        * storage/indexeddb/error-causes-abort-by-default.html:
+        * storage/indexeddb/events-expected.txt:
+        * storage/indexeddb/events.html:
+        * storage/indexeddb/exception-in-event-aborts-expected.txt:
+        * storage/indexeddb/exception-in-event-aborts.html:
+        * storage/indexeddb/exceptions-expected.txt:
+        * storage/indexeddb/exceptions.html:
+        * storage/indexeddb/factory-basics-expected.txt:
+        * storage/indexeddb/factory-basics-workers-expected.txt:
+        * storage/indexeddb/factory-basics-workers.html:
+        * storage/indexeddb/factory-basics.html:
+        * storage/indexeddb/factory-cmp-expected.txt:
+        * storage/indexeddb/factory-cmp.html:
+        * storage/indexeddb/factory-deletedatabase.html:
+        * storage/indexeddb/get-keyrange-expected.txt:
+        * storage/indexeddb/get-keyrange.html:
+        * storage/indexeddb/index-basics-expected.txt:
+        * storage/indexeddb/index-basics-workers-expected.txt:
+        * storage/indexeddb/index-basics-workers.html:
+        * storage/indexeddb/index-basics.html:
+        * storage/indexeddb/index-count-expected.txt:
+        * storage/indexeddb/index-count.html:
+        * storage/indexeddb/index-cursor.html:
+        * storage/indexeddb/index-duplicate-keypaths.html:
+        * storage/indexeddb/index-get-key-argument-required-expected.txt:
+        * storage/indexeddb/index-get-key-argument-required.html:
+        * storage/indexeddb/index-multientry.html:
+        * storage/indexeddb/index-population.html:
+        * storage/indexeddb/index-unique.html:
+        * storage/indexeddb/interfaces.html:
+        * storage/indexeddb/intversion-abort-in-initial-upgradeneeded.html:
+        * storage/indexeddb/intversion-bad-parameters-expected.txt:
+        * storage/indexeddb/intversion-bad-parameters.html:
+        * storage/indexeddb/intversion-blocked.html:
+        * storage/indexeddb/intversion-close-between-events.html:
+        * storage/indexeddb/intversion-close-in-oncomplete-expected.txt:
+        * storage/indexeddb/intversion-close-in-oncomplete.html:
+        * storage/indexeddb/intversion-close-in-upgradeneeded-expected.txt:
+        * storage/indexeddb/intversion-close-in-upgradeneeded.html:
+        * storage/indexeddb/intversion-encoding.html:
+        * storage/indexeddb/intversion-gated-on-delete.html:
+        * storage/indexeddb/intversion-long-queue-expected.txt:
+        * storage/indexeddb/intversion-long-queue.html:
+        * storage/indexeddb/intversion-omit-parameter.html:
+        * storage/indexeddb/intversion-open-in-upgradeneeded.html:
+        * storage/indexeddb/intversion-open-with-version.html:
+        * storage/indexeddb/intversion-pending-version-changes-ascending-expected.txt: Added.
+        * storage/indexeddb/intversion-pending-version-changes-ascending.html: Added.
+        * storage/indexeddb/intversion-pending-version-changes-descending-expected.txt: Added.
+        * storage/indexeddb/intversion-pending-version-changes-descending.html: Added.
+        * storage/indexeddb/intversion-pending-version-changes-same-expected.txt: Added.
+        * storage/indexeddb/intversion-pending-version-changes-same.html: Added.
+        * storage/indexeddb/intversion-persistence.html:
+        * storage/indexeddb/intversion-revert-on-abort.html:
+        * storage/indexeddb/intversion-two-opens-no-versions.html:
+        * storage/indexeddb/intversion-upgrades-expected.txt:
+        * storage/indexeddb/intversion-upgrades.html:
+        * storage/indexeddb/invalid-keys-expected.txt:
+        * storage/indexeddb/invalid-keys.html:
+        * storage/indexeddb/key-generator.html:
+        * storage/indexeddb/key-sort-order-across-types.html:
+        * storage/indexeddb/key-sort-order-date.html:
+        * storage/indexeddb/key-type-array-expected.txt:
+        * storage/indexeddb/key-type-array.html:
+        * storage/indexeddb/key-type-binary-expected.txt: Added.
+        * storage/indexeddb/key-type-binary.html: Added.
+        * storage/indexeddb/key-type-infinity.html:
+        * storage/indexeddb/keypath-arrays-expected.txt:
+        * storage/indexeddb/keypath-arrays.html:
+        * storage/indexeddb/keypath-basics-expected.txt:
+        * storage/indexeddb/keypath-basics.html:
+        * storage/indexeddb/keypath-edges-expected.txt:
+        * storage/indexeddb/keypath-edges.html:
+        * storage/indexeddb/keypath-fetch-key.html:
+        * storage/indexeddb/keypath-intrinsic-properties.html:
+        * storage/indexeddb/keyrange-expected.txt:
+        * storage/indexeddb/keyrange-required-arguments-expected.txt:
+        * storage/indexeddb/keyrange-required-arguments.html:
+        * storage/indexeddb/keyrange.html:
+        * storage/indexeddb/lazy-index-population-expected.txt:
+        * storage/indexeddb/lazy-index-population.html:
+        * storage/indexeddb/lazy-index-types.html:
+        * storage/indexeddb/legacy-constants.html:
+        * storage/indexeddb/list-ordering.html:
+        * storage/indexeddb/metadata-race-expected.txt: Added.
+        * storage/indexeddb/metadata-race.html: Added.
+        * storage/indexeddb/metadata.html:
+        * storage/indexeddb/mutating-cursor.html:
+        * storage/indexeddb/noblobs-expected.txt:
+        * storage/indexeddb/noblobs.html:
+        * storage/indexeddb/object-lookups-in-versionchange-expected.txt:
+        * storage/indexeddb/object-lookups-in-versionchange.html:
+        * storage/indexeddb/objectStore-required-arguments-expected.txt:
+        * storage/indexeddb/objectStore-required-arguments.html:
+        * storage/indexeddb/objectstore-autoincrement-expected.txt:
+        * storage/indexeddb/objectstore-autoincrement.html:
+        * storage/indexeddb/objectstore-basics-expected.txt:
+        * storage/indexeddb/objectstore-basics-workers-expected.txt:
+        * storage/indexeddb/objectstore-basics-workers.html:
+        * storage/indexeddb/objectstore-basics.html:
+        * storage/indexeddb/objectstore-clear.html:
+        * storage/indexeddb/objectstore-count-expected.txt:
+        * storage/indexeddb/objectstore-count.html:
+        * storage/indexeddb/objectstore-cursor-expected.txt:
+        * storage/indexeddb/objectstore-cursor.html:
+        * storage/indexeddb/objectstore-keycursor-expected.txt: Added.
+        * storage/indexeddb/objectstore-keycursor.html: Added.
+        * storage/indexeddb/objectstore-removeobjectstore.html:
+        * storage/indexeddb/odd-strings.html:
+        * storage/indexeddb/open-bad-versions.html:
+        * storage/indexeddb/open-cursor-expected.txt:
+        * storage/indexeddb/open-cursor.html:
+        * storage/indexeddb/open-during-transaction.html:
+        * storage/indexeddb/open-ordering.html:
+        * storage/indexeddb/open-twice-workers.html:
+        * storage/indexeddb/opencursor-key.html:
+        * storage/indexeddb/optional-arguments-expected.txt: Added.
+        * storage/indexeddb/optional-arguments.html: Added.
+        * storage/indexeddb/pending-activity-workers.html:
+        * storage/indexeddb/pending-activity.html:
+        * storage/indexeddb/pending-version-change-on-exit.html:
+        * storage/indexeddb/pending-version-change-stuck-works-with-terminate.html:
+        * storage/indexeddb/pending-version-change-stuck.html:
+        * storage/indexeddb/persistence.html:
+        * storage/indexeddb/prefetch-bugfix-108071-expected.txt:
+        * storage/indexeddb/prefetch-bugfix-108071.html:
+        * storage/indexeddb/prefetch-invalidation-expected.txt: Added.
+        * storage/indexeddb/prefetch-invalidation.html: Added.
+        * storage/indexeddb/prefetch-race-expected.txt: Added.
+        * storage/indexeddb/prefetch-race.html: Added.
+        * storage/indexeddb/queued-commands.html:
+        * storage/indexeddb/readonly-properties.html:
+        * storage/indexeddb/readonly.html:
+        * storage/indexeddb/removed-expected.txt:
+        * storage/indexeddb/removed.html:
+        * storage/indexeddb/request-continue-abort.html:
+        * storage/indexeddb/request-event-propagation.html:
+        * storage/indexeddb/request-leak-expected.txt: Added.
+        * storage/indexeddb/request-leak.html: Added.
+        * storage/indexeddb/request-result-cache-expected.txt: Added.
+        * storage/indexeddb/request-result-cache.html: Added.
+        * storage/indexeddb/resources/aborted-versionchange-closes.js:
+        * storage/indexeddb/resources/basics.js:
+        * storage/indexeddb/resources/create-and-remove-object-store.js:
+        * storage/indexeddb/resources/create-object-store-options.js:
+        * storage/indexeddb/resources/createIndex-after-failure.js:
+        * storage/indexeddb/resources/createObjectStore-name-argument-required.js:
+        * storage/indexeddb/resources/createObjectStore-null-name.js:
+        * storage/indexeddb/resources/cursor-added-bug.js:
+        * storage/indexeddb/resources/cursor-advance.js:
+        * storage/indexeddb/resources/cursor-basics.js: Added.
+        * storage/indexeddb/resources/cursor-continue-dir.js:
+        * storage/indexeddb/resources/cursor-continue-validity.js:
+        * storage/indexeddb/resources/cursor-continue.js:
+        * storage/indexeddb/resources/cursor-continueprimarykey.js: Added.
+        * storage/indexeddb/resources/cursor-delete.js:
+        * storage/indexeddb/resources/cursor-inconsistency.js:
+        * storage/indexeddb/resources/cursor-index-delete.js:
+        * storage/indexeddb/resources/cursor-key-order.js:
+        * storage/indexeddb/resources/cursor-prev-no-duplicate.js:
+        * storage/indexeddb/resources/cursor-primary-key-order.js:
+        * storage/indexeddb/resources/cursor-properties.js:
+        * storage/indexeddb/resources/cursor-reverse-bug.js:
+        * storage/indexeddb/resources/cursor-skip-deleted.js:
+        * storage/indexeddb/resources/cursor-update-value-argument-required.js:
+        * storage/indexeddb/resources/cursor-update.js:
+        * storage/indexeddb/resources/cursor-value.js:
+        * storage/indexeddb/resources/data-corruption.js:
+        * storage/indexeddb/resources/database-basics.js:
+        * storage/indexeddb/resources/database-close.js:
+        * storage/indexeddb/resources/database-closepending-flag.js:
+        * storage/indexeddb/resources/database-deletepending-flag.js:
+        * storage/indexeddb/resources/database-name-undefined.js:
+        * storage/indexeddb/resources/database-odd-names.js:
+        * storage/indexeddb/resources/database-quota.js:
+        * storage/indexeddb/resources/database-wrapper.js:
+        * storage/indexeddb/resources/delete-closed-database-object.js:
+        * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-open-success.js:
+        * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js:
+        * storage/indexeddb/resources/delete-range.js:
+        * storage/indexeddb/resources/deleteIndex.js:
+        * storage/indexeddb/resources/deleteObjectStore-name-argument-required.js:
+        * storage/indexeddb/resources/deleteObjectStore-null-name.js:
+        * storage/indexeddb/resources/deleted-objects.js:
+        * storage/indexeddb/resources/deletedatabase-blocked.js:
+        * storage/indexeddb/resources/deletedatabase-delayed-by-open-and-versionchange.js:
+        * storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js:
+        * storage/indexeddb/resources/deletedatabase-not-blocked.js:
+        * storage/indexeddb/resources/dont-commit-on-blocked-worker.js:
+        * storage/indexeddb/resources/dont-wedge.js:
+        * storage/indexeddb/resources/duplicates.js:
+        * storage/indexeddb/resources/error-causes-abort-by-default.js:
+        * storage/indexeddb/resources/events.js:
+        * storage/indexeddb/resources/exception-in-event-aborts.js:
+        * storage/indexeddb/resources/exceptions.js:
+        * storage/indexeddb/resources/factory-basics.js:
+        * storage/indexeddb/resources/factory-cmp.js:
+        * storage/indexeddb/resources/factory-deletedatabase.js:
+        * storage/indexeddb/resources/get-keyrange.js:
+        * storage/indexeddb/resources/index-basics.js:
+        * storage/indexeddb/resources/index-count.js:
+        * storage/indexeddb/resources/index-cursor.js:
+        * storage/indexeddb/resources/index-duplicate-keypaths.js:
+        * storage/indexeddb/resources/index-get-key-argument-required.js:
+        * storage/indexeddb/resources/index-multientry.js:
+        * storage/indexeddb/resources/index-population.js:
+        * storage/indexeddb/resources/index-unique.js:
+        * storage/indexeddb/resources/interfaces.js:
+        * storage/indexeddb/resources/intversion-abort-in-initial-upgradeneeded.js:
+        * storage/indexeddb/resources/intversion-bad-parameters.js:
+        * storage/indexeddb/resources/intversion-blocked.js:
+        * storage/indexeddb/resources/intversion-close-between-events.js:
+        * storage/indexeddb/resources/intversion-close-in-oncomplete.js:
+        * storage/indexeddb/resources/intversion-close-in-upgradeneeded.js:
+        * storage/indexeddb/resources/intversion-encoding.js:
+        * storage/indexeddb/resources/intversion-gated-on-delete.js:
+        * storage/indexeddb/resources/intversion-long-queue.js:
+        * storage/indexeddb/resources/intversion-omit-parameter.js:
+        * storage/indexeddb/resources/intversion-open-in-upgradeneeded.js:
+        * storage/indexeddb/resources/intversion-open-with-version.js:
+        * storage/indexeddb/resources/intversion-pending-version-changes-ascending.js: Added.
+        * storage/indexeddb/resources/intversion-pending-version-changes-descending.js: Added.
+        * storage/indexeddb/resources/intversion-pending-version-changes-same.js: Added.
+        * storage/indexeddb/resources/intversion-persistence.js:
+        * storage/indexeddb/resources/intversion-revert-on-abort.js:
+        * storage/indexeddb/resources/intversion-two-opens-no-versions.js:
+        * storage/indexeddb/resources/intversion-upgrades.js:
+        * storage/indexeddb/resources/invalid-keys.js:
+        * storage/indexeddb/resources/key-generator.js:
+        * storage/indexeddb/resources/key-sort-order-across-types.js:
+        * storage/indexeddb/resources/key-sort-order-date.js:
+        * storage/indexeddb/resources/key-type-array.js:
+        * storage/indexeddb/resources/key-type-binary.js: Added.
+        * storage/indexeddb/resources/key-type-infinity.js:
+        * storage/indexeddb/resources/keypath-arrays.js:
+        * storage/indexeddb/resources/keypath-basics.js:
+        * storage/indexeddb/resources/keypath-edges.js:
+        * storage/indexeddb/resources/keypath-fetch-key.js:
+        * storage/indexeddb/resources/keypath-intrinsic-properties.js:
+        * storage/indexeddb/resources/keyrange-required-arguments.js:
+        * storage/indexeddb/resources/keyrange.js:
+        * storage/indexeddb/resources/lazy-index-types.js:
+        * storage/indexeddb/resources/legacy-constants.js:
+        * storage/indexeddb/resources/list-ordering.js:
+        * storage/indexeddb/resources/metadata.js:
+        * storage/indexeddb/resources/mutating-cursor.js:
+        * storage/indexeddb/resources/objectStore-required-arguments.js:
+        * storage/indexeddb/resources/objectstore-autoincrement.js:
+        * storage/indexeddb/resources/objectstore-basics.js:
+        * storage/indexeddb/resources/objectstore-clear.js:
+        * storage/indexeddb/resources/objectstore-count.js:
+        * storage/indexeddb/resources/objectstore-cursor.js:
+        * storage/indexeddb/resources/objectstore-keycursor.js: 
+        * storage/indexeddb/resources/objectstore-removeobjectstore.js:
+        * storage/indexeddb/resources/odd-strings.js:
+        * storage/indexeddb/resources/open-cursor.js:
+        * storage/indexeddb/resources/open-during-transaction.js:
+        * storage/indexeddb/resources/open-ordering.js:
+        * storage/indexeddb/resources/open-twice.js:
+        * storage/indexeddb/resources/opencursor-key.js:
+        * storage/indexeddb/resources/pending-activity.js:
+        * storage/indexeddb/resources/pending-version-change-on-exit.js:
+        * storage/indexeddb/resources/pending-version-change-stuck.js:
+        * storage/indexeddb/resources/persistence.js:
+        * storage/indexeddb/resources/prefetch-bugfix-108071.js:
+        * storage/indexeddb/resources/queued-commands.js:
+        * storage/indexeddb/resources/readonly-properties.js:
+        * storage/indexeddb/resources/readonly.js:
+        * storage/indexeddb/resources/removed.js:
+        * storage/indexeddb/resources/request-continue-abort.js:
+        * storage/indexeddb/resources/request-event-propagation.js:
+        * storage/indexeddb/resources/set_version_blocked.js:
+        * storage/indexeddb/resources/setversion-blocked-by-versionchange-close.js:
+        * storage/indexeddb/resources/setversion-not-blocked.js:
+        * storage/indexeddb/resources/shared.js:
+        * storage/indexeddb/resources/transaction-abort.js:
+        * storage/indexeddb/resources/transaction-active-flag.js:
+        * storage/indexeddb/resources/transaction-after-close.js:
+        * storage/indexeddb/resources/transaction-and-objectstore-calls.js:
+        * storage/indexeddb/resources/transaction-basics.js:
+        * storage/indexeddb/resources/transaction-complete-workers.js:
+        * storage/indexeddb/resources/transaction-coordination-across-databases.js:
+        * storage/indexeddb/resources/transaction-coordination-within-database.js:
+        * storage/indexeddb/resources/transaction-crash-on-abort.js:
+        * storage/indexeddb/resources/transaction-error.js:
+        * storage/indexeddb/resources/transaction-event-propagation.js:
+        * storage/indexeddb/resources/transaction-read-only.js:
+        * storage/indexeddb/resources/transaction-readwrite-exclusive.js:
+        * storage/indexeddb/resources/transaction-rollback.js:
+        * storage/indexeddb/resources/transaction-scope-sequencing.js:
+        * storage/indexeddb/resources/transaction-starvation.js:
+        * storage/indexeddb/resources/transaction-storeNames-required.js:
+        * storage/indexeddb/resources/unblocked-version-changes.js:
+        * storage/indexeddb/resources/unprefix.js:
+        * storage/indexeddb/resources/value-undefined.js:
+        * storage/indexeddb/resources/values-odd-types.js:
+        * storage/indexeddb/resources/version-change-abort.js:
+        * storage/indexeddb/resources/version-change-exclusive.js:
+        * storage/indexeddb/resources/versionchangerequest-activedomobject.js:
+        * storage/indexeddb/set_version_blocked.html:
+        * storage/indexeddb/setversion-blocked-by-versionchange-close-expected.txt:
+        * storage/indexeddb/setversion-blocked-by-versionchange-close.html:
+        * storage/indexeddb/setversion-not-blocked.html:
+        * storage/indexeddb/structured-clone-expected.txt:
+        * storage/indexeddb/structured-clone.html:
+        * storage/indexeddb/transaction-abort-expected.txt:
+        * storage/indexeddb/transaction-abort.html:
+        * storage/indexeddb/transaction-active-flag-expected.txt:
+        * storage/indexeddb/transaction-active-flag.html:
+        * storage/indexeddb/transaction-after-close-expected.txt:
+        * storage/indexeddb/transaction-after-close.html:
+        * storage/indexeddb/transaction-and-objectstore-calls-expected.txt:
+        * storage/indexeddb/transaction-and-objectstore-calls.html:
+        * storage/indexeddb/transaction-basics-expected.txt:
+        * storage/indexeddb/transaction-basics.html:
+        * storage/indexeddb/transaction-complete-with-js-recursion-cross-frame.html:
+        * storage/indexeddb/transaction-complete-with-js-recursion.html:
+        * storage/indexeddb/transaction-complete-workers-expected.txt:
+        * storage/indexeddb/transaction-complete-workers.html:
+        * storage/indexeddb/transaction-coordination-across-databases.html:
+        * storage/indexeddb/transaction-coordination-within-database.html:
+        * storage/indexeddb/transaction-crash-in-tasks.html:
+        * storage/indexeddb/transaction-crash-on-abort.html:
+        * storage/indexeddb/transaction-error-expected.txt:
+        * storage/indexeddb/transaction-error.html:
+        * storage/indexeddb/transaction-event-propagation.html:
+        * storage/indexeddb/transaction-ordering-expected.txt: Added.
+        * storage/indexeddb/transaction-ordering.html: Added.
+        * storage/indexeddb/transaction-read-only-expected.txt:
+        * storage/indexeddb/transaction-read-only.html:
+        * storage/indexeddb/transaction-readwrite-exclusive.html:
+        * storage/indexeddb/transaction-rollback.html:
+        * storage/indexeddb/transaction-scope-sequencing.html:
+        * storage/indexeddb/transaction-starvation.html:
+        * storage/indexeddb/transaction-storeNames-required-expected.txt:
+        * storage/indexeddb/transaction-storeNames-required.html:
+        * storage/indexeddb/unblocked-version-changes-expected.txt:
+        * storage/indexeddb/unblocked-version-changes.html:
+        * storage/indexeddb/unprefix-workers.html:
+        * storage/indexeddb/unprefix.html:
+        * storage/indexeddb/value-undefined.html:
+        * storage/indexeddb/values-odd-types.html:
+        * storage/indexeddb/version-change-abort-expected.txt:
+        * storage/indexeddb/version-change-abort.html:
+        * storage/indexeddb/version-change-exclusive-expected.txt:
+        * storage/indexeddb/version-change-exclusive.html:
+        * storage/indexeddb/versionchangerequest-activedomobject.html:
+
 2014-02-11  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Position and thickness of underline as text size changes
diff --git a/LayoutTests/resources/js-test.js b/LayoutTests/resources/js-test.js
new file mode 100644 (file)
index 0000000..98e6f1b
--- /dev/null
@@ -0,0 +1,774 @@
+// svg/dynamic-updates tests set enablePixelTesting=true, as we want to dump text + pixel results
+if (self.testRunner) {
+    if (self.enablePixelTesting)
+        testRunner.dumpAsTextWithPixelResults();
+    else
+        testRunner.dumpAsText();
+}
+
+var description, debug, successfullyParsed;
+
+var expectingError; // set by shouldHaveError()
+var expectedErrorMessage; // set by onerror when expectingError is true
+var unexpectedErrorMessage; // set by onerror when expectingError is not true
+
+(function() {
+
+    function getOrCreate(id, tagName)
+    {
+        var element = document.getElementById(id);
+        if (element)
+            return element;
+
+        element = document.createElement(tagName);
+        element.id = id;
+        var refNode;
+        var parent = document.body || document.documentElement;
+        if (id == "description")
+            refNode = getOrCreate("console", "div");
+        else
+            refNode = parent.firstChild;
+
+        parent.insertBefore(element, refNode);
+        return element;
+    }
+
+    description = function description(msg, quiet)
+    {
+        // For MSIE 6 compatibility
+        var span = document.createElement("span");
+        if (quiet)
+            span.innerHTML = '<p>' + msg + '</p><p>On success, you will see no "<span class="fail">FAIL</span>" messages, followed by "<span class="pass">TEST COMPLETE</span>".</p>';
+        else
+            span.innerHTML = '<p>' + msg + '</p><p>On success, you will see a series of "<span class="pass">PASS</span>" messages, followed by "<span class="pass">TEST COMPLETE</span>".</p>';
+
+        var description = getOrCreate("description", "p");
+        if (description.firstChild)
+            description.replaceChild(span, description.firstChild);
+        else
+            description.appendChild(span);
+    };
+
+    debug = function debug(msg)
+    {
+        var span = document.createElement("span");
+        getOrCreate("console", "div").appendChild(span); // insert it first so XHTML knows the namespace
+        span.innerHTML = msg + '<br />';
+    };
+
+    var css =
+        ".pass {" +
+            "font-weight: bold;" +
+            "color: green;" +
+        "}" +
+        ".fail {" +
+            "font-weight: bold;" +
+            "color: red;" +
+        "}" +
+        "#console {" +
+            "white-space: pre-wrap;" +
+            "font-family: monospace;" +
+        "}";
+
+    function insertStyleSheet()
+    {
+        var styleElement = document.createElement("style");
+        styleElement.textContent = css;
+        (document.head || document.documentElement).appendChild(styleElement);
+    }
+
+    function handleTestFinished()
+    {
+        // FIXME: Get rid of this boolean.
+        wasPostTestScriptParsed = true;
+        if (window.jsTestIsAsync) {
+            if (window.testRunner)
+                testRunner.waitUntilDone();
+            if (window.wasFinishJSTestCalled)
+                finishJSTest();
+        } else
+            finishJSTest();
+    }
+
+    if (!isWorker()) {
+        window.addEventListener('DOMContentLoaded', handleTestFinished, false);
+        insertStyleSheet();
+    }
+
+    if (!self.isOnErrorTest) {
+        self.onerror = function(message)
+        {
+            if (self.expectingError) {
+                self.expectedErrorMessage = message;
+                self.expectingError = false;
+                return;
+            }
+            self.unexpectedErrorMessage = message;
+            if (self.jsTestIsAsync) {
+                self.testFailed("Unexpected error: " + message);
+                finishJSTest();
+            }
+        };
+    }
+})();
+
+function isWorker()
+{
+    // It's conceivable that someone would stub out 'document' in a worker so
+    // also check for childNodes, an arbitrary DOM-related object that is
+    // meaningless in a WorkerContext.
+    return (typeof document === 'undefined' || typeof document.childNodes === 'undefined') && !!self.importScripts;
+}
+
+function descriptionQuiet(msg) { description(msg, true); }
+
+function escapeHTML(text)
+{
+    return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\0/g, "\\0");
+}
+
+function testPassed(msg)
+{
+    debug('<span><span class="pass">PASS</span> ' + escapeHTML(msg) + '</span>');
+}
+
+function testFailed(msg)
+{
+    debug('<span><span class="fail">FAIL</span> ' + escapeHTML(msg) + '</span>');
+}
+
+function areArraysEqual(a, b)
+{
+    try {
+        if (a.length !== b.length)
+            return false;
+        for (var i = 0; i < a.length; i++)
+            if (a[i] !== b[i])
+                return false;
+    } catch (ex) {
+        return false;
+    }
+    return true;
+}
+
+function isMinusZero(n)
+{
+    // the only way to tell 0 from -0 in JS is the fact that 1/-0 is
+    // -Infinity instead of Infinity
+    return n === 0 && 1/n < 0;
+}
+
+function isNewSVGTearOffType(v)
+{
+    return ['[object SVGLength]', '[object SVGLengthList]', '[object SVGPoint]', '[object SVGPointList]', '[object SVGNumber]'].indexOf(""+v) != -1;
+}
+
+function isResultCorrect(actual, expected)
+{
+    if (expected === 0)
+        return actual === expected && (1/actual) === (1/expected);
+    if (actual === expected)
+        return true;
+    // http://crbug.com/308818 : The new implementation of SVGListProperties do not necessary return the same wrapper object, so === operator would not work. We compare for their string representation instead.
+    if (isNewSVGTearOffType(expected) && typeof(expected) == typeof(actual) && actual.valueAsString == expected.valueAsString)
+        return true;
+    if (typeof(expected) == "number" && isNaN(expected))
+        return typeof(actual) == "number" && isNaN(actual);
+    if (expected && (Object.prototype.toString.call(expected) == Object.prototype.toString.call([])))
+        return areArraysEqual(actual, expected);
+    return false;
+}
+
+function stringify(v)
+{
+    if (isNewSVGTearOffType(v))
+        return v.valueAsString;
+    if (v === 0 && 1/v < 0)
+        return "-0";
+    else return "" + v;
+}
+
+function evalAndLog(_a, _quiet)
+{
+  if (typeof _a != "string")
+    debug("WARN: tryAndLog() expects a string argument");
+
+  // Log first in case things go horribly wrong or this causes a sync event.
+  if (!_quiet)
+    debug(_a);
+
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+    testFailed(_a + " threw exception " + e);
+  }
+  return _av;
+}
+
+function shouldBe(_a, _b, quiet)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBe() expects string arguments");
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+  var _bv = eval(_b);
+
+  if (_exception)
+    testFailed(_a + " should be " + _bv + ". Threw exception " + _exception);
+  else if (isResultCorrect(_av, _bv)) {
+    if (!quiet) {
+        testPassed(_a + " is " + _b);
+    }
+  } else if (typeof(_av) == typeof(_bv))
+    testFailed(_a + " should be " + _bv + ". Was " + stringify(_av) + ".");
+  else
+    testFailed(_a + " should be " + _bv + " (of type " + typeof _bv + "). Was " + _av + " (of type " + typeof _av + ").");
+}
+
+// Execute condition every 5 milliseconds until it succeed or failureTime is reached.
+// completionHandler is executed on success, failureHandler is executed on timeout.
+function _waitForCondition(condition, failureTime, completionHandler, failureHandler)
+{
+  if (condition()) {
+    completionHandler();
+  } else if (Date.now() > failureTime) {
+    failureHandler();
+  } else {
+    setTimeout(_waitForCondition, 5, condition, failureTime, completionHandler, failureHandler);
+  }
+}
+
+function shouldBecomeEqual(_a, _b, _completionHandler, _timeout)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBecomeEqual() expects string arguments");
+
+  if (_timeout === undefined)
+    _timeout = 500;
+
+  var _bv;
+  var _condition = function() {
+    var _exception;
+    var _av;
+    try {
+      _av = eval(_a);
+    } catch (e) {
+        _exception = e;
+    }
+    _bv = eval(_b);
+    if (_exception)
+      testFailed(_a + " should become " + _bv + ". Threw exception " + _exception);
+    if (isResultCorrect(_av, _bv)) {
+      testPassed(_a + " became " + _b);
+      return true;
+    }
+    return false;
+  };
+  var _failureTime = Date.now() + _timeout;
+  var _failureHandler = function () {
+    testFailed(_a + " failed to change to " + _bv + " in " + (_timeout / 1000) + " seconds.");
+    _completionHandler();
+  };
+  _waitForCondition(_condition, _failureTime, _completionHandler, _failureHandler);
+}
+
+function shouldBecomeEqualToString(value, reference, completionHandler, timeout)
+{
+  if (typeof value !== "string" || typeof reference !== "string")
+    debug("WARN: shouldBecomeEqualToString() expects string arguments");
+  var unevaledString = JSON.stringify(reference);
+  shouldBecomeEqual(value, unevaledString, completionHandler, timeout);
+}
+
+function shouldBeType(_a, _type) {
+  var _exception;
+  var _av;
+  try {
+    _av = eval(_a);
+  } catch (e) {
+    _exception = e;
+  }
+
+  var _typev = eval(_type);
+  if (_av instanceof _typev) {
+    testPassed(_a + " is an instance of " + _type);
+  } else {
+    testFailed(_a + " is not an instance of " + _type);
+  }
+}
+
+// Variant of shouldBe()--confirms that result of eval(_to_eval) is within
+// numeric _tolerance of numeric _target.
+function shouldBeCloseTo(_to_eval, _target, _tolerance, _quiet)
+{
+  if (typeof _to_eval != "string") {
+    testFailed("shouldBeCloseTo() requires string argument _to_eval. was type " + typeof _to_eval);
+    return;
+  }
+  if (typeof _target != "number") {
+    testFailed("shouldBeCloseTo() requires numeric argument _target. was type " + typeof _target);
+    return;
+  }
+  if (typeof _tolerance != "number") {
+    testFailed("shouldBeCloseTo() requires numeric argument _tolerance. was type " + typeof _tolerance);
+    return;
+  }
+
+  var _result;
+  try {
+     _result = eval(_to_eval);
+  } catch (e) {
+    testFailed(_to_eval + " should be within " + _tolerance + " of "
+               + _target + ". Threw exception " + e);
+    return;
+  }
+
+  if (typeof(_result) != typeof(_target)) {
+    testFailed(_to_eval + " should be of type " + typeof _target
+               + " but was of type " + typeof _result);
+  } else if (Math.abs(_result - _target) <= _tolerance) {
+    if (!_quiet) {
+        testPassed(_to_eval + " is within " + _tolerance + " of " + _target);
+    }
+  } else {
+    testFailed(_to_eval + " should be within " + _tolerance + " of " + _target
+               + ". Was " + _result + ".");
+  }
+}
+
+function shouldNotBe(_a, _b, _quiet)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldNotBe() expects string arguments");
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+  var _bv = eval(_b);
+
+  if (_exception)
+    testFailed(_a + " should not be " + _bv + ". Threw exception " + _exception);
+  else if (!isResultCorrect(_av, _bv)) {
+    if (!_quiet) {
+        testPassed(_a + " is not " + _b);
+    }
+  } else
+    testFailed(_a + " should not be " + _bv + ".");
+}
+
+function shouldBecomeDifferent(_a, _b, _completionHandler, _timeout)
+{
+  if (typeof _a != "string" || typeof _b != "string")
+    debug("WARN: shouldBecomeDifferent() expects string arguments");
+  if (_timeout === undefined)
+    _timeout = 500;
+
+  var _bv;
+  var _condition = function() {
+    var _exception;
+    var _av;
+    try {
+      _av = eval(_a);
+    } catch (e) {
+      _exception = e;
+    }
+    _bv = eval(_b);
+    if (_exception)
+      testFailed(_a + " should became not equal to " + _bv + ". Threw exception " + _exception);
+    if (!isResultCorrect(_av, _bv)) {
+      testPassed(_a + " became different from " + _b);
+      return true;
+    }
+    return false;
+  };
+  var _failureTime = Date.now() + _timeout;
+  var _failureHandler = function () {
+    testFailed(_a + " did not become different from " + _bv + " in " + (_timeout / 1000) + " seconds.");
+    _completionHandler();
+  };
+  _waitForCondition(_condition, _failureTime, _completionHandler, _failureHandler);
+}
+
+function shouldBeTrue(a, quiet) { shouldBe(a, "true", quiet); }
+function shouldBeTrueQuiet(a) { shouldBe(a, "true", true); }
+function shouldBeFalse(a, quiet) { shouldBe(a, "false", quiet); }
+function shouldBeNaN(a, quiet) { shouldBe(a, "NaN", quiet); }
+function shouldBeNull(a, quiet) { shouldBe(a, "null", quiet); }
+function shouldBeZero(a, quiet) { shouldBe(a, "0", quiet); }
+
+function shouldBeEqualToString(a, b)
+{
+  if (typeof a !== "string" || typeof b !== "string")
+    debug("WARN: shouldBeEqualToString() expects string arguments");
+  var unevaledString = JSON.stringify(b);
+  shouldBe(a, unevaledString);
+}
+
+function shouldBeEmptyString(a) { shouldBeEqualToString(a, ""); }
+
+function shouldEvaluateTo(actual, expected) {
+  // A general-purpose comparator.  'actual' should be a string to be
+  // evaluated, as for shouldBe(). 'expected' may be any type and will be
+  // used without being eval'ed.
+  if (expected == null) {
+    // Do this before the object test, since null is of type 'object'.
+    shouldBeNull(actual);
+  } else if (typeof expected == "undefined") {
+    shouldBeUndefined(actual);
+  } else if (typeof expected == "function") {
+    // All this fuss is to avoid the string-arg warning from shouldBe().
+    try {
+      var actualValue = eval(actual);
+    } catch (e) {
+      testFailed("Evaluating " + actual + ": Threw exception " + e);
+      return;
+    }
+    shouldBe("'" + actualValue.toString().replace(/\n/g, "") + "'",
+             "'" + expected.toString().replace(/\n/g, "") + "'");
+  } else if (typeof expected == "object") {
+    shouldBeTrue(actual + " == '" + expected + "'");
+  } else if (typeof expected == "string") {
+    shouldBe(actual, expected);
+  } else if (typeof expected == "boolean") {
+    shouldBe("typeof " + actual, "'boolean'");
+    if (expected)
+      shouldBeTrue(actual);
+    else
+      shouldBeFalse(actual);
+  } else if (typeof expected == "number") {
+    shouldBe(actual, stringify(expected));
+  } else {
+    debug(expected + " is unknown type " + typeof expected);
+    shouldBeTrue(actual, "'"  +expected.toString() + "'");
+  }
+}
+
+function shouldBeNonZero(_a)
+{
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+
+  if (_exception)
+    testFailed(_a + " should be non-zero. Threw exception " + _exception);
+  else if (_av != 0)
+    testPassed(_a + " is non-zero.");
+  else
+    testFailed(_a + " should be non-zero. Was " + _av);
+}
+
+function shouldBeNonNull(_a)
+{
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+
+  if (_exception)
+    testFailed(_a + " should be non-null. Threw exception " + _exception);
+  else if (_av != null)
+    testPassed(_a + " is non-null.");
+  else
+    testFailed(_a + " should be non-null. Was " + _av);
+}
+
+function shouldBeUndefined(_a)
+{
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+      _exception = e;
+  }
+
+  if (_exception)
+    testFailed(_a + " should be undefined. Threw exception " + _exception);
+  else if (typeof _av == "undefined")
+    testPassed(_a + " is undefined.");
+  else
+    testFailed(_a + " should be undefined. Was " + _av);
+}
+
+function shouldBeDefined(_a)
+{
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+
+  if (_exception)
+    testFailed(_a + " should be defined. Threw exception " + _exception);
+  else if (_av !== undefined)
+    testPassed(_a + " is defined.");
+  else
+    testFailed(_a + " should be defined. Was " + _av);
+}
+
+function shouldBeGreaterThanOrEqual(_a, _b) {
+    if (typeof _a != "string" || typeof _b != "string")
+        debug("WARN: shouldBeGreaterThanOrEqual expects string arguments");
+
+    var _exception;
+    var _av;
+    try {
+        _av = eval(_a);
+    } catch (e) {
+        _exception = e;
+    }
+    var _bv = eval(_b);
+
+    if (_exception)
+        testFailed(_a + " should be >= " + _b + ". Threw exception " + _exception);
+    else if (typeof _av == "undefined" || _av < _bv)
+        testFailed(_a + " should be >= " + _b + ". Was " + _av + " (of type " + typeof _av + ").");
+    else
+        testPassed(_a + " is >= " + _b);
+}
+
+function shouldNotThrow(_a) {
+    try {
+        eval(_a);
+        testPassed(_a + " did not throw exception.");
+    } catch (e) {
+        testFailed(_a + " should not throw exception. Threw exception " + e + ".");
+    }
+}
+
+function shouldThrow(_a, _e)
+{
+  var _exception;
+  var _av;
+  try {
+     _av = eval(_a);
+  } catch (e) {
+     _exception = e;
+  }
+
+  var _ev;
+  if (_e)
+      _ev = eval(_e);
+
+  if (_exception) {
+    if (typeof _e == "undefined" || _exception == _ev)
+      testPassed(_a + " threw exception " + _exception + ".");
+    else
+      testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Threw exception " + _exception + ".");
+  } else if (typeof _av == "undefined")
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was undefined.");
+  else
+    testFailed(_a + " should throw " + (typeof _e == "undefined" ? "an exception" : _ev) + ". Was " + _av + ".");
+}
+
+function shouldBeNow(a, delta)
+{
+    // Right now, V8 and Chromium / Blink use two different clock
+    // implementations. On Windows, the implementations are non-trivial and can
+    // be slightly out of sync. The delta is intended to compensate for that.
+    //
+    // FIXME: reconsider this when the V8 and Blink clocks get unified, see http://crbug.com/324110
+    if (delta === undefined)
+        delta = 1000;
+
+    for (var i = 0; i < 1000; ++i) {
+        var startDate = Date.now();
+        var av = eval(a);
+        var date = av.valueOf();
+        var endDate = Date.now();
+
+        // On some occasions such as NTP updates, the current time can go
+        // backwards. This should only happen rarely, so we can get away with
+        // retrying the test a few times if we detect the time going backwards.
+        if (startDate > endDate)
+            continue;
+
+        if (typeof date !== "number") {
+            testFailed(a + " is not a number or a Date. Got " + av);
+            return;
+        }
+        if (date < startDate - delta) {
+            testFailed(a + " is not the curent time. Got " + av + " which is " + (startDate - date) / 1000 + " seconds in the past.");
+            return;
+        }
+        if (date > endDate + delta) {
+            testFailed(a + " is not the current time. Got " + av + " which is " + (date - endDate) / 1000 + " seconds in the future.");
+            return;
+        }
+
+        testPassed(a + " is equivalent to Date.now().");
+        return;
+    }
+    testFailed(a + " cannot be tested against the current time. The clock is going backwards too often.");
+}
+
+function expectError()
+{
+    if (expectingError) {
+        testFailed("shouldHaveError() called twice before an error occurred!");
+    }
+    expectingError = true;
+}
+
+function shouldHaveHadError(message)
+{
+    if (expectingError) {
+        testFailed("No error thrown between expectError() and shouldHaveHadError()");
+        return;
+    }
+
+    if (expectedErrorMessage) {
+        if (!message)
+            testPassed("Got expected error");
+        else if (expectedErrorMessage.indexOf(message) !== -1)
+            testPassed("Got expected error: '" + message + "'");
+        else
+            testFailed("Unexpected error '" + message + "'");
+        expectedErrorMessage = undefined;
+        return;
+    }
+
+    testFailed("expectError() not called before shouldHaveHadError()");
+}
+
+function gc() {
+    if (typeof GCController !== "undefined")
+        GCController.collect();
+    else {
+        var gcRec = function (n) {
+            if (n < 1)
+                return {};
+            var temp = {i: "ab" + i + (i / 100000)};
+            temp += "foo";
+            gcRec(n-1);
+        };
+        for (var i = 0; i < 1000; i++)
+            gcRec(10);
+    }
+}
+
+function minorGC() {
+    if (typeof GCController !== "undefined")
+        GCController.minorCollect();
+    else
+        testFailed("Minor GC is available only when you enable the --expose-gc option in V8.");
+}
+
+function isSuccessfullyParsed()
+{
+    // FIXME: Remove this and only report unexpected syntax errors.
+    successfullyParsed = !unexpectedErrorMessage;
+    shouldBeTrue("successfullyParsed");
+    debug('<br /><span class="pass">TEST COMPLETE</span>');
+}
+
+// It's possible for an async test to call finishJSTest() before js-test-post.js
+// has been parsed.
+function finishJSTest()
+{
+    wasFinishJSTestCalled = true;
+    if (!self.wasPostTestScriptParsed)
+        return;
+    isSuccessfullyParsed();
+    if (self.jsTestIsAsync && self.testRunner)
+        testRunner.notifyDone();
+}
+
+function startWorker(testScriptURL, shared)
+{
+    self.jsTestIsAsync = true;
+    debug('Starting worker: ' + testScriptURL);
+    var worker = shared ? new SharedWorker(testScriptURL, "Shared Worker") : new Worker(testScriptURL);
+    worker.onmessage = function(event)
+    {
+        var workerPrefix = "[Worker] ";
+        if (event.data.length < 5 || event.data.charAt(4) != ':') {
+          debug(workerPrefix + event.data);
+          return;
+        }
+        var code = event.data.substring(0, 4);
+        var payload = workerPrefix + event.data.substring(5);
+        if (code == "PASS")
+            testPassed(payload);
+        else if (code == "FAIL")
+            testFailed(payload);
+        else if (code == "DESC")
+            description(payload);
+        else if (code == "DONE")
+            finishJSTest();
+        else
+            debug(workerPrefix + event.data);
+    };
+
+    worker.onerror = function(event)
+    {
+        debug('Got error from worker: ' + event.message);
+        finishJSTest();
+    };
+
+    if (shared) {
+        worker.port.onmessage = function(event) { worker.onmessage(event); };
+        worker.port.start();
+    }
+    return worker;
+}
+
+if (isWorker()) {
+    var workerPort = self;
+    if (self.name == "Shared Worker") {
+        self.onconnect = function(e) {
+            workerPort = e.ports[0];
+            workerPort.onmessage = function(event)
+            {
+                var colon = event.data.indexOf(":");
+                if (colon == -1) {
+                    testFailed("Unrecognized message to shared worker: " + event.data);
+                    return;
+                }
+                var code = event.data.substring(0, colon);
+                var payload = event.data.substring(colon + 1);
+                try {
+                    if (code == "IMPORT")
+                        importScripts(payload);
+                    else
+                        testFailed("Unrecognized message to shared worker: " + event.data);
+                } catch (ex) {
+                    testFailed("Caught exception in shared worker onmessage: " + ex);
+                }
+            };
+        };
+    }
+    description = function(msg, quiet) {
+        workerPort.postMessage('DESC:' + msg);
+    };
+    testFailed = function(msg) {
+        workerPort.postMessage('FAIL:' + msg);
+    };
+    testPassed = function(msg) {
+        workerPort.postMessage('PASS:' + msg);
+    };
+    finishJSTest = function() {
+        workerPort.postMessage('DONE:');
+    };
+    debug = function(msg) {
+        workerPort.postMessage(msg);
+    };
+}
index a07666e..dcc7d2b 100644 (file)
@@ -32,6 +32,7 @@ Expecting exception from db.transaction('store')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 
 onOpenError():
 PASS sawTransactionAbort is true
@@ -40,6 +41,7 @@ Expecting exception from db.transaction('store')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index df4a358..c519185 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/aborted-versionchange-closes.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 6f86db4..bf9efb8 100644 (file)
@@ -11,15 +11,13 @@ Expecting exception from request.result
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
-PASS 'webkitErrorMessage' in request is true
-Expecting exception from request.webkitErrorMessage
-PASS Exception was thrown.
-PASS code is DOMException.INVALID_STATE_ERR
-PASS ename is 'InvalidStateError'
+Exception message: Failed to read the 'result' property from 'IDBRequest': The request has not finished.
+PASS 'error' in request is true
 Expecting exception from request.error
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to read the 'error' property from 'IDBRequest': The request has not finished.
 PASS 'source' in request is true
 PASS request.source is null
 PASS 'transaction' in request is true
@@ -32,8 +30,6 @@ PASS 'onerror' in request is true
 PASS request.onerror is null
 PASS 'result' in event.target is true
 PASS !!event.target.result is true
-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
index 9e54db0..719b823 100644 (file)
@@ -12,15 +12,13 @@ PASS [Worker] 'result' in request is true
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is DOMException.INVALID_STATE_ERR
 PASS [Worker] ename is 'InvalidStateError'
-PASS [Worker] 'webkitErrorMessage' in request is true
-[Worker] Expecting exception from request.webkitErrorMessage
-PASS [Worker] Exception was thrown.
-PASS [Worker] code is DOMException.INVALID_STATE_ERR
-PASS [Worker] ename is 'InvalidStateError'
+[Worker] Exception message: Failed to read the 'result' property from 'IDBRequest': The request has not finished.
+PASS [Worker] 'error' in request is true
 [Worker] Expecting exception from request.error
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is DOMException.INVALID_STATE_ERR
 PASS [Worker] ename is 'InvalidStateError'
+[Worker] Exception message: Failed to read the 'error' property from 'IDBRequest': The request has not finished.
 PASS [Worker] 'source' in request is true
 PASS [Worker] request.source is null
 PASS [Worker] 'transaction' in request is true
@@ -33,8 +31,6 @@ PASS [Worker] 'onerror' in request is true
 PASS [Worker] request.onerror is null
 PASS [Worker] 'result' in event.target is true
 PASS [Worker] !!event.target.result is true
-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
index 92ace83..b01c577 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
-<script>startWorker('resources/basics.js', true /*shared*/);</script>
-<script src="../../resources/js-test-post.js"></script>
+<script>worker = startWorker('resources/basics.js', true /*shared*/);</script>
 </body>
 </html>
index 9e54db0..719b823 100644 (file)
@@ -12,15 +12,13 @@ PASS [Worker] 'result' in request is true
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is DOMException.INVALID_STATE_ERR
 PASS [Worker] ename is 'InvalidStateError'
-PASS [Worker] 'webkitErrorMessage' in request is true
-[Worker] Expecting exception from request.webkitErrorMessage
-PASS [Worker] Exception was thrown.
-PASS [Worker] code is DOMException.INVALID_STATE_ERR
-PASS [Worker] ename is 'InvalidStateError'
+[Worker] Exception message: Failed to read the 'result' property from 'IDBRequest': The request has not finished.
+PASS [Worker] 'error' in request is true
 [Worker] Expecting exception from request.error
 PASS [Worker] Exception was thrown.
 PASS [Worker] code is DOMException.INVALID_STATE_ERR
 PASS [Worker] ename is 'InvalidStateError'
+[Worker] Exception message: Failed to read the 'error' property from 'IDBRequest': The request has not finished.
 PASS [Worker] 'source' in request is true
 PASS [Worker] request.source is null
 PASS [Worker] 'transaction' in request is true
@@ -33,8 +31,6 @@ PASS [Worker] 'onerror' in request is true
 PASS [Worker] request.onerror is null
 PASS [Worker] 'result' in event.target is true
 PASS [Worker] !!event.target.result is true
-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
index a8e7dcc..cac091b 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
-<script>startWorker('resources/basics.js');</script>
-<script src="../../resources/js-test-post.js"></script>
+<script>worker = startWorker('resources/basics.js');</script>
 </body>
 </html>
index 686e6b8..465971f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/basics.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 9cfe3d5..9f4aeb6 100644 (file)
@@ -13,6 +13,7 @@ Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, 0);
 PASS Exception was thrown.
 PASS code is 25
 PASS ename is 'DataCloneError'
+Exception message: Failed to execute 'put' on 'IDBObjectStore': An object could not be cloned.
 
 doSecondOpen():
 indexedDB.open(dbname + '2')
@@ -22,6 +23,7 @@ Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, 0);
 PASS Exception was thrown.
 PASS code is 25
 PASS ename is 'DataCloneError'
+Exception message: Failed to execute 'put' on 'IDBObjectStore': An object could not be cloned.
 
 doThirdOpen():
 indexedDB.open(dbname + '3')
@@ -31,6 +33,7 @@ Expecting exception from db.createObjectStore('store').put(NON_CLONEABLE, INVALI
 PASS Exception was thrown.
 PASS code is 25
 PASS ename is 'DataCloneError'
+Exception message: Failed to execute 'put' on 'IDBObjectStore': An object could not be cloned.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 3b48fa9..a37d834 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 <script>
 
@@ -48,4 +48,3 @@ function doThirdOpen()
 }
 
 </script>
-<script src="../../resources/js-test-post.js"></script>
diff --git a/LayoutTests/storage/indexeddb/closed-cursor-expected.txt b/LayoutTests/storage/indexeddb/closed-cursor-expected.txt
new file mode 100644 (file)
index 0000000..6476cf3
--- /dev/null
@@ -0,0 +1,34 @@
+Verify that that cursors accessed after being closed are well behaved
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "closed-cursor.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put({value: 'value'}, ['key'])
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+cursorRequest = store.openCursor()
+
+openCursorSuccess():
+cursor = cursorRequest.result
+Don't continue the cursor, so it retains its key/primaryKey/value
+
+transactionComplete():
+PASS JSON.stringify(cursor.key) is "[\"key\"]"
+PASS JSON.stringify(cursor.primaryKey) is "[\"key\"]"
+PASS JSON.stringify(cursor.value) is "{\"value\":\"value\"}"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/closed-cursor.html b/LayoutTests/storage/indexeddb/closed-cursor.html
new file mode 100644 (file)
index 0000000..a307620
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script>
+
+description("Verify that that cursors accessed after being closed are well behaved");
+
+indexedDBTest(prepareDatabase, onOpen);
+function prepareDatabase(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("store = db.createObjectStore('store')");
+    evalAndLog("store.put({value: 'value'}, ['key'])");
+}
+
+function onOpen(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("tx = db.transaction('store')");
+    evalAndLog("store = tx.objectStore('store')");
+    evalAndLog("cursorRequest = store.openCursor()");
+    cursorRequest.onsuccess = function openCursorSuccess(evt) {
+        preamble(evt);
+        evalAndLog("cursor = cursorRequest.result");
+        debug("Don't continue the cursor, so it retains its key/primaryKey/value");
+    };
+    tx.oncomplete = function transactionComplete(evt) {
+        preamble(evt);
+        shouldBeEqualToString("JSON.stringify(cursor.key)", '["key"]');
+        shouldBeEqualToString("JSON.stringify(cursor.primaryKey)", '["key"]');
+        shouldBeEqualToString("JSON.stringify(cursor.value)", '{"value":"value"}');
+        finishJSTest();
+    };
+}
+
+</script>
diff --git a/LayoutTests/storage/indexeddb/connection-leak-expected.txt b/LayoutTests/storage/indexeddb/connection-leak-expected.txt
new file mode 100644 (file)
index 0000000..9dd0cfa
--- /dev/null
@@ -0,0 +1,44 @@
+Regression test to ensure that IndexedDB connections don't leak
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+dbname = "connection-leak.html"
+
+doFirstOpen():
+request = indexedDB.open(dbname, 1)
+sawUpgradeNeeded1 = false
+
+onUpgradeNeeded1():
+sawUpgradeNeeded1 = true
+
+onOpenSuccess1():
+PASS sawUpgradeNeeded1 is true
+db = request.result
+db.close()
+
+doSecondOpen():
+request = indexedDB.open(dbname, 1)
+
+onOpenSuccess2():
+db = request.result
+db = null
+request = null
+Run GC outside of request's callback via setTimeout()
+window.gc()
+
+doThirdOpen():
+request = indexedDB.open(dbname, 2)
+sawUpgradeNeeded3 = false
+
+onUpgradeNeeded2():
+sawUpgradeNeeded3 = true
+
+onOpenSuccess3():
+PASS sawUpgradeNeeded3 is true
+db = request.result
+db.close()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/connection-leak.html b/LayoutTests/storage/indexeddb/connection-leak.html
new file mode 100644 (file)
index 0000000..38906a9
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script>
+
+description("Regression test to ensure that IndexedDB connections don't leak");
+
+setDBNameFromPath();
+doFirstOpen();
+
+function doFirstOpen()
+{
+    preamble();
+
+    evalAndLog("request = indexedDB.open(dbname, 1)");
+    evalAndLog("sawUpgradeNeeded1 = false");
+    request.onerror = unexpectedErrorCallback;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onupgradeneeded = function onUpgradeNeeded1() {
+        preamble();
+        evalAndLog("sawUpgradeNeeded1 = true");
+    };
+    request.onsuccess = function onOpenSuccess1() {
+        preamble();
+        shouldBeTrue("sawUpgradeNeeded1");
+        evalAndLog("db = request.result");
+        evalAndLog("db.close()");
+
+        doSecondOpen();
+    };
+}
+
+function doSecondOpen()
+{
+    preamble();
+
+    evalAndLog("request = indexedDB.open(dbname, 1)");
+    request.onerror = unexpectedErrorCallback;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onupgradeneeded = unexpectedUpgradeNeededCallback;
+    request.onsuccess = function onOpenSuccess2() {
+        preamble();
+        evalAndLog("db = request.result");
+
+        evalAndLog("db = null");
+        evalAndLog("request = null");
+
+        debug("Run GC outside of request's callback via setTimeout()");
+        setTimeout( function() {
+            evalAndLog("window.gc()");
+            doThirdOpen();
+        }, 0);
+    };
+}
+
+function doThirdOpen()
+{
+    preamble();
+
+    evalAndLog("request = indexedDB.open(dbname, 2)");
+    evalAndLog("sawUpgradeNeeded3 = false");
+    request.onerror = unexpectedErrorCallback;
+    request.onblocked = unexpectedBlockedCallback;
+    request.onupgradeneeded = function onUpgradeNeeded2() {
+        preamble();
+        evalAndLog("sawUpgradeNeeded3 = true");
+    };
+    request.onsuccess = function onOpenSuccess3() {
+        preamble();
+        shouldBeTrue("sawUpgradeNeeded3");
+        evalAndLog("db = request.result");
+        evalAndLog("db.close()");
+
+        finishJSTest();
+    };
+}
+
+</script>
index c78fccd..b244c8f 100644 (file)
@@ -13,6 +13,7 @@ Expecting exception from db.createObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'ConstraintError'
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': An object store with the specified name already exists.
 trans = db.transaction(['tmp'])
 trans.objectStore('tmp').get(0)
 PASS event.target.result is undefined.
@@ -21,21 +22,25 @@ Expecting exception from db.createObjectStore("some os")
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
 Trying remove
 Expecting exception from db.deleteObjectStore("some os")
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
 Trying create with store that already exists
 Expecting exception from db.createObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
 Trying remove with store that already exists
 Expecting exception from db.deleteObjectStore('tmp')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'deleteObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index acf2016..623debf 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/create-and-remove-object-store.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 4933d69..570f1a9 100644 (file)
@@ -16,10 +16,10 @@ PASS trans.mode is "readwrite"
 trans.objectStore('a').put({'a': 0})
 Expecting TypeError exception from db.createObjectStore('d', 'bar');
 PASS Exception was thrown.
-PASS db.createObjectStore('d', 'bar'); threw TypeError: Not an object.
+PASS db.createObjectStore('d', 'bar'); threw TypeError: Failed to execute 'createObjectStore' on 'IDBDatabase': parameter 2 ('options') is not an object.
 Expecting TypeError exception from db.createObjectStore('e', false);
 PASS Exception was thrown.
-PASS db.createObjectStore('e', false); threw TypeError: Not an object.
+PASS db.createObjectStore('e', false); threw TypeError: Failed to execute 'createObjectStore' on 'IDBDatabase': parameter 2 ('options') is not an object.
 trans.objectStore('b').put({'a': 0}, 0)
 trans.objectStore('a').get(0)
 PASS event.target.result.a is {a: 0}
index bd6df15..1a715cb 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/create-object-store-options.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 727855c..1ec5461 100644 (file)
@@ -14,6 +14,7 @@ Expecting exception from objectStore.deleteIndex('index')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.
 Now requesting object2
 now we wait.
 deleteIndexAfterGet()
@@ -21,10 +22,12 @@ Expecting exception from objectStore.deleteIndex('index')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.
 Expecting exception from objectStore.deleteIndex('index')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index a5261fb..3125881 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/createIndex-after-failure.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 7ede956..10b05d8 100644 (file)
@@ -9,7 +9,7 @@ dbname = "createObjectStore-name-argument-required.html"
 indexedDB.deleteDatabase(dbname)
 indexedDB.open(dbname)
 db = event.target.result
-PASS db.createObjectStore(); threw exception TypeError: Not enough arguments.
+PASS db.createObjectStore(); threw exception TypeError: Failed to execute 'createObjectStore' on 'IDBDatabase': 1 argument required, but only 0 present..
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4bcd693..e124f9b 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/createObjectStore-name-argument-required.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index aa60de6..4116a99 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/createObjectStore-null-name.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 0966f77..614012f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-added-bug.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 6bb8f64..fd3290a 100644 (file)
@@ -178,16 +178,16 @@ request = objectStore.openCursor()
 advanceBadly():
 Expecting TypeError exception from cursor.advance(0)
 PASS Exception was thrown.
-PASS cursor.advance(0) threw TypeError: Type error
+PASS cursor.advance(0) threw TypeError: Failed to execute 'advance' on 'IDBCursor': A count argument with value 0 (zero) was supplied, must be greater than 0.
 Expecting TypeError exception from cursor.advance(-1)
 PASS Exception was thrown.
-PASS cursor.advance(-1) threw TypeError: Type error
+PASS cursor.advance(-1) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 Expecting TypeError exception from cursor.advance(0x100000000)
 PASS Exception was thrown.
-PASS cursor.advance(0x100000000) threw TypeError: Type error
+PASS cursor.advance(0x100000000) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 Expecting TypeError exception from cursor.advance(0x20000000000000)
 PASS Exception was thrown.
-PASS cursor.advance(0x20000000000000) threw TypeError: Type error
+PASS cursor.advance(0x20000000000000) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 
 testEdges():
 trans = db.transaction(objectStoreName, 'readonly')
index bb5d75f..12e720e 100644 (file)
@@ -179,16 +179,16 @@ PASS [Worker] expected is "{\"key\":\"237-23-7744\",\"value\":{\"name\":\"Pug\",
 [Worker] advanceBadly():
 [Worker] Expecting TypeError exception from cursor.advance(0)
 PASS [Worker] Exception was thrown.
-PASS [Worker] cursor.advance(0) threw TypeError: Type error
+PASS [Worker] cursor.advance(0) threw TypeError: Failed to execute 'advance' on 'IDBCursor': A count argument with value 0 (zero) was supplied, must be greater than 0.
 [Worker] Expecting TypeError exception from cursor.advance(-1)
 PASS [Worker] Exception was thrown.
-PASS [Worker] cursor.advance(-1) threw TypeError: Type error
+PASS [Worker] cursor.advance(-1) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 [Worker] Expecting TypeError exception from cursor.advance(0x100000000)
 PASS [Worker] Exception was thrown.
-PASS [Worker] cursor.advance(0x100000000) threw TypeError: Type error
+PASS [Worker] cursor.advance(0x100000000) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 [Worker] Expecting TypeError exception from cursor.advance(0x20000000000000)
 PASS [Worker] Exception was thrown.
-PASS [Worker] cursor.advance(0x20000000000000) threw TypeError: Type error
+PASS [Worker] cursor.advance(0x20000000000000) threw TypeError: Failed to execute 'advance' on 'IDBCursor': Value is outside the 'unsigned long' value range.
 [Worker] 
 [Worker] testEdges():
 [Worker] trans = db.transaction(objectStoreName, 'readonly')
index 0ef5c96..2fe8736 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
-<script>startWorker('resources/cursor-advance.js');</script>
-<script src="../../resources/js-test-post.js"></script>
+<script>worker = startWorker('resources/cursor-advance.js');</script>
 </body>
 </html>
index 7394caa..2eb9abe 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-advance.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
diff --git a/LayoutTests/storage/indexeddb/cursor-basics-expected.txt b/LayoutTests/storage/indexeddb/cursor-basics-expected.txt
new file mode 100644 (file)
index 0000000..fa9a991
--- /dev/null
@@ -0,0 +1,111 @@
+Test the basics of IndexedDB's IDBCursor objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "cursor-basics.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+store = db.createObjectStore('storeName')
+index = store.createIndex('indexName', 'indexOn')
+store.put({indexOn: 'a'}, 0)
+store.openCursor()
+store.openKeyCursor()
+index.openCursor()
+index.openKeyCursor()
+
+onStoreOpenCursor():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor instanceof IDBCursor is true
+PASS 'key' in cursor is true
+PASS 'primaryKey' in cursor is true
+PASS 'continue' in cursor is true
+PASS typeof cursor.continue is "function"
+PASS 'continuePrimaryKey' in cursor is true
+PASS typeof cursor.continuePrimaryKey is "function"
+PASS 'advance' in cursor is true
+PASS typeof cursor.advance is "function"
+PASS 'update' in cursor is true
+PASS typeof cursor.update is "function"
+PASS 'delete' in cursor is true
+PASS typeof cursor.delete is "function"
+PASS cursor.key is 0
+PASS cursor.primaryKey is 0
+PASS cursor instanceof IDBCursorWithValue is true
+PASS 'value' in cursor is true
+PASS JSON.stringify(cursor.value) is "{\"indexOn\":\"a\"}"
+
+onStoreOpenKeyCursor():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor instanceof IDBCursor is true
+PASS 'key' in cursor is true
+PASS 'primaryKey' in cursor is true
+PASS 'continue' in cursor is true
+PASS typeof cursor.continue is "function"
+PASS 'continuePrimaryKey' in cursor is true
+PASS typeof cursor.continuePrimaryKey is "function"
+PASS 'advance' in cursor is true
+PASS typeof cursor.advance is "function"
+PASS 'update' in cursor is true
+PASS typeof cursor.update is "function"
+PASS 'delete' in cursor is true
+PASS typeof cursor.delete is "function"
+PASS cursor.key is 0
+PASS 'primaryKey' in cursor is true
+PASS cursor.primaryKey is 0
+PASS cursor instanceof IDBCursorWithValue is false
+PASS 'value' in cursor is false
+
+onIndexOpenCursor():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor instanceof IDBCursor is true
+PASS 'key' in cursor is true
+PASS 'primaryKey' in cursor is true
+PASS 'continue' in cursor is true
+PASS typeof cursor.continue is "function"
+PASS 'continuePrimaryKey' in cursor is true
+PASS typeof cursor.continuePrimaryKey is "function"
+PASS 'advance' in cursor is true
+PASS typeof cursor.advance is "function"
+PASS 'update' in cursor is true
+PASS typeof cursor.update is "function"
+PASS 'delete' in cursor is true
+PASS typeof cursor.delete is "function"
+PASS cursor.key is "a"
+PASS cursor.primaryKey is 0
+PASS cursor instanceof IDBCursorWithValue is true
+PASS 'value' in cursor is true
+PASS JSON.stringify(cursor.value) is "{\"indexOn\":\"a\"}"
+
+onIndexOpenKeyCursor():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor instanceof IDBCursor is true
+PASS 'key' in cursor is true
+PASS 'primaryKey' in cursor is true
+PASS 'continue' in cursor is true
+PASS typeof cursor.continue is "function"
+PASS 'continuePrimaryKey' in cursor is true
+PASS typeof cursor.continuePrimaryKey is "function"
+PASS 'advance' in cursor is true
+PASS typeof cursor.advance is "function"
+PASS 'update' in cursor is true
+PASS typeof cursor.update is "function"
+PASS 'delete' in cursor is true
+PASS typeof cursor.delete is "function"
+PASS cursor.key is "a"
+PASS cursor.primaryKey is 0
+PASS cursor instanceof IDBCursorWithValue is false
+PASS cursor.primaryKey is 0
+PASS 'value' in cursor is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-basics.html b/LayoutTests/storage/indexeddb/cursor-basics.html
new file mode 100644 (file)
index 0000000..ee5cc7f
--- /dev/null
@@ -0,0 +1,9 @@
+<html>
+<head>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+</head>
+<body>
+<script src="resources/cursor-basics.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/storage/indexeddb/cursor-cast-expected.txt b/LayoutTests/storage/indexeddb/cursor-cast-expected.txt
new file mode 100644 (file)
index 0000000..eb683dd
--- /dev/null
@@ -0,0 +1,32 @@
+Ensure cursor wrappers are created correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "cursor-cast.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+store.put(0, 0)
+
+verifyWrappers():
+db = event.target.result
+tx = db.transaction('store', 'readwrite')
+request = tx.objectStore('store').openCursor()
+
+onOpenCursorSuccess():
+cursor = event.target.result
+request = cursor.update(1)
+
+onUpdateSuccess():
+cursor = null
+PASS request.source.toString() is "[object IDBCursorWithValue]"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-cast.html b/LayoutTests/storage/indexeddb/cursor-cast.html
new file mode 100644 (file)
index 0000000..bd62a3b
--- /dev/null
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script>
+
+description("Ensure cursor wrappers are created correctly.");
+
+indexedDBTest(prepareDatabase, verifyWrappers);
+function prepareDatabase(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("store = db.createObjectStore('store')");
+    evalAndLog("store.put(0, 0)");
+}
+
+function verifyWrappers(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("tx = db.transaction('store', 'readwrite')");
+    evalAndLog("request = tx.objectStore('store').openCursor()");
+
+    request.onsuccess = function onOpenCursorSuccess(evt) {
+        preamble(evt);
+        evalAndLog("cursor = event.target.result");
+        evalAndLog("request = cursor.update(1)");
+
+        request.onsuccess = function onUpdateSuccess(evt) {
+            preamble(evt);
+            evalAndLog("cursor = null");
+            gc();
+            gc(); // FIXME: Shouldn't need to call twice. http://crbug.com/288072
+            setTimeout(checkCursorType, 0);
+        };
+    };
+}
+
+function checkCursorType() {
+    shouldBeEqualToString("request.source.toString()", "[object IDBCursorWithValue]");
+    finishJSTest();
+}
+
+</script>
index 09f54d0..218ee22 100644 (file)
@@ -30,6 +30,7 @@ Expecting exception from cursor.continue(-1)
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position.
 request = store.openCursor(IDBKeyRange.bound(-Infinity, Infinity), 'prev')
 cursor = request.result
 PASS cursor is non-null.
@@ -39,6 +40,7 @@ Expecting exception from cursor.continue(11)
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is greater than or equal to this cursor's position.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 72c299c..1b172ca 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-continue-dir.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index dea78d0..1a86274 100644 (file)
@@ -81,6 +81,7 @@ Expecting exception from event.target.result.continue(1)
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position.
 
 indexObject.openKeyCursor(null, 'next')
 PASS event.target.result.primaryKey is 0
@@ -90,6 +91,7 @@ Expecting exception from event.target.result.continue(3.14159)
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position.
 
 indexObject.openKeyCursor(null, 'prev')
 PASS event.target.result.primaryKey is 17
@@ -99,6 +101,7 @@ Expecting exception from event.target.result.continue('A bit3')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is greater than or equal to this cursor's position.
 
 indexObject.openKeyCursor(null, 'prev')
 PASS event.target.result.primaryKey is 17
@@ -109,10 +112,12 @@ Expecting exception from event.target.result.continue('A bit2')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is greater than or equal to this cursor's position.
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'TransactionInactiveError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The transaction has finished.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index eadfa5f..3ad34e3 100644 (file)
@@ -54,6 +54,7 @@ PASS cursor.value.x is 0
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 0
 PASS cursor.value.x is 0
 self.continueValue++;
@@ -68,6 +69,7 @@ PASS cursor.value.x is 1
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 1
 PASS cursor.value.x is 1
 self.continueValue++;
@@ -82,6 +84,7 @@ PASS cursor.value.x is 2
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 2
 PASS cursor.value.x is 2
 self.continueValue++;
@@ -96,6 +99,7 @@ PASS cursor.value.x is 3
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 3
 PASS cursor.value.x is 3
 self.continueValue++;
@@ -110,6 +114,7 @@ PASS cursor.value.x is 4
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 4
 PASS cursor.value.x is 4
 self.continueValue++;
@@ -124,6 +129,7 @@ PASS cursor.value.x is 5
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 5
 PASS cursor.value.x is 5
 self.continueValue++;
@@ -138,6 +144,7 @@ PASS cursor.value.x is 6
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 6
 PASS cursor.value.x is 6
 self.continueValue++;
@@ -152,6 +159,7 @@ PASS cursor.value.x is 7
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 7
 PASS cursor.value.x is 7
 self.continueValue++;
@@ -166,6 +174,7 @@ PASS cursor.value.x is 8
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 8
 PASS cursor.value.x is 8
 self.continueValue++;
@@ -180,6 +189,7 @@ PASS cursor.value.x is 9
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 9
 PASS cursor.value.x is 9
 self.continueValue++;
@@ -194,6 +204,7 @@ PASS cursor.value.x is 10
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 10
 PASS cursor.value.x is 10
 self.continueValue++;
@@ -208,6 +219,7 @@ PASS cursor.value.x is 11
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 11
 PASS cursor.value.x is 11
 self.continueValue++;
@@ -222,6 +234,7 @@ PASS cursor.value.x is 12
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 12
 PASS cursor.value.x is 12
 self.continueValue++;
@@ -236,6 +249,7 @@ PASS cursor.value.x is 13
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 13
 PASS cursor.value.x is 13
 self.continueValue++;
@@ -250,6 +264,7 @@ PASS cursor.value.x is 14
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 14
 PASS cursor.value.x is 14
 self.continueValue++;
@@ -264,6 +279,7 @@ PASS cursor.value.x is 15
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 15
 PASS cursor.value.x is 15
 self.continueValue++;
@@ -278,6 +294,7 @@ PASS cursor.value.x is 16
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 16
 PASS cursor.value.x is 16
 self.continueValue++;
@@ -292,6 +309,7 @@ PASS cursor.value.x is 17
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 17
 PASS cursor.value.x is 17
 self.continueValue++;
@@ -306,6 +324,7 @@ PASS cursor.value.x is 18
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 18
 PASS cursor.value.x is 18
 self.continueValue++;
@@ -320,6 +339,7 @@ PASS cursor.value.x is 19
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 19
 PASS cursor.value.x is 19
 self.continueValue++;
@@ -334,6 +354,7 @@ PASS cursor.value.x is 20
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 20
 PASS cursor.value.x is 20
 self.continueValue++;
@@ -348,6 +369,7 @@ PASS cursor.value.x is 21
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 21
 PASS cursor.value.x is 21
 self.continueValue++;
@@ -362,6 +384,7 @@ PASS cursor.value.x is 22
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 22
 PASS cursor.value.x is 22
 self.continueValue++;
@@ -376,6 +399,7 @@ PASS cursor.value.x is 23
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 23
 PASS cursor.value.x is 23
 self.continueValue++;
@@ -390,6 +414,7 @@ PASS cursor.value.x is 24
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 24
 PASS cursor.value.x is 24
 self.continueValue++;
@@ -411,6 +436,7 @@ PASS cursor.value.x is 0
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 0
 PASS cursor.value.x is 0
 self.continueValue++;
@@ -424,6 +450,7 @@ PASS cursor.value.x is 1
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 1
 PASS cursor.value.x is 1
 self.continueValue++;
@@ -437,6 +464,7 @@ PASS cursor.value.x is 2
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 2
 PASS cursor.value.x is 2
 self.continueValue++;
@@ -450,6 +478,7 @@ PASS cursor.value.x is 3
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 3
 PASS cursor.value.x is 3
 self.continueValue++;
@@ -463,6 +492,7 @@ PASS cursor.value.x is 4
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 4
 PASS cursor.value.x is 4
 self.continueValue++;
@@ -476,6 +506,7 @@ PASS cursor.value.x is 5
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 5
 PASS cursor.value.x is 5
 self.continueValue++;
@@ -489,6 +520,7 @@ PASS cursor.value.x is 6
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 6
 PASS cursor.value.x is 6
 self.continueValue++;
@@ -502,6 +534,7 @@ PASS cursor.value.x is 7
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 7
 PASS cursor.value.x is 7
 self.continueValue++;
@@ -515,6 +548,7 @@ PASS cursor.value.x is 8
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 8
 PASS cursor.value.x is 8
 self.continueValue++;
@@ -528,6 +562,7 @@ PASS cursor.value.x is 9
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 9
 PASS cursor.value.x is 9
 self.continueValue++;
@@ -541,6 +576,7 @@ PASS cursor.value.x is 10
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 10
 PASS cursor.value.x is 10
 self.continueValue++;
@@ -554,6 +590,7 @@ PASS cursor.value.x is 11
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 11
 PASS cursor.value.x is 11
 self.continueValue++;
@@ -567,6 +604,7 @@ PASS cursor.value.x is 12
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 12
 PASS cursor.value.x is 12
 self.continueValue++;
@@ -580,6 +618,7 @@ PASS cursor.value.x is 13
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 13
 PASS cursor.value.x is 13
 self.continueValue++;
@@ -593,6 +632,7 @@ PASS cursor.value.x is 14
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 14
 PASS cursor.value.x is 14
 self.continueValue++;
@@ -606,6 +646,7 @@ PASS cursor.value.x is 15
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 15
 PASS cursor.value.x is 15
 self.continueValue++;
@@ -619,6 +660,7 @@ PASS cursor.value.x is 16
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 16
 PASS cursor.value.x is 16
 self.continueValue++;
@@ -632,6 +674,7 @@ PASS cursor.value.x is 17
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 17
 PASS cursor.value.x is 17
 self.continueValue++;
@@ -645,6 +688,7 @@ PASS cursor.value.x is 18
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 18
 PASS cursor.value.x is 18
 self.continueValue++;
@@ -658,6 +702,7 @@ PASS cursor.value.x is 19
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 19
 PASS cursor.value.x is 19
 self.continueValue++;
@@ -671,6 +716,7 @@ PASS cursor.value.x is 20
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 20
 PASS cursor.value.x is 20
 self.continueValue++;
@@ -684,6 +730,7 @@ PASS cursor.value.x is 21
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 21
 PASS cursor.value.x is 21
 self.continueValue++;
@@ -697,6 +744,7 @@ PASS cursor.value.x is 22
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 22
 PASS cursor.value.x is 22
 self.continueValue++;
@@ -710,6 +758,7 @@ PASS cursor.value.x is 23
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 23
 PASS cursor.value.x is 23
 self.continueValue++;
@@ -723,6 +772,7 @@ PASS cursor.value.x is 24
 Expecting exception from cursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 PASS cursor.key is 24
 PASS cursor.value.x is 24
 self.continueValue++;
@@ -749,6 +799,7 @@ cursor.continue()
 Expecting exception from cursor.update({ x: 100 + self.continueValue})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 cursor = event.target.result
 cursor.update({ x: 100 + self.continueValue })
 cursor.continue()
@@ -757,6 +808,7 @@ cursor.continue()
 Expecting exception from cursor.delete()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 cursor = event.target.result
 cursor.update({ x: 100 + self.continueValue })
 cursor.continue()
@@ -808,6 +860,7 @@ cursor.continue()
 Expecting exception from cursor.update({ x: 100 + self.continueValue})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 cursor = event.target.result
 cursor.update({ x: 100 + self.continueValue })
 cursor.continue()
@@ -838,6 +891,7 @@ cursor.continue()
 Expecting exception from cursor.update({ x: 100 + self.continueValue})
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 cursor = event.target.result
 cursor.update({ x: 100 + self.continueValue })
 cursor.continue()
@@ -878,6 +932,7 @@ cursor.continue()
 Expecting exception from cursor.delete()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 cursor = event.target.result
 PASS successfullyParsed is true
 
index 1731d75..5ea24f2 100644 (file)
@@ -1,11 +1,10 @@
 <!DOCTYPE html>
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-continue-validity.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 5c6d79f..41b3bbf 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-continue.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
diff --git a/LayoutTests/storage/indexeddb/cursor-continueprimarykey-expected.txt b/LayoutTests/storage/indexeddb/cursor-continueprimarykey-expected.txt
new file mode 100644 (file)
index 0000000..47bdc85
--- /dev/null
@@ -0,0 +1,174 @@
+Test IndexedDB's IDBCursor.continue() with a primary key parameter.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "cursor-continueprimarykey.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+index = store.createIndex('index', 'indexKey', {multiEntry: true})
+store.put({indexKey: ['a', 'b']}, 1)
+store.put({indexKey: ['a', 'b']}, 2)
+store.put({indexKey: ['a', 'b']}, 3)
+store.put({indexKey: ['b']}, 4)
+checking index structure...
+
+index key  primary key
+=========  ===========
+a          1
+a          2
+a          3
+b          1
+b          2
+b          3
+b          4
+
+Test case: cursor.continue()
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continue()
+PASS cursor.key is "a"
+PASS cursor.primaryKey is 2
+
+Test case: cursor.continue('a')
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continue('a')
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The parameter is less than or equal to this cursor's position.
+
+Test case: cursor.continue('b')
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continue('b')
+PASS cursor.key is "b"
+PASS cursor.primaryKey is 1
+
+Test case: cursor.continue('c')
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continue('c')
+PASS cursor is null
+
+Test case: cursor.continuePrimaryKey('a', 3)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('a', 3)
+PASS cursor.key is "a"
+PASS cursor.primaryKey is 3
+
+Test case: cursor.continuePrimaryKey('a', 4)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('a', 4)
+PASS cursor.key is "b"
+PASS cursor.primaryKey is 1
+
+Test case: cursor.continuePrimaryKey('b', 1)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('b', 1)
+PASS cursor.key is "b"
+PASS cursor.primaryKey is 1
+
+Test case: cursor.continuePrimaryKey('b', 4)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('b', 4)
+PASS cursor.key is "b"
+PASS cursor.primaryKey is 4
+
+Test case: cursor.continuePrimaryKey('b', 5)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('b', 5)
+PASS cursor is null
+
+Test case: cursor.continuePrimaryKey('c', 1)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+cursor.continuePrimaryKey('c', 1)
+PASS cursor is null
+
+Test case: cursor.continuePrimaryKey(null, 1)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey(null, 1)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+Test case: cursor.continuePrimaryKey(null, 2)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey(null, 2)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+Test case: cursor.continuePrimaryKey(null, 3)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey(null, 3)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+Test case: cursor.continuePrimaryKey(null, 4)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey(null, 4)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+Test case: cursor.continuePrimaryKey(null, 5)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey(null, 5)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+Test case: cursor.continuePrimaryKey('a', null)
+
+tx = db.transaction('store')
+request = tx.objectStore('store').index('index').openCursor()
+Expecting exception from cursor.continuePrimaryKey('a', null)
+PASS Exception was thrown.
+PASS code is 0
+PASS ename is 'DataError'
+Exception message: Failed to execute 'continuePrimaryKey' on 'IDBCursor': The parameter is not a valid key.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-continueprimarykey.html b/LayoutTests/storage/indexeddb/cursor-continueprimarykey.html
new file mode 100644 (file)
index 0000000..c22e56c
--- /dev/null
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script src="resources/cursor-continueprimarykey.js"></script>
index 329db9c..92a38e1 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-delete.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 34a086c..efd44d2 100644 (file)
@@ -49,22 +49,27 @@ Expecting exception from savedCursor.update('value')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 Expecting exception from savedCursor.advance(1)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 Expecting exception from savedCursor.continue()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 Expecting exception from savedCursor.continue('key')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 Expecting exception from savedCursor.delete()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor is being iterated or has iterated past its end.
 
 PASS successfullyParsed is true
 
index d709bc1..b655348 100644 (file)
@@ -1,12 +1,11 @@
 <!DOCTYPE html>
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-finished.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
 
index 49cb9fa..7307266 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-inconsistency.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e802ff2..b5a9b61 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-index-delete.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e553ba8..e1845fa 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-key-order.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
diff --git a/LayoutTests/storage/indexeddb/cursor-leak-expected.txt b/LayoutTests/storage/indexeddb/cursor-leak-expected.txt
new file mode 100644 (file)
index 0000000..0790c52
--- /dev/null
@@ -0,0 +1,15 @@
+Verify that that cursors weakly hold script value properties
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "cursor-leak.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+PASS cursorObserver.wasCollected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-leak.html b/LayoutTests/storage/indexeddb/cursor-leak.html
new file mode 100644 (file)
index 0000000..abeabf8
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script>
+
+description("Verify that that cursors weakly hold script value properties");
+
+if (window.internals) {
+    indexedDBTest(prepareDatabase, onOpen);
+} else {
+    testFailed('This test requires access to the Internals object');
+    finishJSTest();
+}
+
+function prepareDatabase(evt)
+{
+    db = event.target.result;
+    store = db.createObjectStore('store');
+    store.put({value: 'value'}, ['key']);
+}
+
+function onOpen(evt)
+{
+    // evalAndLog() is not used as that generates new DOM nodes.
+
+    db = evt.target.result;
+    tx = db.transaction('store');
+    store = tx.objectStore('store');
+    cursorRequest = store.openCursor();
+    cursorRequest.onsuccess = function() {
+        cursor = cursorRequest.result;
+    };
+    tx.oncomplete = function() {
+        db.close();
+
+        // Try and induce a leak by a reference cycle from DOM to V8 and back.
+        // If the v8 value of cursor.key (etc) is only held by the cursor's
+        // V8 wrapper then there will be no leak.
+        cursor.key.cursor = cursor;
+        cursor.primaryKey.cursor = cursor;
+        cursor.value.cursor = cursor;
+
+        cursorObserver = internals.observeGC(cursor);
+
+        cursorRequest = null;
+        cursor = null;
+
+        gc();
+
+        shouldBeTrue("cursorObserver.wasCollected");
+        finishJSTest();
+    };
+}
+
+
+</script>
index 1a4debc..c721b0d 100644 (file)
@@ -49,6 +49,39 @@ PASS event.target.result.direction is "prev"
 store.openCursor(IDBKeyRange.only(0), 'prevunique')
 PASS event.target.result is non-null.
 PASS event.target.result.direction is "prevunique"
+store.openKeyCursor()
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "next"
+store.openKeyCursor(0)
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "next"
+store.openKeyCursor(0, 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "next"
+store.openKeyCursor(0, 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "nextunique"
+store.openKeyCursor(0, 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "prev"
+store.openKeyCursor(0, 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "prevunique"
+store.openKeyCursor(IDBKeyRange.only(0))
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "next"
+store.openKeyCursor(IDBKeyRange.only(0), 'next')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "next"
+store.openKeyCursor(IDBKeyRange.only(0), 'nextunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "nextunique"
+store.openKeyCursor(IDBKeyRange.only(0), 'prev')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "prev"
+store.openKeyCursor(IDBKeyRange.only(0), 'prevunique')
+PASS event.target.result is non-null.
+PASS event.target.result.direction is "prevunique"
 index.openCursor()
 PASS event.target.result is non-null.
 PASS event.target.result.direction is "next"
index 0500b74..e159247 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 <script>
 description("Validate the overloads of IDBObjectStore.openCursor(), IDBIndex.openCursor() and IDBIndex.openKeyCursor().");
@@ -35,6 +35,19 @@ function verifyOverloads()
     checkCursorDirection("store.openCursor(IDBKeyRange.only(0), 'prev')", "prev");
     checkCursorDirection("store.openCursor(IDBKeyRange.only(0), 'prevunique')", "prevunique");
 
+    checkCursorDirection("store.openKeyCursor()", "next");
+    checkCursorDirection("store.openKeyCursor(0)", "next");
+    checkCursorDirection("store.openKeyCursor(0, 'next')", "next");
+    checkCursorDirection("store.openKeyCursor(0, 'nextunique')", "nextunique");
+    checkCursorDirection("store.openKeyCursor(0, 'prev')", "prev");
+    checkCursorDirection("store.openKeyCursor(0, 'prevunique')", "prevunique");
+
+    checkCursorDirection("store.openKeyCursor(IDBKeyRange.only(0))", "next");
+    checkCursorDirection("store.openKeyCursor(IDBKeyRange.only(0), 'next')", "next");
+    checkCursorDirection("store.openKeyCursor(IDBKeyRange.only(0), 'nextunique')", "nextunique");
+    checkCursorDirection("store.openKeyCursor(IDBKeyRange.only(0), 'prev')", "prev");
+    checkCursorDirection("store.openKeyCursor(IDBKeyRange.only(0), 'prevunique')", "prevunique");
+
     checkCursorDirection("index.openCursor()", "next");
     checkCursorDirection("index.openCursor(0)", "next");
     checkCursorDirection("index.openCursor(0, 'next')", "next");
@@ -76,4 +89,3 @@ function checkCursorDirection(statement, direction)
 }
 
 </script>
-<script src="../../resources/js-test-post.js"></script>
index dbaaf66..da27e35 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-prev-no-duplicate.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index ef973b0..369df5f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-primary-key-order.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index fefa8c1..a297fa0 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-properties.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
diff --git a/LayoutTests/storage/indexeddb/cursor-request-cycle-expected.txt b/LayoutTests/storage/indexeddb/cursor-request-cycle-expected.txt
new file mode 100644 (file)
index 0000000..99c7205
--- /dev/null
@@ -0,0 +1,63 @@
+Verify that that cursors weakly hold request, and work if request is GC'd
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "cursor-request-cycle.html"
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+prepareDatabase():
+db = event.target.result
+store = db.createObjectStore('store')
+
+onOpen():
+db = event.target.result
+tx = db.transaction('store')
+store = tx.objectStore('store')
+cursorRequest = store.openCursor()
+otherRequest = store.get(0)
+
+openCursorRequestSuccess():
+Result will be checked later, to ensure that lazy access is safe
+
+otherRequestSuccess():
+Verify that the request's result can be accessed lazily:
+gc()
+cursor = cursorRequest.result
+PASS cursor is non-null.
+PASS cursor.key is "key1"
+PASS cursor.value is "value1"
+cursorRequest.extra = 123
+cursor.extra = 456
+Ensure request is not released if cursor is still around.
+cursorRequest = null
+gc()
+PASS cursorRequestObservation.wasCollected is false
+cursor.continue()
+cursor = null
+gc()
+PASS cursorObservation.wasCollected is false
+finalRequest = store.get(0)
+
+cursorContinueSuccess():
+cursor = event.target.result
+PASS cursor is non-null.
+PASS cursor.key is "key2"
+PASS cursor.value is "value2"
+PASS event.target.extra is 123
+PASS cursor.extra is 456
+
+finalRequestSuccess():
+PASS cursor.key is "key2"
+PASS cursor.value is "value2"
+cursor = null
+gc()
+PASS cursorRequestObservation.wasCollected is true
+PASS cursorObservation.wasCollected is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/storage/indexeddb/cursor-request-cycle.html b/LayoutTests/storage/indexeddb/cursor-request-cycle.html
new file mode 100644 (file)
index 0000000..4f65843
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<script src="../../resources/js-test.js"></script>
+<script src="resources/shared.js"></script>
+<script>
+
+description("Verify that that cursors weakly hold request, and work if request is GC'd");
+
+indexedDBTest(prepareDatabase, onOpen);
+
+function prepareDatabase(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("store = db.createObjectStore('store')");
+    store.put("value1", "key1");
+    store.put("value2", "key2");
+}
+
+function onOpen(evt)
+{
+    preamble(evt);
+    evalAndLog("db = event.target.result");
+    evalAndLog("tx = db.transaction('store')");
+    evalAndLog("store = tx.objectStore('store')");
+
+    evalAndLog("cursorRequest = store.openCursor()");
+    cursorRequest.onsuccess = function openCursorRequestSuccess(evt) {
+        preamble(evt);
+        debug("Result will be checked later, to ensure that lazy access is safe");
+    };
+
+    evalAndLog("otherRequest = store.get(0)");
+    otherRequest.onsuccess = function otherRequestSuccess(evt) {
+        preamble(evt);
+
+        debug("Verify that the request's result can be accessed lazily:");
+        evalAndLog("gc()");
+
+        evalAndLog("cursor = cursorRequest.result");
+        shouldBeNonNull("cursor");
+        shouldBeEqualToString("cursor.key", "key1");
+        shouldBeEqualToString("cursor.value", "value1");
+        evalAndLog("cursorRequest.extra = 123");
+        evalAndLog("cursor.extra = 456");
+
+        // Assign a new handler to inspect the request and cursor indirectly.
+        cursorRequest.onsuccess = function cursorContinueSuccess(evt) {
+            preamble(evt);
+            evalAndLog("cursor = event.target.result");
+            shouldBeNonNull("cursor");
+            shouldBeEqualToString("cursor.key", "key2");
+            shouldBeEqualToString("cursor.value", "value2");
+            shouldBe("event.target.extra", "123");
+            shouldBe("cursor.extra", "456");
+        };
+
+        debug("Ensure request is not released if cursor is still around.");
+        cursorRequestObservation = internals.observeGC(cursorRequest);
+        evalAndLog("cursorRequest = null");
+        evalAndLog("gc()");
+        shouldBeFalse("cursorRequestObservation.wasCollected");
+
+        evalAndLog("cursor.continue()");
+
+        cursorObservation = internals.observeGC(cursor);
+        evalAndLog("cursor = null");
+        evalAndLog("gc()");
+        shouldBeFalse("cursorObservation.wasCollected");
+
+        evalAndLog("finalRequest = store.get(0)");
+        finalRequest.onsuccess = function finalRequestSuccess(evt) {
+            preamble(evt);
+            shouldBeEqualToString("cursor.key", "key2");
+            shouldBeEqualToString("cursor.value", "value2");
+
+            cursorObservation = internals.observeGC(cursor);
+            evalAndLog("cursor = null");
+            evalAndLog("gc()");
+            shouldBeTrue("cursorRequestObservation.wasCollected");
+            shouldBeTrue("cursorObservation.wasCollected");
+        };
+    };
+
+    tx.oncomplete = finishJSTest;
+}
+
+
+</script>
index 36c084a..a4d0e0f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-reverse-bug.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e2640e7..9475ce7 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-skip-deleted.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index d9b661c..5e7e025 100644 (file)
@@ -110,6 +110,7 @@ Expecting exception from event.target.result.update({id: 100 + counter, number:
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
@@ -117,6 +118,7 @@ Expecting exception from event.target.result.update({id: 100 + counter, number:
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
@@ -124,6 +126,7 @@ Expecting exception from event.target.result.update({id: 100 + counter, number:
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
@@ -131,6 +134,7 @@ Expecting exception from event.target.result.update({id: 100 + counter, number:
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'DataError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor's effective key.
 event.target.result.update({id: counter, number: 100 + counter++})
 event.target.source.continue()
 keyPathUpdateCursor()
@@ -166,6 +170,7 @@ Expecting exception from event.target.result.update({id: counter, number: counte
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
 event.target.result.continue();
 keyCursor()
 PASS event.target.result.key is counter + 100
@@ -174,6 +179,7 @@ Expecting exception from event.target.result.update({id: counter, number: counte
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
 event.target.result.continue();
 keyCursor()
 PASS event.target.result.key is counter + 100
@@ -182,6 +188,7 @@ Expecting exception from event.target.result.update({id: counter, number: counte
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
 event.target.result.continue();
 keyCursor()
 PASS event.target.result.key is counter + 100
@@ -190,6 +197,7 @@ Expecting exception from event.target.result.update({id: counter, number: counte
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor is a key cursor.
 event.target.result.continue();
 keyCursor()
 PASS counter is 5
@@ -202,24 +210,28 @@ Expecting exception from cursor.update('myUpdatedValue')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
 cursor.continue()
 attemptUpdate()
 Expecting exception from cursor.update('myUpdatedValue')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
 cursor.continue()
 attemptUpdate()
 Expecting exception from cursor.update('myUpdatedValue')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
 cursor.continue()
 attemptUpdate()
 Expecting exception from cursor.update('myUpdatedValue')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'ReadOnlyError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The record may not be updated inside a read-only transaction.
 cursor.continue()
 attemptUpdate()
 transactionComplete()
index 624f7c1..6bb836c 100644 (file)
@@ -24,7 +24,7 @@ request = objectStore.add('foo', keys[i]);
 request = objectStore.add('foo', keys[i]);
 request = objectStore.openCursor();
 cursor = event.target.result;
-PASS cursor.update(); threw exception TypeError: Not enough arguments.
+PASS cursor.update(); threw exception TypeError: Failed to execute 'update' on 'IDBCursor': 1 argument required, but only 0 present..
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 887705d..798ba40 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-update-value-argument-required.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e7b5558..43e2389 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-update.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 2edb94c..1470f92 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/cursor-value.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 7b73985..91bfa7e 100644 (file)
@@ -9,6 +9,7 @@ dbname = "data-corruption.html"
 indexedDB.deleteDatabase(dbname)
 indexedDB.open(dbname)
 setVersionSuccess():
+PASS event.dataLoss is "none"
 trans = event.target.transaction
 PASS trans is non-null.
 db.createObjectStore('storeName')
index 9c4ab0d..69ac4ea 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/data-corruption.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e9eabb1..b74f1d7 100644 (file)
@@ -13,6 +13,7 @@ Expecting exception from db.transaction("doesntExist")
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': A version change transaction is running.
 PASS db.version is 1
 PASS db.name is "database-basics.html"
 PASS db.objectStoreNames is []
@@ -52,6 +53,7 @@ Expecting exception from db.transaction('test123')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 Call twice, make sure it's harmless
 db.close()
 PASS successfullyParsed is true
index 244bee2..32e7a8f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-basics.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 60281ed..af2ee2b 100644 (file)
@@ -32,6 +32,7 @@ Expecting exception from trans3 = connection.transaction('store')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 
 NOTE: Once the connection is closed, this can unblock the steps for deleting a database, which waits for connections to a given database to be closed before continuing.
 
index 3a8881a..05a9ca7 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-close.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 87f8225..0063724 100644 (file)
@@ -20,6 +20,7 @@ Expecting exception from connection.transaction('store')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 "2. Wait for all transactions created using connection to complete. Once they are complete, connection is closed."
 transaction.oncomplete = testIDBDatabaseName
 
@@ -42,6 +43,7 @@ Expecting exception from connection.transaction('store')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'transaction' on 'IDBDatabase': The database connection is closing.
 
 "versionchange" transaction steps:
 "Fire a versionchange event at each object in openDatabases that is open. The event must not be fired on objects which has the closePending flag set."
index 3688a01..0f0e22f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-closepending-flag.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 3fe84a0..341ef90 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-deletepending-flag.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index eff5b64..0ed44ed 100644 (file)
@@ -5,7 +5,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
 
-PASS indexedDB.open(); threw exception TypeError: Not enough arguments.
+PASS indexedDB.open(); threw exception TypeError: Failed to execute 'open' on 'IDBFactory': 1 argument required, but only 0 present..
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f1a3743..1478240 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-name-undefined.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 4c52522..8138d27 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-odd-names.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 804fcf7..5b2c73b 100644 (file)
@@ -28,7 +28,7 @@ event.target.close()
 sawVersionChangeEvent = true
 
 onBlocked():
-FIXME: Blocked event shouldn't fire. http://wkbug.com/71130
+FIXME: Blocked event shouldn't fire. http://crbug.com/100123
 
 openAgainSuccess():
 PASS sawVersionChangeEvent is true
index df598bc..6990659 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/database-wrapper.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 8f3b72b..c5ca952 100644 (file)
@@ -9,7 +9,6 @@ dbname = "delete-closed-database-object.html"
 indexedDB.deleteDatabase(dbname)
 indexedDB.open(dbname)
 db.close()
-We can't specify a version here due to http://wkbug.com/102716
 indexedDB.open(dbname)
 Dropping references to new connection.
 gc()
index 2cdf85e..75a5613 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/delete-closed-database-object.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 17c4450..057d875 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/delete-in-upgradeneeded-close-in-open-success.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 1552567..c2e07a7 100644 (file)
@@ -33,7 +33,7 @@ sawDeleteBlocked = true
 
 deleteSuccessCallback():
 PASS sawVersionChange is true
-FIXME: Blocked events shouldn't fire if connections close in versionchange handler. http://wkbug.com/71130
+FIXME: Blocked events shouldn't fire if connections close in versionchange handler. http://crbug.com/100123
 FAIL sawDeleteBlocked should be false. Was true.
 PASS sawUpgradeNeeded is true
 PASS successfullyParsed is true
index eee655c..0727c8d 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/delete-in-upgradeneeded-close-in-versionchange.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index a5ae1a2..44ebfff 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/delete-range.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index f80f3e9..15c9196 100644 (file)
@@ -27,6 +27,7 @@ Expecting exception from store.index('index')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'index' on 'IDBObjectStore': The specified index was not found.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 9c41090..81af3cd 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 <script>
 
@@ -39,4 +39,3 @@ function onSecondUpgradeNeeded(evt)
 }
 
 </script>
-<script src=../../resources/js-test-post.js></script>
index 87a1db6..ec1cccc 100644 (file)
@@ -13,12 +13,14 @@ Expecting exception from objectStore.deleteIndex('first')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
-PASS objectStore.deleteIndex() threw exception TypeError: Not enough arguments.
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.
+PASS objectStore.deleteIndex() threw exception TypeError: Failed to execute 'deleteIndex' on 'IDBObjectStore': 1 argument required, but only 0 present..
 index = objectStore.createIndex('first', 'first');
 Expecting exception from objectStore.deleteIndex('FIRST')
 PASS Exception was thrown.
 PASS code is DOMException.NOT_FOUND_ERR
 PASS ename is 'NotFoundError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The specified index was not found.
 index = objectStore.createIndex('second', 'second');
 returnValue = objectStore.deleteIndex('first');
 PASS returnValue is undefined
@@ -26,10 +28,12 @@ Expecting exception from db.createObjectStore('bar');
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction.
 Expecting exception from objectStore.deleteIndex('second')
 PASS Exception was thrown.
 PASS code is 0
 PASS ename is 'TransactionInactiveError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The transaction has finished.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index d46760a..cc76cf2 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deleteIndex.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index a7a9580..e87c257 100644 (file)
@@ -8,7 +8,7 @@ indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.
 dbname = "deleteObjectStore-name-argument-required.html"
 indexedDB.deleteDatabase(dbname)
 indexedDB.open(dbname)
-PASS db.deleteObjectStore(); threw exception TypeError: Not enough arguments.
+PASS db.deleteObjectStore(); threw exception TypeError: Failed to execute 'deleteObjectStore' on 'IDBDatabase': 1 argument required, but only 0 present..
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 61716d6..c2aba89 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deleteObjectStore-name-argument-required.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index f15d8a5..e7226e4 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deleteObjectStore-null-name.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index f1e9418..bf0eafa 100644 (file)
@@ -9,154 +9,395 @@ dbname = "deleted-objects.html"
 indexedDB.deleteDatabase(dbname)
 indexedDB.open(dbname)
 
+testStore():
 deletedStore = connection.createObjectStore('deletedStore')
-store = connection.createObjectStore('store')
-deletedIndex = store.createIndex('deletedIndex', 'path')
-
 connection.deleteObjectStore('deletedStore')
-store.deleteIndex('deletedIndex')
 
 Expecting exception from deletedStore.put(0, 0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'put' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.add(0, 0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'add' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.delete(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.delete(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.get(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.get(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.clear()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'clear' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.openCursor()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.openCursor(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.openCursor(0, 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.openCursor(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.openCursor(IDBKeyRange.only(0), 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBObjectStore': The object store has been deleted.
+Expecting exception from deletedStore.openKeyCursor()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
+Expecting exception from deletedStore.openKeyCursor(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
+Expecting exception from deletedStore.openKeyCursor(0, 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
+Expecting exception from deletedStore.openKeyCursor(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
+Expecting exception from deletedStore.openKeyCursor(IDBKeyRange.only(0), 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.createIndex('name', 'path')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'createIndex' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.index('name')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'index' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.deleteIndex('name')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'deleteIndex' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.count()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.count(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBObjectStore': The object store has been deleted.
 Expecting exception from deletedStore.count(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBObjectStore': The object store has been deleted.
+
+testIndex():
+store = connection.createObjectStore('store')
+deletedIndex = store.createIndex('deletedIndex', 'path')
+store.deleteIndex('deletedIndex')
 
 Expecting exception from deletedIndex.openCursor()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openCursor(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openCursor(0, 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openCursor(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openCursor(IDBKeyRange.only(0), 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openKeyCursor()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openKeyCursor(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openKeyCursor(0, 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openKeyCursor(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.openKeyCursor(IDBKeyRange.only(0), 'next')
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.get(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.get(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.getKey(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'getKey' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.getKey(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'getKey' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.count()
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.count(0)
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
 Expecting exception from deletedIndex.count(IDBKeyRange.only(0))
 PASS Exception was thrown.
 PASS code is DOMException.INVALID_STATE_ERR
 PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
+
+testTransitiveDeletion():
+deletedStore = connection.createObjectStore('deletedStore')
+indexOfDeletedStore = deletedStore.createIndex('index', 'path')
+connection.deleteObjectStore('deletedStore')
+
+Expecting exception from indexOfDeletedStore.openCursor()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openCursor(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openCursor(0, 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openCursor(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openCursor(IDBKeyRange.only(0), 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openKeyCursor()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openKeyCursor(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openKeyCursor(0, 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openKeyCursor(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.openKeyCursor(IDBKeyRange.only(0), 'next')
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'openKeyCursor' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.get(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.get(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'get' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.getKey(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'getKey' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.getKey(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'getKey' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.count()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.count(0)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
+Expecting exception from indexOfDeletedStore.count(IDBKeyRange.only(0))
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'count' on 'IDBIndex': The index or its object store has been deleted.
+
+testObjectStoreCursor():
+deletedStore = connection.createObjectStore('deletedStore')
+deletedStore.put(0, 0)
+deletedStore.openCursor()
+cursor = request.result
+PASS cursor.key is 0
+PASS cursor.value is 0
+connection.deleteObjectStore('deletedStore')
+Expecting exception from cursor.delete()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.update(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.continue()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.advance(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+
+testIndexCursor():
+store.put({id: 123}, 0)
+deletedIndex = store.createIndex('deletedIndex', 'id')
+deletedIndex.openCursor()
+cursor = request.result
+PASS cursor.key is 123
+PASS cursor.primaryKey is 0
+store.deleteIndex('deletedIndex')
+Expecting exception from cursor.delete()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.update(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.continue()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.advance(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+
+testIndexOfDeletedStoreCursor():
+deletedStore = connection.createObjectStore('deletedStore')
+deletedStore.put({id: 123}, 0)
+index = deletedStore.createIndex('index', 'id')
+index.openCursor()
+cursor = request.result
+PASS cursor.key is 123
+PASS cursor.primaryKey is 0
+connection.deleteObjectStore('deletedStore')
+Expecting exception from cursor.delete()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'delete' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.update(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'update' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.continue()
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'continue' on 'IDBCursor': The cursor's source or effective object store has been deleted.
+Expecting exception from cursor.advance(1)
+PASS Exception was thrown.
+PASS code is DOMException.INVALID_STATE_ERR
+PASS ename is 'InvalidStateError'
+Exception message: Failed to execute 'advance' on 'IDBCursor': The cursor's source or effective object store has been deleted.
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 371c246..9d47718 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deleted-objects.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 8379d55..15ad8b0 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deletedatabase-blocked.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 84dae1b..23f900c 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
-<script>startWorker('resources/deletedatabase-delayed-by-open-and-versionchange.js');</script>
-<script src="../../resources/js-test-post.js"></script>
+<script>worker = startWorker('resources/deletedatabase-delayed-by-open-and-versionchange.js');</script>
 </body>
 </html>
index 8a33f81..ae4f32e 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deletedatabase-delayed-by-open-and-versionchange.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index d77f66b..8bbb270 100644 (file)
@@ -48,15 +48,16 @@ deleteDatabaseOnBlocked():
 deleteDatabaseBlockedEventFired = true
 h1.close()
 
-deleteDatabaseOnSuccess():
-deleteDatabaseComplete = true
-
 h3OnUpgradeneeded():
 
 transactionOnComplete():
 versionChangeComplete = true
 
 h3OpenSuccess():
+h3.close()
+
+deleteDatabaseOnSuccess():
+deleteDatabaseComplete = true
 
 h4OpenSuccess():
 PASS setVersionBlockedEventFired is true
index 77f658e..5f5f9de 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deletedatabase-delayed-by-versionchange.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index c2d15c3..f80dd5d 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/deletedatabase-not-blocked.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index c20d6f5..67b4af6 100644 (file)
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 <script>
 description("Ensure deleteDatabase() can run concurrently with transactions in other databases");
@@ -31,4 +31,3 @@ function startTransaction() {
 }
 
 </script>
-<script src="../../resources/js-test-post.js"></script>
index 7b2fe84..ad0d02a 100644 (file)
@@ -1,6 +1,6 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
@@ -22,7 +22,7 @@ function holdConnection()
     debug("holdConnection():");
     debug("holding connection until versionchange event");
     debug("");
-    startWorker("resources/dont-commit-on-blocked-worker.js");
+    worker = startWorker("resources/dont-commit-on-blocked-worker.js");
 }
 
 function onVersionChange(e)
@@ -32,6 +32,5 @@ function onVersionChange(e)
 }
 
 </script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index fb59fb2..89cc00f 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/dont-wedge.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 9f150a1..3f5ab28 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/duplicates.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index fef6f49..d230e58 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/error-causes-abort-by-default.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index 7a8ba3a..001a87c 100644 (file)
@@ -8,6 +8,7 @@ indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.
 PASS 'IDBVersionChangeEvent' in self is true
 PASS 'oldVersion' in document.createEvent('IDBVersionChangeEvent') is true
 PASS 'newVersion' in document.createEvent('IDBVersionChangeEvent') is true
+PASS 'dataLoss' in document.createEvent('IDBVersionChangeEvent') is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8d3d718..010030b 100644 (file)
@@ -1,10 +1,9 @@
 <html>
 <head>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
 <body>
 <script src="resources/events.js"></script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index ef92c82..3c0ce95 100644 (file)
@@ -1,5 +1,5 @@
-CONSOLE MESSAGE: line 35: this exception is expected
-CONSOLE MESSAGE: line 35: this exception is expected
+CONSOLE ERROR: line 36: Uncaught this exception is expected
+CONSOLE ERROR: line 36: Uncaught this exception is expected
 Tes