78 lines
3.4 KiB
Plaintext
78 lines
3.4 KiB
Plaintext
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
|
|
|