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

Rubberstamped by Jer Noble.

Take two.

When I did this last night in r163923 the Mozilla tests outputted different results
because one of the logging functions they made had become more verbose.

This time we include the new test expectations for those tests, and update them to
reflect the different exception message outputted in WebKit vs Blink.

* 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/mozilla/add-twice-failure.html:
* storage/indexeddb/mozilla/autoincrement-indexes.html:
* storage/indexeddb/mozilla/bad-keypath-expected.txt:
* storage/indexeddb/mozilla/bad-keypath.html:
* storage/indexeddb/mozilla/clear-expected.txt:
* storage/indexeddb/mozilla/clear.html:
* storage/indexeddb/mozilla/create-index-unique.html:
* storage/indexeddb/mozilla/create-index-with-integer-keys.html:
* storage/indexeddb/mozilla/create-objectstore-basics-expected.txt:
* storage/indexeddb/mozilla/create-objectstore-basics.html:
* storage/indexeddb/mozilla/create-objectstore-null-name.html:
* storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html:
* storage/indexeddb/mozilla/cursor-mutation.html:
* storage/indexeddb/mozilla/cursor-update-updates-indexes.html:
* storage/indexeddb/mozilla/cursors-expected.txt:
* storage/indexeddb/mozilla/cursors.html:
* storage/indexeddb/mozilla/delete-result.html:
* storage/indexeddb/mozilla/event-source.html:
* storage/indexeddb/mozilla/global-data.html:
* storage/indexeddb/mozilla/index-prev-no-duplicate.html:
* storage/indexeddb/mozilla/indexes.html:
* storage/indexeddb/mozilla/key-requirements-delete-null-key-expected.txt:
* storage/indexeddb/mozilla/key-requirements-delete-null-key.html:
* storage/indexeddb/mozilla/key-requirements-inline-and-passed-expected.txt:
* storage/indexeddb/mozilla/key-requirements-inline-and-passed.html:
* storage/indexeddb/mozilla/key-requirements-put-no-key-expected.txt:
* storage/indexeddb/mozilla/key-requirements-put-no-key.html:
* storage/indexeddb/mozilla/key-requirements-put-null-key-expected.txt:
* storage/indexeddb/mozilla/key-requirements-put-null-key.html:
* storage/indexeddb/mozilla/key-requirements.html:
* storage/indexeddb/mozilla/object-cursors.html:
* storage/indexeddb/mozilla/object-identity.html:
* storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html:
* storage/indexeddb/mozilla/object-store-remove-values.html:
* storage/indexeddb/mozilla/objectstorenames.html:
* storage/indexeddb/mozilla/odd-result-order.html:
* storage/indexeddb/mozilla/open-database-null-name.html:
* storage/indexeddb/mozilla/put-get-values.html:
* storage/indexeddb/mozilla/readonly-transactions-expected.txt:
* storage/indexeddb/mozilla/readonly-transactions.html:
* storage/indexeddb/mozilla/readwrite-transactions.html:
* storage/indexeddb/mozilla/readyState.html:
* storage/indexeddb/mozilla/remove-index.html:
* storage/indexeddb/mozilla/remove-objectstore.html:
* storage/indexeddb/mozilla/resources/add-twice-failure.js:
* storage/indexeddb/mozilla/resources/autoincrement-indexes.js:
* storage/indexeddb/mozilla/resources/bad-keypath.js:
* storage/indexeddb/mozilla/resources/clear.js:
* storage/indexeddb/mozilla/resources/create-index-unique.js:
* storage/indexeddb/mozilla/resources/create-index-with-integer-keys.js:
* storage/indexeddb/mozilla/resources/create-objectstore-basics.js:
* storage/indexeddb/mozilla/resources/create-objectstore-null-name.js:
* storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js:
* storage/indexeddb/mozilla/resources/cursor-mutation.js:
* storage/indexeddb/mozilla/resources/cursor-update-updates-indexes.js:
* storage/indexeddb/mozilla/resources/cursors.js:
* storage/indexeddb/mozilla/resources/delete-result.js:
* storage/indexeddb/mozilla/resources/event-source.js:
* storage/indexeddb/mozilla/resources/global-data.js:
* storage/indexeddb/mozilla/resources/indexes.js:
* storage/indexeddb/mozilla/resources/key-requirements-delete-null-key.js:
* storage/indexeddb/mozilla/resources/key-requirements-inline-and-passed.js:
* storage/indexeddb/mozilla/resources/key-requirements-put-no-key.js:
* storage/indexeddb/mozilla/resources/key-requirements-put-null-key.js:
* storage/indexeddb/mozilla/resources/key-requirements.js:
* storage/indexeddb/mozilla/resources/object-cursors.js:
* storage/indexeddb/mozilla/resources/object-identity.js:
* storage/indexeddb/mozilla/resources/object-store-inline-autoincrement-key-added-on-put.js:
* storage/indexeddb/mozilla/resources/object-store-remove-values.js:
* storage/indexeddb/mozilla/resources/objectstorenames.js:
* storage/indexeddb/mozilla/resources/odd-result-order.js:
* storage/indexeddb/mozilla/resources/open-database-null-name.js:
* storage/indexeddb/mozilla/resources/put-get-values.js:
* storage/indexeddb/mozilla/resources/readonly-transactions.js:
* storage/indexeddb/mozilla/resources/readwrite-transactions.js:
* storage/indexeddb/mozilla/resources/readyState.js:
* storage/indexeddb/mozilla/resources/remove-index.js:
* storage/indexeddb/mozilla/resources/remove-objectstore.js:
* storage/indexeddb/mozilla/resources/versionchange-abort.js:
* storage/indexeddb/mozilla/versionchange-abort.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@163963 268f45cc-cd09-0410-ab3c-d52691b4dbfc

