Test IndexedDB IDBDatabase internal closePending flag

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)
indexedDB.open(dbname)
store = connection.createObjectStore('store')

First, verify that the database connection is not closed:
PASS transaction = connection.transaction('store') did not throw exception.

Database closing steps
"1. Set the internal closePending flag of connection to true."
connection.close()
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

IDBDatabase.name:
"The function must return this name even if the closePending flag is set on the connection."
PASS connection.name is dbname

IDBDatabase.objectStoreNames:
"Once the closePending flag is set on the connection, this function must return a snapshot of the list of names of the object stores taken at the time when the close method was called."
request = indexedDB.open(dbname, 2)
version_change_connection = request.result
version_change_connection.createObjectStore('new_store')
PASS version_change_connection.objectStoreNames.contains('new_store') is true
PASS connection.objectStoreNames.contains('new_store') is false
version_change_connection.close()

IDBDatabase.transaction():
"...if this method is called on a IDBDatabase instance where the closePending flag is set, a InvalidStateError exception must be thrown."
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."
request = indexedDB.open(dbname)
connection = request.result
versionChangeWasFired = false
connection.onversionchange = function () { versionChangeWasFired = true; }
transaction = connection.transaction('store')
connection.close()
closePending is set, but active transaction will keep connection from closing
request = indexedDB.open(dbname, 3)
'blocked' event fired, letting transaction complete and connection close
version_change_connection = request.result
PASS versionChangeWasFired is false
version_change_connection.close()

Database deletion 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."
request = indexedDB.open(dbname)
connection = request.result
versionChangeWasFired = false
connection.onversionchange = function () { versionChangeWasFired = true; }
transaction = connection.transaction('store')
connection.close()
closePending is set, but active transaction will keep connection from closing
request = indexedDB.deleteDatabase(dbname)
'blocked' event fired, letting transaction complete and connection close
PASS versionChangeWasFired is false
PASS successfullyParsed is true

TEST COMPLETE

