Test that a database is recreated correctly when an open-with-version call is queued behind a deleteDatabase call

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 = "intversion-gated-on-delete.html"
indexedDB.deleteDatabase(dbname)

deleteSuccess():
request = indexedDB.open(dbname)
request.onsuccess = firstSuccessCallback

firstSuccessCallback():
connection1 = event.target.result
connection1.onversionchange = connection1VersionChangeCallback
request = indexedDB.open(dbname)
request.onsuccess = secondSuccessCallback
request = indexedDB.deleteDatabase(dbname)
request.onblocked = deleteDatabaseBlockedCallback
request.onsuccess = deleteDatabaseSuccessCallback
request = indexedDB.open(dbname, 1)
request.onupgradeneeded = upgradeNeededCallback
request.onsuccess = openWithVersionSuccessCallback

secondSuccessCallback():
db = event.target.result
db.onversionchange = connection2VersionChangeCallback

connection1VersionChangeCallback():
PASS event.type is "versionchange"
PASS event.oldVersion is 1
PASS event.newVersion is null

connection2VersionChangeCallback():
PASS event.type is "versionchange"
event.target.close()

deleteDatabaseBlockedCallback():
connection1.close()

deleteDatabaseSuccessCallback():

upgradeNeededCallback():
PASS event.newVersion is 1
PASS event.oldVersion is 0

openWithVersionSuccessCallback():
PASS event.target.result.objectStoreNames.length is 0
PASS successfullyParsed is true

TEST COMPLETE