530 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/mozilla/add-twice-failure.html
LayoutTests/storage/indexeddb/mozilla/autoincrement-indexes.html
LayoutTests/storage/indexeddb/mozilla/bad-keypath-expected.txt
LayoutTests/storage/indexeddb/mozilla/bad-keypath.html
LayoutTests/storage/indexeddb/mozilla/clear-expected.txt
LayoutTests/storage/indexeddb/mozilla/clear.html
LayoutTests/storage/indexeddb/mozilla/create-index-unique.html
LayoutTests/storage/indexeddb/mozilla/create-index-with-integer-keys.html
LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics-expected.txt
LayoutTests/storage/indexeddb/mozilla/create-objectstore-basics.html
LayoutTests/storage/indexeddb/mozilla/create-objectstore-null-name.html
LayoutTests/storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html
LayoutTests/storage/indexeddb/mozilla/cursor-mutation.html
LayoutTests/storage/indexeddb/mozilla/cursor-update-updates-indexes.html
LayoutTests/storage/indexeddb/mozilla/cursors-expected.txt
LayoutTests/storage/indexeddb/mozilla/cursors.html
LayoutTests/storage/indexeddb/mozilla/delete-result.html
LayoutTests/storage/indexeddb/mozilla/event-source.html
LayoutTests/storage/indexeddb/mozilla/global-data.html
LayoutTests/storage/indexeddb/mozilla/index-prev-no-duplicate.html
LayoutTests/storage/indexeddb/mozilla/indexes.html
LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key-expected.txt
LayoutTests/storage/indexeddb/mozilla/key-requirements-delete-null-key.html
LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed-expected.txt
LayoutTests/storage/indexeddb/mozilla/key-requirements-inline-and-passed.html
LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key-expected.txt
LayoutTests/storage/indexeddb/mozilla/key-requirements-put-no-key.html
LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key-expected.txt
LayoutTests/storage/indexeddb/mozilla/key-requirements-put-null-key.html
LayoutTests/storage/indexeddb/mozilla/key-requirements.html
LayoutTests/storage/indexeddb/mozilla/object-cursors.html
LayoutTests/storage/indexeddb/mozilla/object-identity.html
LayoutTests/storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html
LayoutTests/storage/indexeddb/mozilla/object-store-remove-values.html
LayoutTests/storage/indexeddb/mozilla/objectstorenames.html
LayoutTests/storage/indexeddb/mozilla/odd-result-order.html
LayoutTests/storage/indexeddb/mozilla/open-database-null-name.html
LayoutTests/storage/indexeddb/mozilla/put-get-values.html
LayoutTests/storage/indexeddb/mozilla/readonly-transactions-expected.txt
LayoutTests/storage/indexeddb/mozilla/readonly-transactions.html
LayoutTests/storage/indexeddb/mozilla/readwrite-transactions.html
LayoutTests/storage/indexeddb/mozilla/readyState.html
LayoutTests/storage/indexeddb/mozilla/remove-index.html
LayoutTests/storage/indexeddb/mozilla/remove-objectstore.html
LayoutTests/storage/indexeddb/mozilla/resources/add-twice-failure.js
LayoutTests/storage/indexeddb/mozilla/resources/autoincrement-indexes.js
LayoutTests/storage/indexeddb/mozilla/resources/bad-keypath.js
LayoutTests/storage/indexeddb/mozilla/resources/clear.js
LayoutTests/storage/indexeddb/mozilla/resources/create-index-unique.js
LayoutTests/storage/indexeddb/mozilla/resources/create-index-with-integer-keys.js
LayoutTests/storage/indexeddb/mozilla/resources/create-objectstore-basics.js
LayoutTests/storage/indexeddb/mozilla/resources/create-objectstore-null-name.js
LayoutTests/storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js
LayoutTests/storage/indexeddb/mozilla/resources/cursor-mutation.js
LayoutTests/storage/indexeddb/mozilla/resources/cursor-update-updates-indexes.js
LayoutTests/storage/indexeddb/mozilla/resources/cursors.js
LayoutTests/storage/indexeddb/mozilla/resources/delete-result.js
LayoutTests/storage/indexeddb/mozilla/resources/event-source.js
LayoutTests/storage/indexeddb/mozilla/resources/global-data.js
LayoutTests/storage/indexeddb/mozilla/resources/indexes.js
LayoutTests/storage/indexeddb/mozilla/resources/key-requirements-delete-null-key.js
LayoutTests/storage/indexeddb/mozilla/resources/key-requirements-inline-and-passed.js
LayoutTests/storage/indexeddb/mozilla/resources/key-requirements-put-no-key.js
LayoutTests/storage/indexeddb/mozilla/resources/key-requirements-put-null-key.js
LayoutTests/storage/indexeddb/mozilla/resources/key-requirements.js
LayoutTests/storage/indexeddb/mozilla/resources/object-cursors.js
LayoutTests/storage/indexeddb/mozilla/resources/object-identity.js
LayoutTests/storage/indexeddb/mozilla/resources/object-store-inline-autoincrement-key-added-on-put.js
LayoutTests/storage/indexeddb/mozilla/resources/object-store-remove-values.js
LayoutTests/storage/indexeddb/mozilla/resources/objectstorenames.js
LayoutTests/storage/indexeddb/mozilla/resources/odd-result-order.js
LayoutTests/storage/indexeddb/mozilla/resources/open-database-null-name.js
LayoutTests/storage/indexeddb/mozilla/resources/put-get-values.js
LayoutTests/storage/indexeddb/mozilla/resources/readonly-transactions.js
LayoutTests/storage/indexeddb/mozilla/resources/readwrite-transactions.js
LayoutTests/storage/indexeddb/mozilla/resources/readyState.js
LayoutTests/storage/indexeddb/mozilla/resources/remove-index.js
LayoutTests/storage/indexeddb/mozilla/resources/remove-objectstore.js
LayoutTests/storage/indexeddb/mozilla/resources/versionchange-abort.js
LayoutTests/storage/indexeddb/mozilla/versionchange-abort.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 7be8436..0802c17 100644 (file)
@@ -1,3 +1,548 @@
+2014-02-12  Brady Eidson  <beidson@apple.com>
+
+        IDB: Reimport storage/indexeddb tests from Blink
+        https://bugs.webkit.org/show_bug.cgi?id=128636
+
+        Rubberstamped by Jer Noble.
+
+        Take two.
+
+        When I did this last night in r163923 the Mozilla tests outputted different results
+        because one of the logging functions they made had become more verbose.
+
+        This time we include the new test expectations for those tests, and update them to
+        reflect the different exception message outputted in WebKit vs Blink.
+
+        * 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/mozilla/add-twice-failure.html:
+        * storage/indexeddb/mozilla/autoincrement-indexes.html:
+        * storage/indexeddb/mozilla/bad-keypath-expected.txt:
+        * storage/indexeddb/mozilla/bad-keypath.html:
+        * storage/indexeddb/mozilla/clear-expected.txt:
+        * storage/indexeddb/mozilla/clear.html:
+        * storage/indexeddb/mozilla/create-index-unique.html:
+        * storage/indexeddb/mozilla/create-index-with-integer-keys.html:
+        * storage/indexeddb/mozilla/create-objectstore-basics-expected.txt:
+        * storage/indexeddb/mozilla/create-objectstore-basics.html:
+        * storage/indexeddb/mozilla/create-objectstore-null-name.html:
+        * storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html:
+        * storage/indexeddb/mozilla/cursor-mutation.html:
+        * storage/indexeddb/mozilla/cursor-update-updates-indexes.html:
+        * storage/indexeddb/mozilla/cursors-expected.txt:
+        * storage/indexeddb/mozilla/cursors.html:
+        * storage/indexeddb/mozilla/delete-result.html:
+        * storage/indexeddb/mozilla/event-source.html:
+        * storage/indexeddb/mozilla/global-data.html:
+        * storage/indexeddb/mozilla/index-prev-no-duplicate.html:
+        * storage/indexeddb/mozilla/indexes.html:
+        * storage/indexeddb/mozilla/key-requirements-delete-null-key-expected.txt:
+        * storage/indexeddb/mozilla/key-requirements-delete-null-key.html:
+        * storage/indexeddb/mozilla/key-requirements-inline-and-passed-expected.txt:
+        * storage/indexeddb/mozilla/key-requirements-inline-and-passed.html:
+        * storage/indexeddb/mozilla/key-requirements-put-no-key-expected.txt:
+        * storage/indexeddb/mozilla/key-requirements-put-no-key.html:
+        * storage/indexeddb/mozilla/key-requirements-put-null-key-expected.txt:
+        * storage/indexeddb/mozilla/key-requirements-put-null-key.html:
+        * storage/indexeddb/mozilla/key-requirements.html:
+        * storage/indexeddb/mozilla/object-cursors.html:
+        * storage/indexeddb/mozilla/object-identity.html:
+        * storage/indexeddb/mozilla/object-store-inline-autoincrement-key-added-on-put.html:
+        * storage/indexeddb/mozilla/object-store-remove-values.html:
+        * storage/indexeddb/mozilla/objectstorenames.html:
+        * storage/indexeddb/mozilla/odd-result-order.html:
+        * storage/indexeddb/mozilla/open-database-null-name.html:
+        * storage/indexeddb/mozilla/put-get-values.html:
+        * storage/indexeddb/mozilla/readonly-transactions-expected.txt:
+        * storage/indexeddb/mozilla/readonly-transactions.html:
+        * storage/indexeddb/mozilla/readwrite-transactions.html:
+        * storage/indexeddb/mozilla/readyState.html:
+        * storage/indexeddb/mozilla/remove-index.html:
+        * storage/indexeddb/mozilla/remove-objectstore.html:
+        * storage/indexeddb/mozilla/resources/add-twice-failure.js:
+        * storage/indexeddb/mozilla/resources/autoincrement-indexes.js:
+        * storage/indexeddb/mozilla/resources/bad-keypath.js:
+        * storage/indexeddb/mozilla/resources/clear.js:
+        * storage/indexeddb/mozilla/resources/create-index-unique.js:
+        * storage/indexeddb/mozilla/resources/create-index-with-integer-keys.js:
+        * storage/indexeddb/mozilla/resources/create-objectstore-basics.js:
+        * storage/indexeddb/mozilla/resources/create-objectstore-null-name.js:
+        * storage/indexeddb/mozilla/resources/cursor-mutation-objectstore-only.js:
+        * storage/indexeddb/mozilla/resources/cursor-mutation.js:
+        * storage/indexeddb/mozilla/resources/cursor-update-updates-indexes.js:
+        * storage/indexeddb/mozilla/resources/cursors.js:
+        * storage/indexeddb/mozilla/resources/delete-result.js:
+        * storage/indexeddb/mozilla/resources/event-source.js:
+        * storage/indexeddb/mozilla/resources/global-data.js:
+        * storage/indexeddb/mozilla/resources/indexes.js:
+        * storage/indexeddb/mozilla/resources/key-requirements-delete-null-key.js:
+        * storage/indexeddb/mozilla/resources/key-requirements-inline-and-passed.js:
+        * storage/indexeddb/mozilla/resources/key-requirements-put-no-key.js:
+        * storage/indexeddb/mozilla/resources/key-requirements-put-null-key.js:
+        * storage/indexeddb/mozilla/resources/key-requirements.js:
+        * storage/indexeddb/mozilla/resources/object-cursors.js:
+        * storage/indexeddb/mozilla/resources/object-identity.js:
+        * storage/indexeddb/mozilla/resources/object-store-inline-autoincrement-key-added-on-put.js:
+        * storage/indexeddb/mozilla/resources/object-store-remove-values.js:
+        * storage/indexeddb/mozilla/resources/objectstorenames.js:
+        * storage/indexeddb/mozilla/resources/odd-result-order.js:
+        * storage/indexeddb/mozilla/resources/open-database-null-name.js:
+        * storage/indexeddb/mozilla/resources/put-get-values.js:
+        * storage/indexeddb/mozilla/resources/readonly-transactions.js:
+        * storage/indexeddb/mozilla/resources/readwrite-transactions.js:
+        * storage/indexeddb/mozilla/resources/readyState.js:
+        * storage/indexeddb/mozilla/resources/remove-index.js:
+        * storage/indexeddb/mozilla/resources/remove-objectstore.js:
+        * storage/indexeddb/mozilla/resources/versionchange-abort.js:
+        * storage/indexeddb/mozilla/versionchange-abort.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  Oliver Hunt  <oliver@apple.com>
 
         Make it possible to implement JS builtins in JS
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.