Upgrade a database, open a second connection at the same version, ensure specifying a lower version causes an error

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;

indexedDB.deleteDatabase(dbname)
PASS String(request) is "[object IDBOpenDBRequest]"

Call open with no version parameter:
indexedDB.open(dbname)

initialUpgradeNeeded():

openSuccess():
connection1 = event.target.result
PASS connection1.version is 1
connection1.onversionchange = connection1VersionChangeCallback
request = indexedDB.open(dbname, 2)

connection1VersionChangeCallback():
connection1.close()

connection2UpgradeNeeded():
connection2 = event.target.result
PASS String(connection2) is "[object IDBDatabase]"
PASS String(request.transaction) is "[object IDBTransaction]"
PASS event.oldVersion is 1
PASS event.newVersion is 2
request.transaction.oncomplete = transactionCompleted

transactionCompleted():
didTransactionComplete = true

connection2Success():
PASS didTransactionComplete is true
PASS event.target.result is connection2
The next connection opens the database at the same version so connection2 shouldn't get a versionchange event.
connection2.onversionchange = unexpectedVersionChangeCallback
PASS String(connection2) is "[object IDBDatabase]"
PASS request.transaction is null
PASS connection2.version is 2
request = indexedDB.open(dbname, 2)
request.onsuccess = connection3Success
request.onblocked = unexpectedBlockedCallback

connection3Success():
event.target.result.close()
connection2.close()
connection3 = event.target.result
PASS connection3.version is 2
request = indexedDB.open(dbname, 1)
request.onerror = errorWhenTryingLowVersion

errorWhenTryingLowVersion():
request.error.message = An attempt was made to open a database using a lower version than the existing version.
request = indexedDB.open(dbname, 4)
request.onupgradeneeded = connection4UpgradeNeeded
request.onsuccess = connection4Success

connection4UpgradeNeeded():
gotConnection4UpgradeNeeded = true
PASS event.oldVersion is 2
PASS event.newVersion is 4

connection4Success():
PASS gotConnection4UpgradeNeeded is true
connection4 = event.target.result
PASS connection4.version is 4
connection4.close()
request = indexedDB.open(dbname)
request.onsuccess = connection5Success

connection5Success():
db = event.target.result
PASS db.version is 4
PASS successfullyParsed is true

TEST COMPLETE

